Next: , Previous: , Up: 我想知道多一點   [Contents]


3.3 強大的運算子

運算子( operator )是 vim 裡面一個強大的功能,主要是因為 vim 的運算子都有共同的運作方式,只要知道這些運作方式,學了一個運算子如何使用,之後碰到其他運算子就可以比照辦理。 而且運算子還能配合其他功能,像是移動,來達到高效的操作。 也就是說,可以將一些學過得東西串連起來用,造就了運算子的強大。接下來會以前面提到過的運算子 d 所為例子,介紹運算子的共同運作方式。

  1. 配合 visual mode

    前面也提過,只要在 visual mode 選取文字後再按下 d 就可以將選取的文字刪除。 也就是說利用 visual mode 選取文字後,按下運算子,運算子就會作用在選取的文字上。

  2. operator + motion

    vim 提供了許多不同的移動方式,而運算子可以透過 operator + motion 這個 pattern 來活用各種不同的移動方式。 比如說, dl 會刪掉游標右邊一個字,也就是按下 x, d5j 可以刪掉五行文字,游標在一個字的字首時 d2w 可以刪掉右邊兩個字, dG 可以刪掉游標到檔案結尾的文字。

  3. operator + text object

    除了配合不同的移動方式外,vim 還為運算子提供了稱為 text object 的文字選取方式。 text object 就是將一般寫文章或是程式的單位當成一整個選取對象,像是一個段落,一個{} 區塊等。 比如說,用 operator + motion 的方式要刪兩個文字需要游標在字首並按下 d2w ,用 text object 的方式則是 2daw ,daw 也就是 delete a word,刪掉一個文字的意思。 text object 除了在選取對象上比 motion 的方式適合撰寫時的單位外,也蠻容易理解其意思的。 另外要提的是,同樣刪除一個單位,以文字為例,text object 有兩種不同的選取方式,iw ( in word ) 和 aw ( a word )。 這兩者的差別呢,用下面的句子做範例,假設游標在 test 的 e 上

    This is a test sentence.
    This is a sentence.       daw
    This is a  sentence.      diw
    

    aw 會將空白字元也包含進去,而 iw 則不包含空白字元,或是只包含空白字元。 同樣的選取方式適用在不同的 text object 上。 有幾個常用的 text object 像是 w ( word ), s ( sentence ), p ( paragraph ), " ( c++ 字串 ), {,} ( c++ 的區塊 )等。 詳細可以 :help text-object 從 vim 的文檔中得知。

  4. 運算子按兩次

    當同一個運算子按兩次,像是 ddyy ,運算子操作的單位就會是一行。所以 5ddd5j 同樣都可以刪除五行文字。

善用運算子就像善用移動一樣可以讓文字編輯的速度加快,而運算子串連不同功能讓 vim 可以用相對簡單的方式來做到強大的功能,有空的話就多玩玩不同的操作方式吧。詳細有哪些運算子請 :help operator 觀看 vim 文檔。