Vim技能修煉教程(6) - 行編輯器
在很久很久以前,計算機的運算能力還很弱,終端與主機的通信也不好。在沒有顯示器的時代,隻能通過電傳打字機跟主機通信。那時候隻有行編輯器,編輯的時候隻能在一行中進行。需要顯示哪一行,就把哪一行或者哪幾行打印出來看。
Unix上使用的行編輯器是ed. 這個編輯器至今仍然在Unix/Linux/FreeBSD各係統中存在。
ed的增強版是ex. ex最大增強之處就是提供了可以全屏編輯的模式。在ex中輸入:visual命令,就會切換到全屏編輯模式。好吧,這就是vi。Vi本質上就是ex編輯器的visual模式。在Linux中,ex被鏈接到vim上。
ex命令的最直觀特點就是以冒號開頭,比如我們熟悉的:q命令。
行編輯器雖然不流行已經很久了,但是ex做為vi的另一種模式,至今仍然發揮著作用。
基本上vim所有的編輯功能都提供了相應的ex命令。通過:help ex-cmd-index可以查看到這些ex命令的列表。我們寫vimscript使用的功能,基本上都是ex命令。包括程序流程控製所用的:if命令,模擬正常模式下輸入的:normal命令等。
ex命令
前麵講了這麼多曆史沉鉤,是希望大家能夠切換一下思路。即使是在vi模式下執行ex命令,它們仍然是行編輯器的模式。也就是默認的大部分命令隻對當前行有效,如果想要跨行,必須指定行號。
ex命令的一般模式是:[行地址]命令
行地址有三種指定的方法:
- 直接指定行號:
- 1表示第一行
- 3,5表示第3行到第5行
- 采用特殊變量表示
- .點號表示當前行
- $表示最後一行
- %表示每一行
- +n, 當前行開始向前數第n行,n省略則為1
- -n, 當前行向後數第n行,n省略則為1
- 利用搜索來定位行 /
複製粘貼命令
- :delete: 簡寫為:d,例:1,10d: 刪除前10行
- :move: 簡寫為:m,例:1m10,第1行移動到第10行
- :copy: 簡寫為:t或:co。
例:將本行和上下兩行一起複製到整個文件之前
:-,+t0
獲取行號的命令
- := 列出文件的總行數
- :.= 當前行的行號
- :/搜索字符串/= 查找搜索字符串出現的第一次的行號
文件操作
文件操作跟文本無關,visual模式不再有優勢,這時ex命令反而成為主力了。
- :w 緩衝區寫到文件
- :q 退出vi
- :wq 寫文件並退出
- :x 如果修改過則寫文件並退出
- :r 文件名,將文件讀入光標開始的位置
- :e 文件我,讀入新文件
- C-^: 在多個文件間切換
:w命令支持文件名做為參數。
:w命令還支持將部分行寫入到文件,也可以添加到文件尾。
例:將當前行開始的10行寫入test.txt中:
:.,+9w test.txt
行編輯命令本身的編輯
這一節要說的是對於寫命令的時候,vim或者說ex能夠提供的幫助。
- C-w : 刪除至單詞開頭
- C-v : 刪除至行首
- C-r{寄存器} : 將寄存器的內容粘貼到命令行
行編輯命令的自動補全
在vi模式下,ex命令可以用tab鍵進行自動補全。也可以通過Ctrl-d命令列出所有的可選項。
運行外部命令
Vim有時候需要調用外部命令來實現任務。
- :!{命令}:執行命令
- :read !{命令}:執行命令,並把返回結果讀入緩衝區
- :shell: 啟動一個shell來執行外部命令
最後更新:2017-07-10 18:32:18