保存命令
vi和ex都有許多不同的用來保存長命令序列的方法,當調用這些已保存的序列中某一個時,只需輸入幾個字符(或者甚至一個字符)就會執行整個命令序列
單詞縮寫
定義一些縮寫,無論什么時候在插入模式下輸入縮寫,vi將自動把它擴展為完整的文本,使用ex命令定義縮寫:
:ab abbr phrase
只有在插入模式下把組成縮寫的字符序列作為 完整的單詞輸入(regexp中的\<和\>中) ,才會被擴展;單詞內部的 abbr 將不會被擴展.
輸入 :unab abbr 就可以從此停止擴展
:ab ????列出當前定義的縮寫
在vim中如果遞歸的縮寫,如
:ab GNU GNU's Not Unix
將 只會擴展一次
使用映射命令
除了是為vi命令模式而不是插入模式定義一個宏外,map命令的行為與ab極為相似
:map x sequence ???? 把字符 x 定義為一系列編輯命令
:unmap x ???????????? 取消為 x 定義的序列
:map???? ????????????列出當前映射的所有字符
防止ex解釋鍵
注意在定義映射時,不能只輸入 RETURN , ESC , BACKSPACE , DELETE 之類的鍵作為映射命令的一部分,因為這些鍵已在ex內有含義了,如果要使用這些鍵作為被映射命令的一部分,需要使用 CTRL-V 來避開它的正常含義,例如
:map CTRL-A d10 CTRL-VRETURN
這種用法適用于 任何ex命令 ,不只是映射命令,在縮寫或者替換命令也適用,例如
:ab 123 one^Mtwo^Mthree????^M就是 CTRL-VRETURN 因為回車就是ASCII碼中的第M個
:g/^Section/s//As you recall, in^M&????在所有以單詞Section開頭的行前面插入一個短語作為獨立行
注意 豎直條( | ) 無法被防止,因為它有作為多個ex命令分隔符的特殊含義
一些映射例子
:map ^A 0i/*^[$a*/^[????為c++加上注釋
:map e ea ????????????移動到單詞的尾部添加文本
:map K dwwp????????????調換兩個單詞位置
:map q :w^M:n^M????????保存當前文件
:map = xf)xn????????????重復搜索并刪除單詞或短語周圍的圓括號
用于插入模式的映射鍵( 僅僅在插入模式下和命令模式下可用,在一般模式下不能使用 )
通常,映射鍵只適用于命令模式,因為在插入模式下各鍵都代表其本身,不應該將其映射為命令.但是,通過在map命令前加上感嘆號(!),就可以強迫它忽略正常含義,從而在插入模式下產生映射,例如:
:map! + ^[kA:^[jA 在插入模式下將+映射成為在上一行末尾插入:再返回該行末尾繼續輸入
也可以取消這個映射:
:unmap! x???? 但是實際上不奏效,我也不知道怎么辦,有方法啦:通過 CTRL+V 轉義它
映射功能鍵( 什么是功能鍵 )
映射其他特殊鍵
許多鍵盤上帶有與vi中的命令功能相同的特殊鍵,如 HOME , END , PAGE UP , PAGE DOWN ,由于這些按鍵也是有本來的意思的,于是跟ESC等按鍵一樣,需要轉義.例如:
:map CTRL-V HOME 1G????就可以將HOME鍵轉義成為到第一排
映射多個輸入鍵
:map =b a</emphasis>^[???? ????將=b映射了,輸入的時候只要連續的輸入=b就可以達到替換的效果
@函數
使用@命令執行某個命名緩沖區的內容,例如
將cwgadfly^[刪除放到g緩沖區(執行"gdd將該行刪除到g緩沖區) .現在無論什么時候只要把光標放在一個單詞的開頭并輸入 @g ,文本中的單詞就將被替換成為gadfly
從ex中執行緩沖區
除了在一般模式中執行緩沖區以外,還可以在ex中,即命令模式中執行緩沖區,方法是相同的,例如在插入模式中輸入:
/cmp并刪除到a緩沖區后,在一般模式中輸入 :@a 過后就可以達到/cmp一樣的結果
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
