Как мне использовать только dp или только строки, а не весь блок в Vim diff?
В настоящее время я использую MacVim (Снимок 64) "Split Diff by...".
Файл Джанго мой settings.py
с версии 1.3.1 до свежего файла с версии 1.4.
Я знаю две основные команды
- do "получить" (и заменить) блок с другой стороны.
- dp, чтобы "поставить" (и заменить) блок на другую сторону.
Но эти две команды записывают весь блок, который в MacVim выделяется фиолетовым цветом.
Если вы посмотрите на 2-й блок, вы увидите, что из строк 2 и 3 есть только 2 слова, которые отличаются: mysite
а также hobbes3
, Я просто хочу заменить каждую строку, а не весь блок.
Итак, что есть команда для замены do do и dp на строку в отличие от целого блока, или мне нужно вручную вводить ее?
Бонусный вопрос: я заметил, что, когда я вручную редактирую блок, я теряю фиолетовую подсветку. Как мне снова "обновить" diff, чтобы включить блики без повторного открытия файла?
Пожалуйста, постарайтесь сохранить ответы Vim-general, в отличие от MacVim.
3 ответа
Есть несколько способов сделать это.
- Выберите диапазон строк в целевом буфере, который вы хотите получить из исходного буфера, и используйте
:diffget
, Например, вы можете визуально выбрать диапазон строк с помощьюV
затем введите:diffget
, - Выберите диапазон строк в исходном буфере, который вы хотите поместить в целевой буфер и используйте
:diffput
, Например, чтобы поместить текущую строку в другой буфер, введите:.diffput
, - Используйте янки и положите. Выберите диапазон строк в исходном буфере, который вы хотите скопировать в целевой буфер, восстановите их, используя
Y
переместите курсор в буфер назначения и поместите их туда, куда вы хотитеp
или жеP
затем удалите ненужные строки. - Нажмите, как указано выше, но в целевом буфере визуально выберите диапазон строк, которые вы хотите заменить (необязательно то же количество строк), и введите
"0p
, При этом используется регистр 0 (ноль), который всегда содержит текст самого последнего янка.
Чтобы "обновить" дисплей, чтобы показать правильную подсветку, выполните :diffupdate
или просто :diffu
, Иногда этого недостаточно, и вам нужно переместить курсор в другое окно, чтобы завершить обновление.
Вы можете прочитать больше о копировании различий в
:help copy-diffs
Я также хотел изменить одну строку в данный момент во время сравнения. Поэтому я создал простую карту и поместил их в мой файл 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 выключит / включит diffmode, так что я просто выключаю и снова включаю.
И бонусный вариант заключается в добавлении
nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>
Это позволит вам отменить опечатку или нежелательные изменения в другом файле / окне, потому что: отменить только вы будете отменять только изменения в текущем окне.
Другой способ — добавитьdiffput
введите команду с интересующим вас диапазоном строк. Итак, в вашем примере вы должны ввести следующую команду на левой панели:
:15,16diffput