Мягкая переноска на 80 символов в Vim в окне произвольной ширины - PullRequest
115 голосов
/ 13 июня 2009

Я хочу использовать Vim's soft wrap (:set wrap) для переноса некоторого кода в 80 символов, независимо от моей фактической ширины окна.

Я пока не смог найти способ сделать это - вся мягкая упаковка кажется привязанной к ширине окна

  • textwidth и wrapmargin предназначены для жесткого переноса (они вставляют символы новой строки в файл)
  • вертикальное разбиение на несколько окон и использование :vertical resize 80 (возможно, с :set breakat=, чтобы разрешить разрывы на любом символе) на одном из этих видов работ (даже если это немного хакерски), но разрывы при использовании :set number в качестве номера строк занимают переменное количество столбцов (в зависимости от длины файла), и они являются частью 80.

Есть ли способ сделать это в vim? По другим источникам * не выглядит многообещающе .

Прямо сейчас мое приближение состоит в том, чтобы иметь /^.\{80}\zs.\+ в качестве поиска по умолчанию, поэтому он, по крайней мере, выделен. Я думал о добавлении элемента :syntax для него, но он сломался, когда он перекрывал другие элементы синтаксиса, поэтому я отбросил эту идею.

Ответы [ 5 ]

35 голосов
/ 13 июня 2009

Вы могли бы

  • установить большую минимальную ширину для столбца номеров строк с помощью :set numberwidth=6 и
  • тогда вы можете изменить размер окна с помощью :set columns=86 (или с помощью мыши) до нужного размера.

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

Вы можете выделить 80-й столбец, используя :match, как сказано здесь и здесь .

Кроме того, я не вижу никакого способа сделать это. Похоже, это было бы неплохо.

16 голосов
/ 09 октября 2014

Попробуйте это:

set columns=80
autocmd VimResized * if (&columns > 80) | set columns=80 | endif
set wrap
set linebreak
set showbreak=+++

Вы можете удалить if (&columns > 80) |, если всегда хотите 80 столбцов.

16 голосов
/ 12 июня 2011

У меня нет решения для мягкого переноса, но что касается маркировки столбца, начиная с Vim 7.3 (выпущено 2010-08-15) :set colorcolumn=80 выделит столбец 80. Цвет будет зависеть от вашего файла синтаксиса. .

См. Проблемы макета столбца Vim 80 , :h colorcolumn.

1 голос
/ 12 апреля 2010

Вы пробовали 'linebreak'?

        *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
  'linebreak' 'lbr' boolean (default off)
        local to window
        {not in Vi}
        {not available when compiled without the  |+linebreak|
        feature}
If on Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen.  Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.  The
value of 'showbreak' is used to put in front of wrapped lines.
This option is not used when the 'wrap' option is off or 'list' is on.
Note that <Tab> characters after an <EOL> are mostly not displayed
with the right amount of white space.
0 голосов
/ 24 декабря 2018

Нет хорошего способа сделать это. Мы можем взломать импровизированный setlocal softwrap с помощью autocmd, если изменим ответ @eborisch. Если мы изменяем размер каждый раз, когда вводим буфер, и мы изменяем размер до определенной длины, когда установлена ​​локальная переменная softwrap, мы получаем желаемое поведение.

Давайте предположим, что мы хотим мягко обернуть до 80 столбцов, мы можем написать следующее в .vimrc.

augroup softwrap
    autocmd VimResized * if (exists('b:softwrap') && &columns > 80) | set columns=80 | endif
    autocmd BufEnter * set columns=999
augroup END

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

let b:softwrap=1
set columns=80
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...