Я просто смотрел на это сообщение, которое описывает, как перенести все слова в энергию. Принятое решение было этим:
:set formatoptions=l
:set lbr
Который берет этот текст (вкладки показывают как \t):
*Inside of window *Outside of window
|---------------------------------------|
|\t\tthis is a like of text that will wr|ap here
|\t\tcan you see the wrap |
| |
|---------------------------------------|
Это выполняет поведение как это (вкладки показывают как \t):
*Inside of window *Outside of window
|---------------------------------------|
|\t\tthis is a like of text that will |
|wrap here |
|\t\tcan you see the wrap |
| |
|---------------------------------------|
Я однако хотел бы переопределить эту функцию. Я хотел бы, чтобы перенесенная строка имела то же количество вкладок перед ним, которые строка выше имеет плюс одна. Т.е.:
*Inside of window *Outside of window
|---------------------------------------|
|\t\tthis is a like of text that will |
|\t\t\twrap here |
|\t\tcan you see the wrap |
| |
|---------------------------------------|
Какие-либо идеи?
Лучшее, что вы получите, - это опция showbreak
, которая помещает фиксированную строку перед каждой строкой в переносе (я использую set showbreak = ...
).
Я согласен с ответом, который гласит, что «showbreak» - лучший вариант. Showbreak обычно не позволяет вам помещать непечатаемые символы (например, пробелы или табуляции) в строку showbreak, поэтому при обычном использовании он просто даст вам индикатор вдоль левого поля, то есть без реального отступа. Это не очень хорошо, поскольку основная цель OP, я думаю, состоит в том, чтобы дать обернутым строкам отступ, чтобы они не загромождали область левого поля и не выглядели как собственные линии.
Таким образом, один из способов добавить (уродливый) отступ с помощью showbreak - просто использовать много символов, например, ": set showbreak => --------------->" . В результате получается что-то вроде этого:
*Inside of window *Outside of window
|---------------------------------------|
|\t\tthis is a like of text that will |
|>--------------->wrap here |
|\t\tcan you see the wrap |
| |
|---------------------------------------|
Лучшей альтернативой может быть использование неразрывных пробелов (при условии, что ваш экземпляр Vim поддерживает Unicode), каждый из которых можно ввести в строку showbreak, используя последовательность клавиш ctrl-v, 160. Таким образом, вы можете ввести пустую строку showbreak с левой стороны, которая будет выглядеть как настоящий отступ. Например, ": set showbreak =......... >>" где каждый '.' в команде фактически является неразрывный пробел, вводимый нажатием ctrl-V, 160. Таким образом, вы получите обертку с красивым отступом, например:
*Inside of window *Outside of window
|---------------------------------------|
|\t\tthis is a like of text that will |
| >>wrap here |
|\t\tcan you see the wrap |
| |
|---------------------------------------|
У вас все еще нет возможности изменять уровень отступа в соответствии с отступом предыдущей строки, но, по крайней мере, вы получаете чистый отступ обернутых строк без большого количества визуальных помех вдоль левого края окна. По-прежнему может возникнуть путаница, если отступ обернутой строки меньше, чем у начала фактической строки, но этого, возможно, можно было бы избежать, сделав "отступ" showbreak достаточно большим (т. Е., больше, чем любой отступ, обычно встречающийся в вашем коде), но все же достаточно мал, чтобы обеспечить достаточно места для разборчивого переноса текста. Я думаю, что для многих целей с этим неплохо справится отступ из 40 или 50 пробелов.