ভিমডিফ দিয়ে পরিবর্তনগুলি অনুলিপি করার প্রস্তাবিত উপায় কী?


117

ফাইলগুলির সাথে তুলনা করার সময় এবং উত্স কোড সংগ্রহস্থল আপডেট করার সময়, আমি ভিমডিফ ব্যবহার করতে চাই। একটি ফাইল থেকে অন্য ফাইলটিতে করা পরিবর্তনগুলি অনুলিপি করতে আমি সাধারণত একটি মূল অনুক্রম ব্যবহার করি: -

Shift + V (select line)
k or j; { or }; Up or down arrow keys (select more lines)
y  (copy selected lines)
Ctrl + w, left/right arrow (move to other pane)
p (paste lines)

ভিম, কীবোর্ড শর্টকাটগুলির মাস্টার হওয়ায় অবশ্যই এই একই কাজটি করার সহজ উপায় থাকা উচিত। একটি আছে? উত্স-কোড পরিবর্তনগুলি ম্যানুয়ালি আপডেট করতে আপনি কী ব্যবহার করেন?


2
একটি অর্থবহ প্রশ্নে আমার অস্পষ্ট জ্ঞান "এটি যা হওয়া উচিত নয়" রাখার জন্য ধন্যবাদ। উত্তম উত্তরটি এমন কিছু যা আমার অনেক আগে জানা উচিত ছিল।
কালেব

1
আপনার প্রশ্নের সেরা উত্তর এখানে: stackoverflow.com/questions/5288875/…
এরিক

উত্তর:


181

do(diff get) এবং dp(diff put) আপনার যা প্রয়োজন তা হল। এই প্রসঙ্গে অন্যান্য সহায়ক সাধারণ মোড কমান্ডগুলির একটি ছোট তালিকা এখানে।

]c               - advance to the next block with differences
[c               - reverse search for the previous block with differences
do (diff obtain) - bring changes from the other file to the current file
dp (diff put)    - send changes from the current file to the other file
zo               - unfold/unhide text
zc               - refold/rehide text
zr               - unfold both files completely
zm               - fold both files completely

দ্রষ্টব্য:
উভয়ই কাজ করুন doএবং dpযদি আপনি সাধারণ মোডে কোনও ব্লকের নীচে বা কেবল একটি লাইনে থাকেন তবে ভিজ্যুয়াল মোডে না থাকেন। ভিজ্যুয়াল মোডে পাঠ্যের লাইনগুলি নির্বাচন করার সময়, আপনাকে অবশ্যই সাধারণ কমান্ডগুলি ব্যবহার করতে হবে

  • :'<,'>diffget এবং
  • :'<,'>diffput

এছাড়াও দেখুন :h copy-diffs

:diffupdate পরিবর্তনের জন্য ফাইলগুলি পুনরায় স্ক্যান করবে।


4
সত্য। আমি প্রাথমিকভাবে এটি বেশ বিভ্রান্তিকর দেখতে পেয়েছি যেহেতু পুরো (চলমান) ব্লকগুলি অনুলিপি করা হয়েছে। এটি, ডিফার মোডের অভিন্ন লাইনগুলি স্বয়ংক্রিয়ভাবে আড়াল করার পাশাপাশি, আমি নিজেকে "দু'টি প্যানে প্রতিটি ট্রিপল-চেক করার আগে," কী ঘটেছে? "ভাবছিলাম। বলুন যে আপনি কোনও একটিতে ইন্ডেন্টেশন পরিবর্তন করেছেন; তারপরে আমি ভাবছি সব কিছু সরানো হবে। সূক্ষ্ম দানযুক্ত নিয়ন্ত্রণের জন্য (অর্থাত্ ভিজ্যুয়াল নির্বাচন), আমি দেখতে পেয়েছি যে সম্পূর্ণ কমান্ডগুলি :[range]diffgetএবং :[range]diffputপ্রয়োজনীয়।
অ্যালেক্স লিচ

8
আপনি চাক্ষুষ মোড একসঙ্গে সাথে ব্যবহার করতে পারেন diffgetএবং diffput: ① চাক্ষুষ মোডে প্রবেশ করুন এবং কিছু টেক্সট / লাইন চিহ্নিত করুন। ② তারপরে :diffputনির্বাচিত লাইনগুলিকে অন্য ফাইলটিতে ঠেলাতে বা অন্য ফাইল থেকে নির্বাচিত লাইনগুলি টাইপ :diffgetকরুন।
এরিক

6
হাই, কেউ কি জানেন যে জাস্ট এক লাইনের জন্য "কর" (পার্থক্য অর্জন) এর সমতুল্য আছে কিনা? ধরা যাক আপনার কাছে একটি ব্লকের কোড রয়েছে (একাধিক লাইনের) যা আলাদা, এই কোডের যে কোনও লাইনে এই কোডের নীচের লাইনের জন্য কার্সার দিয়ে "করুন" কোডের পুরো ব্লকের জন্য পার্থক্য অর্জন করবে --- তবে আমি কেবল এক লাইনের জন্য পার্থক্য পেতে চাই। প্রতিবারই আমাকে এই লাইনটি দৃশ্যত নির্বাচন করতে হবে, তারপরে "ডিফেজেট", কিছুটা ক্লান্তিকর ...
উইসউইট

12
এটি লক্ষ করা গুরুত্বপূর্ণ যে পূর্বাবস্থায়িত কমান্ডটি কেবল পরিবর্তিত বাফারে কাজ করবে, সুতরাং আপনি যদি নিজের মত ব্যবহার করেন dpএবং পরিবর্তন করেন তবে পূর্বাবস্থায় ফিরে যাওয়ার জন্য আপনাকে অন্য বাফারে স্যুইচ করতে হবে।
র্যান্ডম 832

1
@ উইজউইট: Vপুরো লাইনটি নির্বাচন করতে, তারপরে doযার মূল্য উপযুক্ত তার জন্য বর্তমান ভিএম (8.0) এ একটি নির্দিষ্ট লাইন অনুলিপি করতে কাজ করে।
ড্যানিসাউয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.