Как развернуть / свернуть разделы в Vimdiff?


295

Я начал использовать vimdiff сегодня и хотел сделать некоторые вещи, которые я считал само собой разумеющимся в редакторах diff на основе Windows (например, развернуть / свернуть раздел diff, иметь полное расширение файла / только diff с 3 строками контекста выше или ниже и т. д.). В настоящее время я знаю только следующие команды:

Горячие клавиши:

  • do - Получить изменения из другого окна в текущее окно.

  • dp - Поместите изменения из текущего окна в другое окно.

  • ]c - Перейти к следующему изменению.

  • [c - Перейти к предыдущему изменению.

  • CTRL+ W, w- Переключиться на другое разделенное окно ( CTRL+ W, CTRL+ Wделает то же самое, если вы отпустите CTRLклавишу чуть позже)

Может ли кто-нибудь указать мне правильное направление, чтобы я мог воспроизвести похожие функции?

Было бы хорошо, если бы я мог развернуть / свернуть линии вокруг различий, например.


2
Чтобы добавить / отменить длинный список изменений, обратитесь к stackoverflow.com/q/6093746/212942
TCSGrad


1
Забавно видеть, что вопрос закрывается более чем через 4 года, так как он входит в топ-3 постов, когда «vimdiff» гуглится!
TCSGrad

Ответы:


241

Помимо тех, что вы упоминаете, я часто использую только при различии:

  • :diffupdate :diffu-> пересчитать diff, полезно, когда после внесения нескольких изменений vim больше не показывает минимальные изменения. Обратите внимание, что это работает, только если файлы были изменены внутри vimdiff. В противном случае используйте:
    • :e перезагрузить файлы, если они были изменены вне vimdiff.
  • :set noscrollbind-> временно отключить одновременную прокрутку обоих буферов, включить :set scrollbindи прокрутить.

Большая часть того, что вы просили - это сворачивание: глава руководства пользователя vim о сворачивании . Вне различий я иногда использую:

  • zo -> открытая складка.
  • zc -> закрыть фолд.

Но вы, вероятно, будете лучше обслуживаться:

  • zr -> снижение уровня складывания.
  • zm -> Еще один складной уровень, пожалуйста.

или даже:

  • zR -> Полностью уменьшите складывание, сказал я!
  • zM -> Свернуть Мост !.

Другая вещь, которую вы просили, используя n линий сгиба, может быть найдена в разделе справочника vim по опциям , через раздел по diff :

  • set diffopt=<TAB>, затем обновите или добавьте context:n.

Вы также должны взглянуть на раздел руководства пользователя по diff .


Очень всеобъемлющий действительно! Я бы проверил ссылки, которые вы сказали, но оставил вопрос открытым еще пару дней, чтобы узнать, получу ли я больше ответов (я отправил сообщение на выходных, и тогда мало кто будет активен).
TCSGrad

Кстати, вы знаете, можно ли использовать vimdiff для слияния / трехстороннего разрешения и т. Д.? Это было бы действительно здорово!
TCSGrad

1
@ shan23 Для трехстороннего слияния (для git), проверьте это . Там тоже есть комментарии по svn. Тем не менее, пытаясь выяснить команды, когда у вас есть 4 буфера (do / dp не работает).
Quornian

Для :set noscrollbindвступления в силу он также должен быть :set nocursorbindиспользован, который не по умолчанию. Таким образом, оба варианта должны быть скорректированы.
кровавый

4

установить vimdiff игнорировать регистр

Начав Vim Diff с

 gvim -d main.sql backup.sql &

Я нахожу, что досадно, что один файл содержит ключевые слова MySQL в нижнем регистре, а другой в верхнем регистре, показывая различия практически на каждой строке

:set diffopt+=icase

это обновляет экран динамически, и вы можете так же легко отключить его снова


Хотя это хороший совет, я не понимаю, как это связано с рассматриваемым вопросом (как развернуть и свернуть разделы diff в vimdiff).
Пол Стелиан

3

На самом деле, если вы это сделаете Ctrl+W W, вам не нужно будет добавлять это дополнительно Ctrl. Делает то же самое.


14
Я считаю, что ^ W ^ W намного быстрее печатать быстрее, чем ^ W w.
Хоббс

Думал это будет стоит упомянуть github.com/ankr/dotfiles/blob/master/files/vimrc#L103
ankr

0

Ctrl + W, W, как уже упоминалось, может быть использован для перехода от панели к панели.

Теперь вы можете выбрать одно конкретное изменение и вставить его на другую панель следующим образом. Здесь я даю пример, например, как если бы я хотел изменить свой кусок кода с панели 1 на панель 2, и в настоящее время мой курсор находится на панели 1

  • Используйте Shift-v, чтобы выделить строку, и используйте клавиши «вверх» или «вниз», чтобы выбрать фрагмент кода, который вам требуется, и продолжайте с шага 3, описанного ниже, чтобы вставить свои изменения в другую панель.

  • Используйте визуальный режим, а затем измените его

    1 нажмите «v», чтобы перейти в визуальный режим. 2 используйте клавиши «вверх» и «вниз» для выбора необходимого кода. 3 нажмите «Esc», клавишу «Esc». 4 Теперь используйте «yy», чтобы скопировать, или «dd», чтобы вырезать изменение. Ctrl + W, W ', чтобы перейти к панели 2 6 Нажмите «P», чтобы вставить изменения, где вам нужно


1
Все, что вы указали (кроме первой строки), является особенностью самого vim, а не vimdiff per say.
TCSGrad
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.