Как мне использовать только dp или только строки, а не весь блок в Vim diff?

В настоящее время я использую MacVim (Снимок 64) "Split Diff by...".

Файл Джанго мой settings.py с версии 1.3.1 до свежего файла с версии 1.4.

Screenshot

Я знаю две основные команды

  1. do "получить" (и заменить) блок с другой стороны.
  2. dp, чтобы "поставить" (и заменить) блок на другую сторону.

Но эти две команды записывают весь блок, который в MacVim выделяется фиолетовым цветом.

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

Итак, что есть команда для замены do do и dp на строку в отличие от целого блока, или мне нужно вручную вводить ее?

Бонусный вопрос: я заметил, что, когда я вручную редактирую блок, я теряю фиолетовую подсветку. Как мне снова "обновить" diff, чтобы включить блики без повторного открытия файла?

Пожалуйста, постарайтесь сохранить ответы Vim-general, в отличие от MacVim.

3 ответа

Решение

Есть несколько способов сделать это.

  1. Выберите диапазон строк в целевом буфере, который вы хотите получить из исходного буфера, и используйте :diffget, Например, вы можете визуально выбрать диапазон строк с помощью Vзатем введите :diffget,
  2. Выберите диапазон строк в исходном буфере, который вы хотите поместить в целевой буфер и используйте :diffput, Например, чтобы поместить текущую строку в другой буфер, введите :.diffput,
  3. Используйте янки и положите. Выберите диапазон строк в исходном буфере, который вы хотите скопировать в целевой буфер, восстановите их, используя Yпереместите курсор в буфер назначения и поместите их туда, куда вы хотите p или же Pзатем удалите ненужные строки.
  4. Нажмите, как указано выше, но в целевом буфере визуально выберите диапазон строк, которые вы хотите заменить (необязательно то же количество строк), и введите "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
Другие вопросы по тегам