Заставить vimdiff переносить строки?

При сравнении двух файлов в VIM я предпочитаю перенос строк. Однако по умолчанию vimdiff отключает перенос.

Есть ли способ установить автоматический перенос строки для каждого diff?


person mgouin    schedule 30.05.2013    source источник
comment
Спасибо за ваш вклад. Это работает, но только когда vim запускается в режиме diff. Я также заинтересован в принудительном переносе строки, когда diff запускается изнутри vim. Можно ли также из аналогичной команды? Спасибо!   -  person mgouin    schedule 06.06.2013
comment
Интересно, а у меня как раз обратная проблема, а 'set nowrap' не работает. Строки переносятся автоматически, если я вхожу в режим сравнения.   -  person ka3ak    schedule 17.05.2019


Ответы (6)


Я использую следующее:

autocmd FilterWritePre * if &diff | setlocal wrap< | endif

FilterWritePre запускается непосредственно перед записью сгенерированного diff в буфер, а setlocal wrap< копирует глобальное значение wrap. Конечно, также можно просто форсировать setlocal wrap.

person Nikita Kouevda    schedule 26.06.2013
comment
Большое спасибо! Это именно то, что я искал. Я бы проголосовал, но не могу (слишком ново)... - person mgouin; 11.07.2013
comment
Я не знаю почему, но это не работает. Я использую vim 7 на машине Debian. user2442259 Ответ работает. - person eddy147; 13.01.2014
comment
@ eddy147 Ваша глобальная настройка wrap или nowrap? Если второе, попробуйте тот же autocmd с setlocal wrap вместо setlocal wrap<. - person Nikita Kouevda; 13.01.2014

Вы можете поместить следующее в ваш vimrc.

au VimEnter * if &diff | execute 'windo set wrap' | endif
person user2442259    schedule 01.06.2013
comment
На самом деле, это работает для меня и почему-то не тот ответ, который принят. - person BHS; 07.08.2015

Когда vim уже запущен, команды для запуска сравнения и переноса находятся в каждом из файлов разделенного окна:

:diffthis
:set wrap

Однако diff+wrap отображается неправильно:

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

Это приводит к вертикальному сдвигу двух файлов. Конечно, цвета помогают визуально компенсировать этот сдвиг. Но на нескольких строках diff смещение может быть выше высоты окна, что делает diff нечитаемым.

Значит вопрос не до конца решен... Подскажите пожалуйста.

person Sylvain    schedule 11.12.2013
comment
:windo set wrap устанавливает перенос в оба разделения. - person Sophia Feng; 15.08.2015
comment
@SophiaFeng Мы здесь говорим не об этом. Каждый случай, когда текущая строка из двух файлов занимает разное количество виртуальных строк для отображения, делает прокрутку более рассинхронизированной. - person noname; 08.02.2019

Вы можете запустить это

vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' file1 file2
person nos    schedule 26.07.2017

Мне пришлось решить этот вопрос для демонстрации, где я хотел, чтобы vimdiff закрывал только при запуске с определенного терминала.

В конце концов я прибегнул к грубому:

alias vimdiff='vimdiff +"windo set wrap"'
vimdiff file.orig file
person Sylvain Leroux    schedule 02.02.2017

Если у вас есть больше файлов, и вы не хотите делать это постоянным в своем vimrc

vimdiff -c 'windo set wrap' file1 file2 file3 [file4]

или просто windo set wrap после открытия vim

person gtatr    schedule 12.02.2019