Текстовая ширина VIM не имеет никакого эффекта - PullRequest
20 голосов
/ 28 февраля 2011

Это похоже на глупый вопрос, но я не могу найти ответ в Интернете (или в справке VIM). Я использую VIM 7.2 на Mac OS X. Все, что я хочу сделать, это обернуть мои строки в 72 символа, но делать

:set textwidth=72 

не имеет никакого эффекта. Текстовая ширина устанавливается правильно (я вижу это, когда я просто запрашиваю ": установить текстовую ширину"), но ни существующие строки, ни новые строки, которые я печатаю после установки текстовой ширины, не переносятся. Если я начинаю новую строку, все равно не переносить. Откройте и закройте файл, без изменений. Я также пытался: установить wrapmargin = 72 (с текстовой шириной = 0), без эффекта.

Что мне здесь не хватает?

Ответы [ 7 ]

16 голосов
/ 28 февраля 2011

Попробуйте gggqG применить новую ширину текста ко всему буферу.

  • gg означает: перейти к началу буфера
  • gq означает: переформатироватьтекст, включенный в движение
  • G означает: перейти в конец буфера

(Это будет работать, если параметры формата установлены правильно, как подробно описано в посте Zyx)

С другой стороны, вы также можете отобразить существующий текст шириной 72 символа, добавив modeline в начале или конце вашего файла.См. :help modeline

Что-то вроде vim:tw=72 должно работать.

10 голосов
/ 28 февраля 2011

Что печатает

:set formatexpr?
:set indentexpr?
:set cindent?
:set filetype?
:set paste?
:filetype

.

По крайней мере один из них (и я думаю, что все они) переопределит настройку для textwidth.

Например, если вы редактируете исходный файл C, правила отступа C переопределяют textwidth.

8 голосов
/ 06 сентября 2013

Я искал ответ на тот же вопрос, и мне пришлось немного поболтать, прежде чем я нашел решение в документах VIM.Итак, я подумал, что обновлю тему и сэкономлю время другим.

Проблема в моем случае заключалась в том, что по умолчанию ftplugin отключал текстовую полосу.

Простое обновление вашего .vimrc с помощью (:set tw=79 && :set formatoptions+=t) не будет работать, так как fplugins получены после vimrc.

Вот шаги, которые я выполнил:

1) выясните, какие ваши текущие форматирования (внутри vim)

:set formatoptions?
formatoptions=croql (note no 't')

2) создайте файл filetype.vim какпо предложению vimdocs (http://vimdoc.sourceforge.net/htmldoc/filetype.html#ftplugin-overrule)

Overrule the settings after loading the global plugin.
You must create a new filetype plugin in a directory from the end of
'runtimepath'.  For Unix, for example, you could use this file:
    vim ~/.vim/after/ftplugin/fortran.vim
In this file you can change just those settings that you want to change.

3) добавьте строку :set formatoptions+=t && :set textwidth=79 в этот файл.

Вуаля!в следующий раз, когда вы откроете файл, он установит текстовую ширину для ваших желаемых символов.

В качестве средства отладки вы всегда можете проверить, какой файл переопределяет ваши настройки vimrc, добавив в вашу команду подробный текст.Так, например, если я хочу проверить, кто последний обновлял formatoptions, я набрал бы

:verbose set formatoptions? 
formatoptions=croqlt
Last set from ~/.vim/after/ftplugin/fortan.vim
6 голосов
/ 28 февраля 2011

Vim не будет ничего делать, если не будет запрошено. textwidth будет иметь эффект для редактируемых в данный момент строк, если у вас есть либо t (только для комментариев), c (только для комментариев) или оба в formatoptions (если a там нет, тогда он будет автоматически переноситься только тогда, когда вы достигнете поля, установленного textwidth), или если вы используете gq для переформатирования текста. Если я не ошибаюсь, вы можете установить такие formatexpr или formatprg, чтобы textwidth игнорировался.

2 голосов
/ 13 июня 2016

У меня возникла точно такая же проблема, и я обнаружил, что следующее достаточно хорошо решило ее для меня:

autocmd FileType python setlocal textwidth=79 formatoptions+=t

Не стесняйтесь менять python на ваш тип файла (например, *разделенный запятыми список python,ruby,go,sh,javascript)

Подробнее о formatoptions

см. :h fo-table
2 голосов
/ 28 апреля 2014
set formatoptions+=t

Это может помочь вам

0 голосов
/ 21 марта 2019

Я использую Neovim и тоже встречался с этой проблемой.После установки textwidth на 80 в моем init.vim содержимое текстового файла не изменяется при открытии файла.Для существующего текста мы должны вручную отформатировать его как gggqG.

Когда вы вводите новые символы в строке, будет работать опция textwidth (вы получите автоматический перевод строки, если номер символа достигнет80).

...