學習vi和vim編輯器(11):進階編輯方法(2)

來源:互聯網
上載者:User

學習vi和vim編輯器(11):進階編輯方法(2)

儲存命令:

vi和ex中提供了許多方法來儲存一長串命令序列,這樣當調用已儲存的序列時,只需要輸入幾個字元即可。

單詞縮寫:

可以定義縮寫,讓vi在處於插入模式時替你自動將輸入展開成原文。定義縮寫的命令為:" ab abbr phrase ",其中abbr就是給phrase指定的縮寫。注意,在插入模式中,只有將縮寫當成單個單詞輸入時,縮寫才會被展開,單詞內的abbr不會被展開。如所示,將"vi"定義為"visual editor"的縮寫。

通過" :unab abbr" 來取消一個縮寫的定義,這樣之後再輸入該縮寫時,縮寫將不會被展開。通過" :ab "命令列出當前所有定義的縮寫。

還有一點值得說明,在實際測試時發現,如果縮寫出現在所代表的片語中,該縮寫只會展開一次,並不會無限遞迴展開(但有的版本的vi編輯器可能會無限展開或者縮寫定義失敗)。

使用map命令:
map命令將命令序列“對應”到一個沒有用到的鍵。所以map命令的作用類似於ab命令,但是map命令是對vi的命令模式定義宏,而ab命令是對插入模式定義宏。

:map x sequence:定義字元x映射到sequence命令序列;

:unmap x sequence: 取消字元x所映射的命令;

:map:列出所有被映射的字元;

需要注意的是,最好只對命令模式中沒有用到的鍵做映射。如果對vi中已經使用的按鍵做映射,則該鍵原有的功能就會消失。而在命令模式中沒有用到的按鍵有(不同版本的vi會有所不同):字母鍵:g,K,q;修飾鍵:CTRL+A,CTRL + K,CTRL + O,CTRL + W,CTRL + X;符號:_,*,\與=。

如所示,把交換兩個單詞順序的命令序列映射為" q "(" dw "用於刪除一個單詞," e "移到下一個單詞的結尾," l "往右移動一格," p "放置剛剛刪除的單詞),這樣便可以在編輯會話的任何時候,用q鍵來交換兩個單詞的順序:

保護按鍵免被ex解釋:

在定義映射命令時,某些按鍵並不能直接輸入並把它們作為命令序列的一部分,例如ENTER,ESC,BACKSPACE,DELETE鍵等。如果需要把這些鍵作為命令序列的一部分,需要在前面加上CTRL+V,從而轉換按鍵的正常意義。而且輸入Ctrl+V後,螢幕上顯示的是" ^ "字元,接著輸入enter鍵後,螢幕上顯示的是" ^M "。類似地,退格鍵轉義後顯示為" ^H ",ESC鍵轉義後顯示為" ^[ "。

這種用法可以用在任何ex命令中,而不僅僅是map命令。這就意味著我們可以在縮寫命令或替換命令中輸入分行符號,退格符等。例如,對num定義如下所示的縮寫:

在插入模式中輸入num後,num便會自動延伸為:

還有幾個需要注意的事項:

(1)豎線(|)在ex中具有特殊含義(作為多個ex命令的分隔字元號),所以不能在插入模式的映射鍵中使用豎線。

(2)如果需要將控制字元作為映射字元,例如將" CTRL+A "映射為sequence命令序列,可以使用如下命令 " :map CTRL+A sequence ",但是有三個控制字元必須用" CTRL+V "進行轉義,分別為" CTRL+T ", " CTRL+W ", " CTRL+X "。 因此如果要對" CTRL+T "進行映射,則需要按以下方式輸入":map CTRL+V CTRL+T sequence "。但是實際測試時,並不是這樣,例如可以直接對" CTRL+X "進行映射,前面並不需要進行轉義。反倒是" CTRL+A "要進行轉義,難道書上又講錯了,這裡先記下來吧。

(3)映射序列中可以包含其他映射命令,也就是說允許嵌套映射序列。該功能是由vi編輯器的remap選項控制的,而且該選項預設是開啟的。

映射鍵的範例:

(1)大多數時候我們按" e "鍵將游標移動到單詞結尾是為了在單詞後面新增內容,因此可以做如下映射:

這樣在命令模式中輸入" e "鍵就可以直接移動到單詞結尾並進入插入模式。

(2)儲存一個檔案並編輯下一個檔案:

再次提醒,螢幕上顯示的" ^M "對應的按鍵為:先輸入" CTRL+V ",再輸入" ENTER "。

(3)將C/C++裡的某行代碼進行注釋:

這樣在命令模式中直接輸入g,就能對該行代碼進行注釋。其實方法還有很多,再給出一種用搜尋命令實現的方法:

插入模式中的映射鍵:

一般來說,映射應該只在命令模式中有用,因為在插入模式中輸入某個按鍵就應該代表輸入相應的文本,而不是代表執行相應的命令序列。但是,通過在map命令後面加上驚嘆號(!),即可強制覆蓋按鍵的原有含義,以產生插入模式中的映射行為。
例如前面對" e "鍵進行如下的映射:"map e ea",這樣在命令模式中輸入" e ",就能夠直接將游標移動到單詞尾部並進入插入模式。但是如果在插入模式中使用" e "鍵,就代表輸入字母" e "。如果想在插入模式中達到同樣的效果,需要按以下方式定義:

這樣在插入模式中輸入" e "鍵也能夠將游標移動到當前單詞尾部並仍然保持為插入模式。但這樣就存在一個問題:再也無法輸入文本" e "了。如果想讓字元" e "恢複正常的文本輸入方式,可以使用如下命令:" :unmap! e "(但是實際測試時該命令無法使" e "鍵恢複為輸入文本,難道書上又出錯了?)。

《VI和VIM編輯器》中還介紹了映射功能鍵的相關知識,可以參考《VI和VIM編輯器》p125 http://www.bkjia.com/os/201410/342830.html。

本章vi命令總結:

" :ab "," :unab "," :map "," :unmap ",轉義按鍵" CTRL+V "," :map! "," :unmap! "。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.