Отмена установки различий при копировании строк между окнами vimdiff - PullRequest
16 голосов
/ 03 июня 2009

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

vimdiff file1 file2

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

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

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 03 июня 2009

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

nmap du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
12 голосов
/ 24 ноября 2011

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

Поскольку команды навигации diff одинаковы для любого файла, вам будет хорошо!

следующая разница: ]c

prev diff: [c

1 голос
/ 19 октября 2016

При сравнении файлов мне нравится использовать 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
...