2009-06-03 16 views
14

Nếu, tại dấu nhắc lệnh, tôi chạySuy vi diff đặt khi sao chép ranh giới giữa vimdiff cửa sổ

vimdiff file1 file2 

tôi nhận được một trường hợp vim có hai tập tin mở side-by-side. Giả sử rằng các văn bản trong các tập tin trông như thế này (file1 là bên trái, file2 ở bên phải):

╔═══════╤═══════╗ 
║foo │-------║ 
║bar │bar ║ 
║grue │-------║ 
║~  │~  ║ 
║~  │~  ║ 
╚═══════╧═══════╝ 

Bây giờ giả sử rằng con trỏ của tôi là trên "f" của "foo" và rằng tôi muốn để sao chép dòng đầu tiên của tệp1 vào dòng đầu tiên của tệp2.

Một cách để làm điều này là để chọn và yank (copy) đường với v $ y, và sau đó sử dụng Ctrl + wl để di chuyển con trỏ trên vào dòng đầu tiên của file2, và sau đó gõ p để dán dòng đã sao chép. Nếu tôi làm điều này và sau đó tôi quyết định tôi không thực sự muốn làm điều đó sau khi tất cả, tôi có thể bấm u để hoàn tác lệnh dán tôi đã thực hiện trong tệp2.

Một cách khác để làm điều đó là sử dụng lệnh đặt lệnh dp khác. Tuy nhiên, nếu sau khi làm điều này, tôi quyết định không làm như vậy, tôi không thể hoàn tác nó đơn giản bằng cách nhấn u vì con trỏ của tôi vẫn nằm trong tệp1 và lệnh u sẽ hoàn tác thay đổi gần đây nhất đối với tệp1 , không phải thay đổi gần đây nhất đối với tệp2. Vì vậy, thay vào đó tôi phải sử dụng Ctrl + w l hoặc Ctrl + w w để di chuyển con trỏ đến cửa sổ cho file2 và sau đó báo chí u. Vì vậy, câu hỏi của tôi là: sau khi tôi đã sử dụng dp như trên, có cách nào dễ dàng để tôi hoàn tác nó mà không phải di chuyển con trỏ đến cửa sổ của tệp khác không? Không.

Trả lời

12

Thực sự không có lệnh nào cho điều này nhưng bạn có thể lập bản đồ cho riêng mình. Đặt thông tin sau vào vimrc của bạn và sau đó sử dụng du để làm khác hoàn tác.

nmap du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
+1

Điều này có thể cư xử kỳ lạ nếu có nhiều hơn hai cửa sổ. (Chỉ cần một lưu ý, dù sao một câu trả lời hoàn hảo cho câu hỏi). –

10

Phụ thuộc như thế nào công việc của bạn đi, nhưng tôi thường sử dụng do để có được một diff vào tập tin của tôi chứ không phải là dp trong đó đặt các diff vào khác. Bằng cách đó, bạn có thể sử dụng uctrl + r như thường lệ.

Vì các lệnh điều hướng khác hoạt động giống nhau từ một trong hai tệp, bạn nên làm tốt!

diff tiếp theo: ]c

trước diff: [c

+0

giải pháp đơn giản hơn nhiều +1 – cctan

0

Khi so sánh file, tôi muốn sử dụng vimdiff hay vim -d.Một cách thay đổi sao chép với vimdiff là:

]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 

này hoạt động như:

:diffget the same with do 
:diffput the same with dp 
+0

dễ đọc hơn –

+0

bạn có thể bỏ phiếu cho câu trả lời của mình không? Tôi cần tối đa 15 –

Các vấn đề liên quan