Vim Line Wrap с отступом


20

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

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

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

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

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

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

Ответы:


17

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


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


1
Поскольку Fedora выпускает обновления для Vim, я обновляю патч. См. Retracile.net/wiki/VimBreakIndent для последних.
откат

Бонус указывает на кого-то, кто может объяснить, как заставить это работать с MacVim.
пончик

Где патч? Этот сайт не ссылается на все, что я вижу
puk

@puk: Извините, серьезное обновление программного обеспечения изменило некоторые ссылки. Я исправил это сейчас.
откат

1
На сегодняшний день (25 июня 2014 г.) патч breakindent официально является частью Vim 7.4 - он добавлен
патчами

14

В вашем .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

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

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

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

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

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


0

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

" 'showbreak'   : string to put before wrapped screen lines
set sbr=\ \ \ \ \ \ \ \ \ \ \ \ \ \|\ 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.