Як я можу робити лише dp чи просто рядки, а не весь блок у Vim?


28

На даний момент я використовую опцію меню "Спліт розділити ..." MacVim (Знімок 64).

Файл - це мій Django settings.pyвід версії 1.3.1 до свіжого файлу версії 1.4.

Знімок екрана

Я знаю дві основні команди

  1. do щоб "отримати" (і замінити) блок з іншого боку.
  2. dp щоб "поставити" (і замінити) блок на інший бік.

Але ці дві команди записують весь блок, який у MacVim є фіолетовим кольором.

Якщо ви подивитесь на 2-й блок, то видно, що з другого рядка 2 і 3 є лише 2 слова, які відрізняються: mysiteі hobbes3. Я просто хочу замінити на рядок не весь блок.

Отже, яка команда замінити do doі dpна рядок на противагу цілому блоку чи мені вручну вводити його?

Питання про бонус : я помітив, що раз редагуючи блок вручну, я втрачаю фіолетове виділення. Як знову "оновити" різницю, щоб включити основні моменти, не відкриваючи файл?

Будь-ласка, спробуйте зберегти відповіді Vim-General як протилежні MacVim.

Відповіді:


30

Існує ряд способів зробити це.

  1. Виберіть діапазон рядків у буфері призначення, який ви бажаєте отримати з вихідного буфера, і використовуйте :diffget. Наприклад, ви можете візуально вибрати діапазон ліній V, а потім ввести :diffget.
  2. Виберіть діапазон рядків у вихідному буфері, який ви хочете помістити в цільовий буфер, і використовуйте :diffput. Наприклад, щоб ввести поточний рядок в інший буфер, введіть :.diffput.
  3. Використовуйте янку і покладіть. Виберіть діапазон рядків у вихідному буфері, який ви хочете скопіювати, у цільовий буфер, потягніть їх за допомогою Y, перемістіть курсор до буфера призначення та покладіть їх там, де ви хочете, pабо Pвидаліть рядки, які ви не хочете.
  4. Як і вище, але в буфері призначення візуально виберіть діапазон рядків, які потрібно замінити (не обов'язково однакову кількість рядків) та введіть "0p. Для цього використовується 0 (нульовий) регістр, який завжди містить текст останнього yank.

Щоб "оновити" дисплей, щоб відобразити належне підсвічування, виконати :diffupdateабо просто :diffu. Іноді цього недостатньо, і вам потрібно перемістити курсор до іншого вікна, щоб завершити оновлення.

Ви можете прочитати більше про копіювання різниць у

:help copy-diffs

3

Я також хотів змінити один рядок у даний момент під час розм. Тому я створив просту карту і помістив їх у свій файл vimrc.

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

Ви можете використовувати do замість dg, але я більше звик думати "diffget", а не [o] btain.

Для вашого бонусу я просто двічі використовую іншу просту карту:

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

Тепер df вимкне / ввімкне дифмод, тому я просто відключу його та знову ввімкну.

І бонусний варіант - додати

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

Це дозволить скасувати помилку друку або небажану зміну в іншому файлі / вікні, оскільки: скасування просто у буде скасувати зміну лише у теперішньому вікні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.