閱讀730 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Vim技能修煉教程(6) - 行編輯器

在很久很久以前,計算機的運算能力還很弱,終端與主機的通信也不好。在沒有顯示器的時代,隻能通過電傳打字機跟主機通信。那時候隻有行編輯器,編輯的時候隻能在一行中進行。需要顯示哪一行,就把哪一行或者哪幾行打印出來看。
Unix上使用的行編輯器是ed. 這個編輯器至今仍然在Unix/Linux/FreeBSD各係統中存在。
ed的增強版是ex. ex最大增強之處就是提供了可以全屏編輯的模式。在ex中輸入:visual命令,就會切換到全屏編輯模式。好吧,這就是vi。Vi本質上就是ex編輯器的visual模式。在Linux中,ex被鏈接到vim上。

ex現在是Vim的ex模式

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

  上一篇:go  全球女神都在創業:馬雲背後的女人不隻是剁手黨
  下一篇:go  JEESZ RestFul服務介紹