Переход на новую строку в Vim (сохраняющий добавление отступа)

Я просто смотрел на это сообщение, которое описывает, как перенести все слова в энергию. Принятое решение было этим:

: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               |
|                                       |
|---------------------------------------|

Какие-либо идеи?

87
задан Community 23 May 2017 в 12:03
поделиться

2 ответа

Лучшее, что вы получите, - это опция showbreak , которая помещает фиксированную строку перед каждой строкой в ​​переносе (я использую set showbreak = ... ).

8
ответ дан 24 November 2019 в 07:52
поделиться

Я согласен с ответом, который гласит, что «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 пробелов.

4
ответ дан 24 November 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: