19

Vim/gvim обернет длинные строки следующим образом:

000000000000000000000000000000000000|
00000000000000                      |
    11111111111111111111111111111111|
111111111111111111                  |
    22222222222222222222222222222222|
222222222222222222                  |
        3333333333333333333333333333|
3333333333333333333333              |

Есть ли способ заставить Vim обернуть эти строки так:

000000000000000000000000000000000000|
 00000000000000                     |
    11111111111111111111111111111111|
     111111111111111111             |
    22222222222222222222222222222222|
     222222222222222222             |
        3333333333333333333333333333|
         3333333333333333333333     |

Я хочу, чтобы обернутая строка начиналась немного за отступом того места, где начиналась эта строка. (Просто чтобы прояснить, я говорю о переносе, а не о ширине текста.)

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

5 ответов5

17

ОБНОВЛЕНИЕ: эта функциональность появилась в vim 7.4.338, хотя вы захотите 7.4.354 или более позднюю.


Так что, видимо, для этого требуется патч для Vim. Патч Вацлава Смилауэра издан еще в 2007 году. Я обновил патч для работы с Vim 7.2.148 из Fedora 11. Но, похоже, это делает работу.

13

В вашем .vimrc:

set wrap               " soft-wrap lines

" requires +linebreak compile-time option (not in the 'tiny' and 'small' builds); check your :version
set showbreak=----->   " prefix for soft-wrapped lines (no actual line break character)
"set linebreak          " soft-wrap lines only at certain characters (see :help breakat)

" If you like line numbers, you may want this instead:
"set number
"set showbreak=------>\  " line up soft-wrap prefix with the line numbers
"set cpoptions+=n        " start soft-wrap lines (and any prefix) in the line-number area

Или просто введите :set showbreak=-----> в любой сессии.

Для справки, мой исследовательский след (Vim 6.2):: :help 'wrap' -> :help 'linebreak' -> ( :help 'showbreak' -> :help 'cpoptions' :help 'breakat')

1

Решение вашего вопроса может быть достигнуто установкой двух параметров в вашем vimrc:

Чтобы разбить строки с одинаковыми отступами:set breakindent

И один пробел для отступа в мягких линиях:let &showbreak=' '

Это будет работать так:

111111111111111|
 11111111111111|
 11111         |
222222222222222|
 222222222222  |
333333333333333|
 33333         |
0

Грязный "обходной путь", который я сейчас использую, заключается в фиксированном, но большом отступе в префиксе. Выглядит хорошо, если этот фиксированный отступ больше отступа обернутой строки, что имеет место в большинстве случаев.

" 'showbreak'   : string to put before wrapped screen lines
set sbr=\ \ \ \ \ \ \ \ \ \ \ \ \ \|\ 
0

Не идеальный ответ, который вы ищете, но вот что я делаю, чтобы обойти отсутствие у vim правильного отступа.

Во-первых, загрузите руководство по отступам Натанаэля Кейна (необязательно), так как оно лучше показывает, на каком уровне отступа вы находитесь, даже до того момента, когда вы можете установить ширину табуляции только в 2 пробела!

Во-вторых, сопоставьте комбинацию клавиш для переключения переноса слов. У меня установлено значение 'r' для 'wrap' ('w' для сохранения), вот так

:noremap <leader>r :set nowrap! <CR>

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .