Мне было интересно, есть ли у Vim возможность интеллектуального переноса строк кода, чтобы он сохранял тот же отступ, что и строка, в которой он отступает. Я заметил это в каком-то другом текстовом редакторе, таком как редактор электронного текста, и обнаружил, что это помогло мне легче понять то, что я ищу.
Например, а не
<p>
<a href="http://www.example.com">
This is a bogus link, used to demonstrate
an example
</a>
</p>
это будет выглядеть как
<p>
<a href="somelink">
This is a bogus link, used to demonstrate
an example
</a>
</p>
:set autoindent
и:set smartindent
Ответы:
Эта функция была реализована 25 июня 2014 г. в виде патча 7.4.338. За этим последовало несколько исправлений, улучшающих эту функцию, последним из которых был 7.4.354, так что это именно та версия, которая вам нужна.
Выдержки из справки vim ниже:
Также имеет отношение к этому
showbreak
параметру, это добавит к сумме вашей смены указанный вами символ (символы).Пример конфигурации
Примечание о поведении
Если вы не укажете этот
sbr
параметр,showbreak
любые символы добавляются к отступу. Удалениеsbr
из приведенного выше примера приводит к эффективному отступу в 4 символа; с этим параметром, если вы просто хотите использоватьshowbreak
без дополнительных отступов, укажитеshift:0
.Вы также можете задать отрицательный сдвиг, который будет иметь эффект перетаскивания
showbreak
символов и переноса текста обратно в любое доступное пространство отступа.При указании
min
значения смещенная величина будет сжата, если ширина терминала меньше, ноshowbreak
символы всегда сохраняются.источник
set breakindent
в вашу конфигурацию vim приведет к разрыву строки и переносу по отступу - вместо того, чтобы разрыв и начало следующей строки, как если бы это была новая строка.set breakindentopt=shift:4
к вашей конфигурации vim приведет к появлению дополнительных 4 пробелов.breakindentopt
. Синтаксис не очевиден из справочной документации. Спасибо @fritzo за пример в вашем комментарии.Для этого есть патч, но он держится годами, и последний раз, когда я проверял, не применился чисто. См. Запись «Правильный отступ обернутых строк» в http://groups.google.com/group/vim_dev/web/vim-patches - я действительно хотел бы, чтобы это было в основной строке.
Обновление: похоже, что эта ссылка перешла на битроты. Вот более свежая версия патча .
Обновление 2: оно было объединено в апстрим (начиная с версии 7.4.345), так что теперь вам нужно только это сделать
:set breakindent
.источник
Я не думаю, что возможно иметь точно такой же отступ, но вы все равно можете получить лучший обзор, установив параметр «showbreak».
Пример:
Настоящая вещь выглядит лучше, чем приведенный выше пример кода, потому что Vim использует другой цвет для '>>>'.
источник
:set showbreak=\ \ \ \ \ \ \ \ \ \ \ \ \ \
(комбинация пробелов с обратной косой чертой делает пробел символа разрыва. Таким образом, вы можете добавить достаточно пробелов, чтобы они были глубже, чем большая часть вашего обернутого кода (например, 10 пробелов будут глубже, чем 2, четыре пробела табуляции, а 14 будут глубже, чем 3 четыре пробела); приятной особенностью пространства является то, что оно меньше отвлекает визуально (если вы этого хотите).set showbreak=\ \ \ \ \ \ \ \ \ \ \ \ \ \
он гораздо менее читабеленlet &showbreak=repeat(' ', 14)
ОБНОВЛЕНИЕ: в июне 2014 года в Vim был добавлен патч для поддержки
breakindent
опции (версия 7.4.346 или более поздняя для лучшей поддержки).Вы также можете попробовать,
:set nowrap
что позволит vim отображать длинные строки, прокручивая их вправо. Это может быть полезно для изучения общей структуры документа, но может быть менее удобным для фактического редактирования.Другие варианты, близкие к тому, что вы ищете, - это
linebreak
иshowbreak
. С помощьюshowbreak
вы можете изменить то, что отображается у левого края строк, которые обернуты, но, к сожалению, это не позволяет изменять отступ в зависимости от текущего контекста.источник
Я знаю, что единственный способ сделать это - использовать символ возврата (как упомянуто Cfreak) и комбинировать эту
textwidth
опцию с различными опциями отступа. Если ваш отступ настроен правильно (как я полагаю, по умолчанию с синтаксисом html, но в противном случае смотрите параметрыautoindent
иsmartindent
), вы можете:Если у вас есть какие-либо настройки в
formatoptions
настройках, возможно, лучше просто сделать:Что это значит:
Обратите внимание, что это не то же самое, что мягкий перенос: он переносит строки в исходный файл, а также на экран (если, конечно, вы не сохраните его!). Есть и другие настройки, которые могут быть добавлены к
formatoptions
автоматическому форматированию при вводе: подробности в:help fo-table
.Для получения дополнительной информации см .:
источник
Я думаю, вам все равно придется использовать возврат
источник
Если ваш HTML- код достаточно хорошо сформирован, может помочь его запуск через xmllint :
источник
Макро-решение:
Редактировать:
Операция
gq{motion}
автоматически форматирует все, что установлено для переменной textwidth. Это проще / лучше, чем использовать80lBi^M
для моего макроса.Если у вас включен автоотступ
Тогда ввод возврата в конце строки приведет к отступу следующей строки на такую же величину. Вы можете использовать это для жесткого ввода строк, если хотите. Следующий макрос использует это для автоматического отступа текста:
установите регистр z на:
и установите регистр x на:
Тогда сделай
для активации макросов. Через несколько секунд ваш текст будет состоять из строк с правильным отступом не более 80 символов.
Пояснение:
Вот анализ макросов:
Часть 1 (макрос z):
Часть 2 (макрос x):
Предостережения:
Этот макрос сломается, если есть СЛОВО длиной 80 символов или более.
Этот макрос не выполняет умных действий, таких как отступ строк за тегами.
Используйте настройку lazyredraw (: set lazyredraw), чтобы ускорить это
источник