Làm thế nào để tôi chỉ dp hoặc chỉ làm các dòng, không phải toàn bộ khối trong Vim diff?


28

Tôi hiện đang sử dụng tùy chọn trình đơn "Split Diff by ..." của MacVim (Snapshot 64).

Tệp này là của Django settings.pytừ phiên bản 1.3.1 đến tệp mới từ phiên bản 1.4.

Ảnh chụp màn hình

Tôi biết hai lệnh cơ bản

  1. do để "có được" (và thay thế) một khối từ phía bên kia.
  2. dp để "đặt" (và thay thế) một khối sang phía bên kia.

Nhưng hai lệnh đó ghi toàn bộ khối, trong MacVim là các điểm nổi bật màu tím.

Nếu bạn nhìn vào khối 2, bạn có thể thấy rằng từ dòng 2 và 3 chỉ có 2 từ khác nhau: mysitehobbes3. Tôi chỉ muốn thay thế trên mỗi dòng chứ không phải toàn bộ khối.

Vì vậy, có một lệnh để thay thế làm dodpmỗi dòng trái ngược với toàn bộ một khối hoặc tôi phải tự gõ nó ra?

Câu hỏi thưởng : Tôi nhận thấy rằng một khi tôi tự chỉnh sửa một khối, tôi sẽ mất phần tô sáng màu tím. Làm cách nào để "làm mới" diff một lần nữa để bao gồm các phần nổi bật mà không mở lại tệp?

Vui lòng cố gắng giữ câu trả lời Vim-general trái ngược với MacVim dành riêng.

Câu trả lời:


30

Có một số cách để làm điều này.

  1. Chọn phạm vi dòng trong bộ đệm đích mà bạn muốn lấy từ bộ đệm nguồn và sử dụng :diffget. Ví dụ: bạn có thể chọn trực quan một loạt các dòng với V, sau đó nhập :diffget.
  2. Chọn phạm vi dòng trong bộ đệm nguồn mà bạn muốn đặt vào bộ đệm đích và sử dụng :diffput. Ví dụ, để đặt dòng hiện tại vào bộ đệm khác, hãy gõ :.diffput.
  3. Sử dụng yank và đặt. Chọn phạm vi dòng trong bộ đệm nguồn mà bạn muốn sao chép vào bộ đệm đích, sử dụng chúng Y, di chuyển con trỏ đến bộ đệm đích và đặt chúng ở nơi bạn muốn phoặc Psau đó xóa các dòng bạn không muốn.
  4. Yank như trên, nhưng trong bộ đệm đích, chọn trực quan phạm vi các dòng bạn muốn thay thế (không nhất thiết phải cùng số lượng dòng) và loại "0p. Điều đó sử dụng thanh ghi 0 (không) luôn chứa văn bản của yank gần đây nhất.

Để "làm mới" màn hình để hiển thị tô sáng thích hợp, thực hiện :diffupdatehoặc đơn giản :diffu. Đôi khi điều đó là không đủ và bạn cần di chuyển con trỏ sang cửa sổ khác để hoàn thành việc làm mới.

Bạn có thể đọc thêm về sao chép diffs trong

:help copy-diffs

3

Tôi cũng muốn sửa đổi một dòng tại một thời điểm nhất định trong một khác biệt. Vì vậy, tôi đã tạo một bản đồ đơn giản và đặt chúng vào tệp vimrc của mình.

nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>

Bạn có thể sử dụng làm thay vì dg, nhưng tôi quen với việc nghĩ "diffget" thay vì [o] btain.

Đối với phần thưởng của bạn, tôi chỉ cần sử dụng một bản đồ đơn giản khác hai lần:

nnoremap <silent> <leader>df :call DiffToggle()<CR>

Bây giờ, df sẽ tắt / bật diffmode, vì vậy tôi chỉ cần tắt và bật lại.

Và một tùy chọn tiền thưởng là thêm

nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

Điều này sẽ cho phép bạn hoàn tác một lỗi đánh máy hoặc thay đổi không mong muốn trên tệp / cửa sổ khác, bởi vì: hoàn tác chỉ bạn sẽ hoàn tác một thay đổi trong cửa sổ hiện tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.