Текущая проблема:
Хочу чтобы перед закрытием файла в Виме в него вносились изменения. Но только для определенного типа файлов. Наваял такое:
autocmd FileType mail autocmd BufUnload * :%s/ \n/ /
Ниработает =( Надо еще как-то сохранить изменения очевидно. как? функцией?
Контекст (возможно я вообще все не так делаю и есть способ получше?):
По определенным причинам мигрирую с mutt'а на thunderbird. сейчас стоит b43, официальный билд с моззиловского фтп. хочу редактировать текст в vim'е, интегрировать pgp, отправлять почту в plaintext, format=flow. с последним проблема.
Если набирать текст сразу в Thunderbird, то визуально он разбивается на строки с длиной <72, а при включенном mailnews.send_plaintext_flowed отправляется как положенно: заголовок f=f, строки в конце имеют «soft linebreak», т.е. пробел. Я форматирую всегда с пустой строкой между параграфами.
Настроил Enigmail для интеграции с gpg, настроил vim как external editor через плагин с globs.org (он просто запускает vim с временным файлом, через мой самодельный скрипт-обертку, потом помещает его содержимое в окно громоптицы). Но если заранее правильно отформатировать текст в vim'е, то при возвращении в TB он мало того что считает что переносы строк это именно hard linebreak (edit->rewrap не помогает), так еще и перед отправкой «сьедает» пробелы в конце строки! так что в итоге получается не валидный reflow текст. как это отключить я не знаю (может подскажет кто?). можно конечно вручную удалять \n и заменять его на пробел в окне ТБ, но это же печально. можно наверное написать плагин для этого, но я не брался пока так глобально. поэтому пока решил «кормить» тандерберду неформатированный текст, т.е. параграфы одной длинной строкой, без лайнбрейков вообще. так работает, но редактировать так мягко говоря неприятно. wrap я не люблю. в итоге оставляю автоматическое форматирование, и хочу в дополнение к нему чтобы а) при запуске редактора форматировать и б) при выходе из редактора склеивать строки одного параграфа в одну строку. на BufWrite кидать не хочу, потому что сохраняюсь помногу раз, а не только один раз перед выходом из редактора. Пока решил так, костыльно:
augroup emails
autocmd!
autocmd FileType mail setlocal textwidth=71 formatoptions=awn nomodeline
"autocmd FileType mail autocmd BufRead * :!par w71qie
autocmd FileType mail normal gggqG
"autocmd FileType mail autocmd BufUnload * :%s/ \n/ /
autocmd FileType mail autocmd BufWritePre * :%s/ \n/ /
autocmd FileType mail autocmd BufWritePost * undo
augroup END
Так все работает, но хочется как минимум BufUnload. Помимо того что это через гланды, BufWritePost еще выводит дополнительные сообщения при сохранении что раздражает. Ну и вешается оно глобально; я обычно запускаю отдельный vim из TB, но что если а) случайно буду редактировать файл с ft=mail в обычном своем виме? б) открою что-то еще в новом буфере в этом виме, например чтобы скопировать текст откуда-то и вставить в письмо? Хотелось бы обезопасится и вешать эти ивенты как-то на максимально лимитированный набор условий, желательно только в этом буфере.
Может, это все можно как-то нормально делать а не так через жопу? Как люди TB пользуются?