专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>shell编辑器>

Vi- 重复上一个编辑指令

百度收藏 QQ搜藏

在 vi 中編輯,有時候你會做同一個編輯的動作好幾次。這個時候你便可以按【 . 】來重複上一個編輯動作。編輯動作就是會改變文章內容的動作﹝不包括【 u 】﹞。其他移動或搜尋指令並沒有包含在內﹝雖然沒有改變文章內容,但是複製也是編輯動作﹞。
下面舉幾個例子:

如果你發現自己的文章把「在」弄錯,打成了「再」,那你就必須檢查整篇文章的「再」,把錯誤的「再」改成「在」。這個時候你可以先按【 / 】,輸入「再」,vi 便會自動尋找「再」這個字。當你發現如果第一個被搜尋到的「再」是正確的,你就按【 n 】搜尋下一個「再」字一直到找到你要修改的字。當你找到你要修改的「再」以後,你可以下指令 r在 便會將「再」修改成「在」﹝【 r 】(replace) 會修改目前游標上的字,但不會進入 input mode。而且只會讀入一個字,當你在前面輸入一個正整數 n 時, vi 便會將游標後 n 個字改成你接在【 r 】後的那個字。﹞。之後當你繼續用【 n 】找到要修改的「再」字,只要按【 . 】就會把「再」改成「在」了。因為【 n 】並不是編輯動作,所以你每次按【 . 】, vi 都等於是在重複 r在 這個指令﹝前提是你沒再下其他編輯指令﹞。
【 i 】、【 a 】及【 o 】也是一種編輯動作,你可能用【 i 】進入 input mode ,輸入文字之後按【 Esc 】回到 command mode,發現你想重複之前的輸入,這時你也可以按【 . 】來重複之前的輸入。例如 iabcd【 Esc 】 就是插入 abcd 四個字元,那麼按【 . 】就會再插入 abcd 四個字元。甚至你也可以在前面加一個正整數 n,這就等於上一個指令前面加上一個正整數 n。所以你輸入的文字便會輸出 n 次﹝就和在【 i 】前面加上正整數一樣的效果﹞。

如果你上一個編輯指令前面有加上一個正整數,那你按【 . 】時這個正整數會被計算進去,但是你要是在【 . 】前面也加上個正整數,那上一個指令的正整數就會被忽視。例如你下指令 "a2yy表示複製兩行文字到暫存區 a 中,如果你接著下指令 4. 就等於下指令 "a4yy。 接著你馬上在按【 . 】也還是等於下指令 "a4yy,因為這正是你的上一個編輯動作。

最後,還有一件重要的事情,那就是中文。 Vi 的版本有好幾種,對中文的支援也不盡相同。以中央數學現在﹝2002 年夏季﹞linux 所用的 vi 來說,不僅可以顯示中文,也「認得」中文字,一個中文字當一個字元。而之前的版本﹝不詳﹞雖然也會顯示中文,但是卻是一個中文字當兩個字元。
當一個中文字被當成兩個字元時,上面介紹的指令【 r 】就會出問題。假設你照上面的第一個例子下指令,那你會發現修改之後會出現亂碼,這是因為 vi 不「認得」中文字的結果。所以碰到這種情況,你應該用 2s在【 Esc 】這個指令而不該用 r在。

除了【 r 】以外,也有其他編輯指令會受到中文的影響,例如【 x 】,要刪除一個中文字你就得按兩次【 x 】,光按一次【 x 】只能殺掉一半,有時甚至會造成亂碼。移動指令也會受到影響,【 l 】和【 h 】都要多按一次才能經過一個中文字。

任何版本的 vi 都無法讓【 w 】這類的指令在中文正常移動,而巡弋指令如【 f 】也無法在中文運作﹝但是【 / 】沒問題﹞。所以讀者在編輯中文時就不要用到這些指令。不管是哪個版本的 vi,在編輯中文時多多少少會有問題,像是中央數學目前 linux 的 vi,雖然認得中文字,但是【 Backspace 】碰到中文就是會出錯。。。。。。

上一篇:Vi- 编辑与修改 下一篇:Vi- Line mode

power by soyo123 2007-2008