Как остановить разрыв строки в vim


257

Мне нравится, что длинные строки отображаются более чем на одной строке терминала; Мне не нравится, что vim вставляет новые строки в мой текст. Какую часть .vimrc я должен изменить?


7
Для ясности: вам нравится, что длинные строки отображаются более чем на одной строке терминала; тебе не нравится, что vim вставляет новые строки в твой настоящий текст? Если это так, то :set nowrapэто противоположность того, что вы хотите :(.
Эндрю Айлетт

@ Андрей: да, ваше резюме точно, что я хочу
Хайюань Чжан

Ответы:


304

использование

:set wrap

Визуально переносить строки, то есть строка по-прежнему представляет собой одну строку текста, но Vim отображает ее на нескольких строках.

использование

:set nowrap

Для отображения длинных строк одной строкой (т.е. вы должны прокручивать горизонтально, чтобы увидеть всю строку).


3
Спасибо за советы, ребята. Я пошел с: set nowrap и: set textwidth = 0 отлично работает
Роберт Белтран

5
Когда я печатаю, я все еще хочу видеть «визуальный» предел в 80 столбцов, и я не хочу, чтобы vim автоматически добавлял перевод строки, когда я печатаю после 80-го столбца. Как мне это сделать?
Оливье Понс

7
Это именно тот ответ, который я искал, но это не ответ на вопрос ОП. Это немного вводит в заблуждение, чтобы это было лучшим ответом. Я не знаю, как исправить эту ситуацию. Я бы просто отредактировал ваш ответ, чтобы также ответить на оригинальный вопрос. Но уже есть правильный ответ, за который проголосовали почти так же. Так что я просто проголосовал за переключение двух ответов.
Даниэль Дарабос

3
Это именно тот ответ, который я не искал, и это не ответ на вопрос ОП.
peeol

Это не ответ на вопрос.

194

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

Этот вид визуального / виртуального переноса строк включается с помощью wrapопции окна:

set wrap

Мне не нравится, что vim вставляет новые строки в мой текст.

Чтобы отключить перенос физической строки, очистите оба параметра: textwidthи wrapmarginпараметры буфера:

set textwidth=0 wrapmargin=0

1
Спасибо! set textwidth=0 wrapmargin=0работает, но если я вставлю его .vimrc, это не будет иметь эффекта, например, для простых текстовых файлов. Как узнать и устранить перезапись?
Qubodup

7
@qubodup Вы можете проверить, что что-то перезаписывает ваши настройки .vimrc, открыв файл, в котором вы видите проблему, и введя ее :verbose set textwidth? wrapmargin?. Это скажет вам их текущие значения, а также, где они были установлены. Возможно, у вас есть плагин, который переопределяет их. В этом случае вы можете либо удалить этот плагин, либо попытаться переопределить настройку плагина позже в вашем пути выполнения (например:) ~/.vim/afterили с помощью вашей собственной автокоманды. Правильный подход будет зависеть от того, где / как он сбрасывается.
Лоуренс Гонсалвес

set wrapи set linebreakэто то, что сделал это для меня.
Илья Чоли

36

Я не уверен, что полностью понимаю, но вы, возможно, ищете параметр конфигурации 'formatoptions'. Попробуйте что-то вроде :set formatoptions-=t. tВариант будет вставить разрывы строк , чтобы сделать обтекание текстом в ширину набора по textwidth. Вы также можете поместить эту команду в свой .vimrc, просто удалите двоеточие ( :).


3
Мне кажется, это лучший вариант для удовлетворения желания ОП. Мне нравится тот факт, что vim по-прежнему показывает вертикальную линию в tw.
Митч

3
Это единственный ответ, фактически касающийся вопроса ОП. Большинство других делают обратное. OP по-прежнему хочет, чтобы длинные строки отображались как обернутые, но vim не вставляет разрывы строк автоматически.
Себастьян

33

Используйте :set nowrap.. работает как шарм!


10
За исключением того, что он делает противоположное тому, что ОП определяет как разыскиваемое поведение ...: P
Морлок

5
@ Морок, но отвечает на вопрос, который у меня был, и гугл привел меня сюда :)
Бен Усман

