如何快速更改文字檔案裡面的內容?使用者61129622604852019-09-06 20:40:49

對已有文字的修改是 vim 的強項,vim 原有的快捷鍵已經可以讓我們完成很多的工作,但是,這還遠遠不夠。

下面,我有一個這樣文字:

我們現在需要把這個多餘的「♂」符號刪除。我們通常是怎樣乾的?

對吧?

但是,這裡有個問題。各位是如何輸入這條命令的呢?

其中最讓人煩躁的就是輸入被替換的 pattern 對吧?特別是,那個 pattern 是特殊符號,或者比較長的時候,這樣要輸入就特別讓人煩躁。在需要大量進行修改的時候,比如修改一本書,這種重複的操作會讓人崩潰。

那麼,有沒有辦法讓這件事變得輕鬆一點呢?當然有,而且不需要外掛、不需要複雜的程式碼,只需要在你的 vimrc 裡面加入一句簡單的快捷鍵對映就可以了:

用法很簡單,進入任意一種可視模式,然後按下快捷鍵(比如這裡是 qq ),就會自動插入一個全域性替換的語句,並且把游標定位在新字串的位置,方便進一步編輯。如果不編輯,那麼直接回車,可視模式下選中的內容就會被刪除。

我們先來看看這句設定。

下面說明幾個要點。

1、vmap

這是一個在 vim 的「可視模式( visual mode )」生效的快捷鍵對映。關於可視模式,請閱讀幫助:

如果在普通模式( normal mode )或者插入模式( insert mode )中,這個快捷鍵不會生效,這樣就可以讓你更靈活的設定快捷鍵,而不必擔心影響到其他的快捷鍵。

你可以使用 v 進入字元可視模式,或者 V(大寫的 v,透過 shfit + v 輸入)進入行可視模式,或者 ctrl+v 進入列可視模式,選中你要刪改的內容。

2、y[ank]

就是常用的複製鍵。在 normal mode 下面,你需要配合各種 motion 按鍵( HJKL 等)來用。但是在可視模式下,預設複製被選中的內容。

這個被選中的內容會預設貯存在無名暫存器( “ )中。

如果你希望使用其他暫存器,當然也可以。參照 yank 命令幫助中關於暫存器的使用方法。

3、`

:g 、:s 等命令中,用來分隔 {pattern} 、 {string} 、 {flag} 等部分的符號並不是固定的,預設情況下,使用的是「 / 」,但是你也可以使用其他任意的單位元組字元(不包括字母、數字、反斜槓、引號或者 | )。當然你必須確保一個命令中分隔符的一致性。

我這裡選用了「 ` 」,因為我自己要替換的內容中,經常都會包括有「 / 」,用其他字元來分隔,就不需要做額外的轉義了。

4、

在 insert mode 中,ctrl+r 可以讓你進入插入暫存器內容的狀態,游標處會出現一個 「 “ 」提示你輸入一個暫存器的名字。

在這個命令中,我輸入了「 ” 」,表明我要插入的是無名暫存器中的內容。而這個內容就是剛剛從可視模式中複製的內容。如果你在前面的命令中使用了其他的暫存器,那麼這個使用那個暫存器就可以了。