簡體   English   中英

如何正確使用vim自動包裝?

[英]How to use vim autowrap correctly?

我正在嘗試使用vim自動換行功能在輸入時自動將段落自動換行成不超過80個字母的實時行。 可以通過set textwidth=80set fo+=a vim formatoptionsfoa選項基本上告訴vim在鍵入時包裝整個段落。

但是,有一個非常煩人的副作用,就是我再也不能通過按回車鍵來換行。

這是一個例句。

說出以上句子,如果我想寫成:

這是

一個例句。

通常,我可以將光標移至“ a”並進入插入模式,然后按Enter。 但是在set fo+=a ,當我在插入模式下按Enter在“ a”時什么也不會發生。 我注意到的一件事是,如果“ is”和“ a”之間沒有空格,請按Enter鍵將插入一個空格。 但是此后沒有其他事情發生。

那我在這里想念什么? 如何停止這種煩人的行為?

您可以運行:help fo-table來查看選項的說明:

a   Automatic formatting of paragraphs.  Every time text is inserted or
    deleted the paragraph will be reformatted.  See |auto-format|.
    When the 'c' flag is present this only happens for recognized
    comments.

這意味着,每次插入字符時,vim都會嘗試自動格式化段落。 這將導致它將所有內容移回同一行。

我認為您根本不需要添加a 我使用neovim,但此處的行為應相同。 根據幫助頁面,默認值為:

(default: "tcqj", Vi default: "vt")

嘗試從.vimrc完全刪除set fo+=a 保持set textwidth=80 那應該解決您的問題。

編輯set textwidth=80 ,如果要格式化現有段落,可以在視覺選擇中突出顯示它,然后按gq

經過一番探索,我發現了一種可以在某種程度上解決問題的變通辦法,盡管並不完美。

基本思想是,在進入換行符時,在發送<CR>時暫時禁用自動包裝,然后再恢復自動包裝。 有多種方法可以做到這一點。 據我所知,最好的方法是使用粘貼模式,因為進入粘貼模式時不必退出插入模式。 因此,只需在插入模式下將以下命令放入您喜歡的任何鍵綁定中即可。 我現在使用的是inoremap <CN> <F2><CR><F2>

我之所以認為這不是最佳選擇的原因是,由於某種原因,我無法以這種方式綁定<Enter> ,而不得不使用另一個鍵。

如果可以通過這種方式配置<Enter><CR> ,則問題將100%解決。

以下內容使我可以使用Enter鍵在將文本寬度設置為79個字符的同時開始新的一行:

set tw=79 "width of document                                                                            
set fo=cqt                                                                      
set wm=0 "# margin from right window border

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM