VIM - перенос предложений для написания электронных писем

В настоящее время я использую VIM для написания электронных писем для Mutt, он отлично работает, но перенос слов сводит меня с ума. В настоящее время я устанавливаю перенос слов при вызове из файла muttrc следующим образом:

-c 'set fo+=aw' -c 'set tw=76'

Это работает отлично, как раз то, что я искал. Проблема в том, что я также использую заголовки в mutt, поэтому, когда я пишу электронное письмо, заголовки идут первыми в моем писателе:

From: Name <[email protected]>
To: 
Cc: 
Bcc: 
Subject: 
Reply-To: 

Message here

Проблема в том, что теперь VIM упаковывает все, включая заголовки. Когда я подхожу к строке темы, если я не ввел CC, а BCC обертывается так:

Cc: Bcc: Subject:

Итак, я ищу способ остановить его от переноса чего-либо перед первой пустой строкой редактора? Любые идеи?


person jfreak53    schedule 03.10.2013    source источник


Ответы (2)


Во-первых, вам не нужно явно устанавливать свои настройки в вашем .muttrc, так как Vim автоматически распознает почту mutt, и чтобы установить ваши настройки для написания писем с помощью Vim, вы просто создаете файл $HOME/.vim/ftplugin/mail.vim (создаете каталоги, если они не существуют ) и поместите туда свои настройки:

setl tw=76
setl fo+=aw

Однако вам нужно явно включить плагины типов файлов в Vim, чтобы включить это, например. ваш .vimrc должен содержать filetype plugin on или подобное.

Чтобы убедиться, что эти параметры формата учитываются только при написании тела письма (поскольку у меня есть set edit_headers в mutt), я написал автокоманду, которая специально проверяет регион, в котором вы находитесь, и применяет определенные настройки, если вы в шапке или в патче или в области подписи,...

Я написал об этом более подробно здесь. Вас также могут заинтересовать другие настройки на этой странице.

person Christian Brabandt    schedule 04.10.2013

Две идеи: со встроенными функциями вы можете попробовать :set fo+=w дополнительно. Затем завершающий пробел означает, что абзац продолжается. Если вы уберете завершающий пробел в заголовке, но добавите его в другом месте (в теле письма), это может сработать.

Кроме того, есть плагины, которые могут запускать действия в зависимости от того, где вы находитесь в буфере. Плагин hookcursormoved имеет условие linechanged, где вы могли бы :set fo-=a в первых строках (заголовке) и :set fo+=a еще здесь. Или взгляните на мой плагин OnSyntaxChange, который может сделать это в зависимости от синтаксическая группа. Но для этого конкретного использования вы также можете закодировать это самостоятельно, в основном с помощью

:autocmd CursorMoved,CursorMovedI * if line('.') < 8 | set fo-=a | else | set fo+=a | endif
person Ingo Karkat    schedule 03.10.2013
comment
Есть ли способ загрузить плагин в cli при вызове Vim? И отключить плагин, когда он не вызывается из cli? - person jfreak53; 03.10.2013
comment
Да, переместите скрипт из ~/.vim/plugin/foo.vim на один каталог вверх и загрузите его с помощью -c 'runtime foo.vim'. - person Ingo Karkat; 03.10.2013