Отмена diff при копировании строк между окнами vimdiff

Если в командной строке я запустил

vimdiff file1 file2

Я получаю экземпляр vim, у которого два файла открыты бок о бок. Предположим, что текст в файлах выглядит так (file1 находится слева, file2 - справа):

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

Теперь предположим, что мой курсор находится на "f" "foo" и что я хочу скопировать первую строку файла1 в первую строку файла2.

Один из способов сделать это - выбрать и выдернуть (скопировать) строку с помощью v $y, а затем использовать Ctrl + wl, чтобы переместить курсор на первой строке файла2, а затем введите p, чтобы вставить скопированную строку. Если я это сделаю, и тогда я решил, что я действительно не хочу этого делать, я могу нажать u, чтобы отменить команду вставки, которую я выполнил в файле2.

Другой способ сделать это - использовать команду diff put dp. Однако, если после этого я решил, что не хотел этого делать, я не могу его отменить, просто нажав u, потому что мой курсор все еще находится в файле1 и u отменяет последнее изменение файла1, а не последнее изменение файла2. Поэтому вместо этого я должен использовать Ctrl + wl или Ctrl + ww, чтобы переместить курсор в окно для файла2, а затем нажмите u.. p >

Итак, мой вопрос: после того, как я использовал dp, как указано выше, есть ли какой-либо простой способ для его отмены, не переместив курсор на другое окно файла?

Ответы

Ответ 1

На самом деле для этого нет никакой команды, но вы могли бы отобразить свои собственные. Поместите следующее в свой vimrc, а затем используйте du, чтобы выполнить разблокировку.

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

Ответ 2

Зависит от того, как работает ваш рабочий процесс, но я обычно использую d o для получения diff в мой файл, а не d p, который переносит diff в другой. Таким образом вы можете использовать u и ctrl + r, как обычно.

Так как команды навигации diff работают одинаково из любого из файлов, вы должны быть хорошими!

next diff: ]c

prev diff: [c

Ответ 3

При сравнении файлов мне нравится использовать vimdiff или vim -d. Способ копирования изменений с помощью vimdiff:

]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

Это работает как:

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