[英]How does vim define a sentence. How can I wrap a sentence as quickly as possible
[英]VIM - Sentence wrap for writing emails
我目前正在使用VIM為Mutt編寫電子郵件,效果很好,但是自動換行使我發瘋。 我現在從muttrc文件調用時設置了自動換行,如下所示:
-c 'set fo+=aw' -c 'set tw=76'
正是我想要的,這完美地工作了。 問題是我還在mutt中使用標頭,以便在編寫電子郵件時,標頭在我的編寫器中排在首位:
From: Name <me@me.com>
To:
Cc:
Bcc:
Subject:
Reply-To:
Message here
問題在於,VIM現在包裝了所有內容,包括標題。 如果我沒有輸入抄送,而轉到“主題”行,則密件抄送是這樣包裝的:
Cc: Bcc: Subject:
因此,我正在尋找一種方法來阻止它在編輯器的第一個空行之前包裝任何內容? 有任何想法嗎?
首先,您不需要在.muttrc
顯式設置您的設置,因為Vim會自動識別mutt郵件,而無需設置專門用於使用Vim編寫郵件的設置,只需創建文件$HOME/.vim/ftplugin/mail.vim
(如果不存在,則創建目錄),然后將您的搜索結果放在此處:
setl tw=76
setl fo+=aw
但是,您需要在Vim中顯式啟用文件類型插件才能啟用此功能,例如,您的.vimrc
需要包含或類似的filetype plugin on
。
為了確保僅在編寫郵件正文時考慮這些formatoptions(如我在mutt中set edit_headers
),我編寫了一條自動命令,該命令專門檢查您所在的區域並應用某些設置(如果您使用在標題,補丁程序或簽名區域中,...
我在這里對此進行了更詳細的介紹。 您可能還對該頁面上的其他設置感興趣。
兩個想法:使用內置功能,您可以嘗試:set fo+=w
。 然后,尾部空白表示段落繼續。 如果您保留標題中的尾隨空格,但將其添加到其他位置(在電子郵件正文中),則可能會起作用。
另外,有些插件可以根據您在緩沖區中的位置運行操作。 該hookcursormoved插件具有linechanged條件,在這里可以:set fo-=a
在第一(標題)線和:set fo+=a
elsehere。 或看看我的OnSyntaxChange插件 ,它可以根據語法組來執行此操作。 但是,對於該特定用途,您也可以自己編寫代碼,基本上使用
:autocmd CursorMoved,CursorMovedI * if line('.') < 8 | set fo-=a | else | set fo+=a | endif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.