Я использую gvim для написания электронных писем и tw=72
разбиваю длинные строки. Теперь я также редактирую основные заголовки почты в том же документе, например, добавляю получателей к своей почте. Теперь с tw=72
ним также порвется каждый раз после 72 символов.
Как я могу установить tw=0
первые 4 строки (это часть заголовка) и tw=72
остальную часть документа?
Мои форматирования выглядят так, если это уместно:
set fo+=tcqn
formatting
mxmehl
источник
источник
textwidth
применяется ко всему буферу.line('.') < 5
, либо проверив, начинается ли строка с заголовка письма (напримерFrom:
,To:
и т. Д.).Ответы:
Благодаря комментарию @ Carpetsmoker на мой вопрос, я смог решить это точно так, как хотел.
С помощью следующей функции в .vimrc (или в моем случае в специальном файле, который загружается только при редактировании моих электронных писем), tw устанавливается на 500, если номер строки меньше 5, в противном случае это 72. С
au CursorMovedI
этим проверяется каждый раз, когда курсор перемещается.Если кто-то планирует реализовать это, рассмотрите возможность замены подстановочного знака
au CursorMovedI *
на фиксированный путь или суффикс файла.источник
Более надежная альтернатива ответу mxmehl.
Если вы используете
filetype=mail
Vim, выделите для вас заголовки:Мы можем использовать информацию о синтаксисе, чтобы определить, является ли строка заголовком, и соответственно установить ширину текста.
Имя синтаксиса заголовков являются
mailHeaderKey
,mailSubject
,mailHeaderEmail
, иmailHeader
. Я узнал это, посмотрев на/usr/share/vim/vim74/syntax/mail.vim
.Причина, по которой я предпочитаю это решение, заключается в том, что оно не зависит от произвольных номеров строк, но работает одинаково корректно для писем с одним заголовком и двадцатью заголовками.
источник
Вы можете достичь этого с помощью autocmds. Вы можете включить их в свой vimrc, но обычно лучше включить их в тип файла, как описано здесь .
Тогда вы можете использовать следующее:
Если вы предпочитаете использовать его без плагина
<buffer>
типа файла, вам необходимо заменить его на шаблон файла.Идея состоит в том, чтобы изменить,
'textwidth'
когда вы входите в режим вставки, и восстановить его, когда вы выходите из него.Если вы обычно перемещаетесь по тексту в режиме вставки (например, с помощью клавиш со стрелками), вы можете улучшить его на основе ссылки, упомянутой в @Carpetsmoke: Предотвратите Vim от разрыва ссылок в середине тега в уценке.
источник
Я не верю, что это возможно. Тем не менее, есть несколько обходных путей.
Вы можете написать свой заголовок, а затем
:set tw=72
. Посколькуtw
не применяется задним числом к тексту, уже находящемуся в вашем буфере,Вы можете набрать всю вещь с помощью,
:set tw=0
а затем, как только вы закончите, перейдите к строке 4:set tw=72
, иgqG
. Или, если вы не хотите делать это вручную, вы можете выполнить макрос или отобразить его. Например, оба из них будут работать:(«р» для «переформатировать»)
Вы можете даже настроить это так, чтобы это происходило автоматически при закрытии vim, при условии, что вы хотите, чтобы оно переформатировалось при закрытии vim, и что существует тип файла, который вы используете только для электронных писем. Например, если все ваши электронные письма имеют
.email
расширение, вы можете сделать:Конечно, вам придется перейти
*.email
на любое расширение файла, которое вы на самом деле используете. Если вы используете что-то вроде этого.txt
, я бы не советовал, потому что это будет портить каждый.txt
файл, который у вас есть.источник