есть ли сочетание клавиш для этого?
Пини Чейни

@PiniCheyni, добавьте в свой файл .vimrc: nnoremap <Cw>: установите invwrap <CR> Затем вы можете использовать Ctrl + W для переключения переноса текста.
Reas0n

30

:set tw=0

VIM не будет автоматически вставлять разрывы строк, но сохранит перенос строк.


3
Я хочу с точностью до наоборот ... когда я печатаю, я все еще хочу видеть "визуальный" предел в 80 столбцов, и я не хочу, чтобы vim автоматически добавлял перевод строки, когда я печатаю после 80-го столбца. Как мне это сделать?
Оливье Понс

16

Вы можете найти set lbrполезным; с set wrapэтим будет обтекание, но только разрезание строки в пробеле, а не в середине слова.

например

without lbr the li
ne can be split on
a word

и

with lbr on the
line will be
split on 
whitespace only

Настоятельно рекомендуется избегать сокращенных вариантов, потому что в будущем вам придется выполнить поиск в справочной системе, чтобы понять, что вы установили, поэтому используйте set nolinebreakвместоset lbr
SergioAraujo

12

set formatoptions-=t Сохраняет визуальную ширину текста, но не добавляет новую строку в режиме вставки.


4

Странно, что для такой простой настройки потребуется такое количество «фокус-покуса».

Чтобы ответить на ваш вопрос сейчас, мне показалось, что он работает с сочетанием следующего:

:set wrap linebreak nolist

(это, кажется, предотвращает разрыв существующих строк, просто перенос.)

И

set formatoptions=l

(это предотвращает разрыв новых / отредактированных строк, в то время как + = не делает этого для меня, так как другие настройки / плагины, кажется, находят место и добавляют свои собственные опции, которые переопределяют мою.)


4

Если, как и я, вы используете gVim в Windows, то ваш файл .vimrc может быть источником другого «примера» файла Vimscript, который автоматически устанавливает textwidth(в моем случае 78) текстовые файлы.

Мой ответ на такой же вопрос, как и этот, - Как остановить перенос текста gVim в столбце 80 - на сайте Vi и Vim Stack Exchange :

В моем случае комментарий Витора предложил мне выполнить следующее:

:verbose set tw?

Это дало мне следующий вывод:

textwidth=78
      Last set from C:\Program Files (x86)\Vim\vim74\vimrc_example.vim

В vimrc_example.vim я нашел соответствующие строки:

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  ...

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  ...

И я обнаружил, что мой .vimrc получает этот файл:

source $VIMRUNTIME/vimrc_example.vim

В моем случае я не хочу textwidthустанавливать какие-либо файлы, поэтому я просто закомментировал соответствующую строку в vimrc_example.vim .


1
Вместо того, чтобы редактировать файл vimrc_example.vim, я просто добавил autocmd FileType text setlocal textwidth=0файл vimrc, и это устранило проблему, когда другие предложенные решения этого не сделали.
Гранд-адмирал

3

Это правильно, что установить сейчас позволит вам вставить длинную строку без добавления новых строк в vi / vim, но тогда строка не будет визуально перенесена для удобства чтения. Вместо этого вам нужно прокрутить только одну длинную строку.

Чтобы визуально переносить строку, но не вставлять в нее символы новой строки, установите перенос (который, вероятно, по умолчанию не требуется) и установите textwidth = 0 .

В некоторых системах значение textwidth = 0 установлено по умолчанию. Если вы не находите, что это так, добавьте set textwidth = 0 в ваш файл .exrc, чтобы он стал вашим пользователем по умолчанию для всех сеансов vi / vim.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.