25

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

Файл Django my settings.py с версии 1.3.1 до свежего файла с версии 1.4.

Скриншот

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

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

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

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

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

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

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

2 ответа2

27

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

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

Чтобы "обновить" дисплей, чтобы показать правильную подсветку, выполните :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 выключит / включит diffmode, так что я просто выключаю и снова включаю.

И бонусный вариант заключается в добавлении

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

Это позволит вам отменить опечатку или нежелательные изменения в другом файле / окне, потому что: отменить только вы будете отменять только изменения в текущем окне.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .