神器Vim之命令介紹

前天晚上看casa直播項目的組件化,不僅了解了如何快速對現有項目進行組件化,以及進一步不斷迭代,實現完全組件化的過程;同時,也被casavim技能的熟練程度所震撼。早就聽說,vimunix系統上文本編輯的神器,亦有許多牛人用vim編程可以鍵字如飛,效率之高令人望塵莫及。也許我們成不了牛人,但是學會vim還是很有必要的,畢竟它確實能夠提高文本的編輯效率。于是,花了兩天時間,又重新系統學習了vim的各種命令,現總結一下,方便用時再查。

一.vim的模式

vim大致有三種模式:

  1. 命令模式:主要用來瀏覽和修改文本內容

    一般情況下,vim打開的都是命令模式(正常模式);任何模式下,按下ESC鍵都可以進入命令模式

  2. 插入模式:用來向文本中添加內容

    通過iIaAsS等等指令可以進入插入模式,之后就可以修改文本內容了

  3. 編輯模式:用于操作文本文件

    通過:命令可以進入編輯模式,之后就可以保存文件、改變編輯器本身狀態等等

圖1

其實,vim為了增強功能,還有另外兩種模式:

  1. 可視模式:用于復制文本

    命令模式下,按v可以進入可視模式,之后就可以移動光標選擇文本;按ctrl + v可以進入視行模式,可以進行列選中

  2. 替換模式

    命令模式下,按R進入替換模式

二.文檔的操作

編輯模式下執行該命令

  1. vim filename -> 打開文檔
  2. :e file -> 關閉當前編輯的文件,并打開新的文件
  3. :e! file -> 放棄當前對文件的修改并關閉,同時打開新文件
  4. :e -> 重新加載文檔
  5. :e! -> 放棄改動,并重新加載文檔
  6. :fctrl + g -> 顯示文檔名、是否修改、光標位置等等
  7. :f filename -> 把編輯的文件另存為新的filename,需要wq,否則不會保存新文件
  8. :w -> 保存修改
  9. :n1,n2w filename -> 選擇性保存從n1行到n2行的內容
  10. :wq:xZZ -> 保存并退出
  11. :q[uit] -> 退出當前窗口
  12. :saveas filename -> 另存為新的filename
  13. :Sex -> 水平分割一個窗口,瀏覽文件系統
  14. :Vex -> 垂直分割一個窗口,瀏覽文件系統

三.文檔的移動

文檔的移動都是在命令模式(正常模式)下進行的

  1. h退格 -> 左移一個字符
  2. l空格 -> 右移一個字符
  3. j -> 下移一行
  4. k -> 上移一行
  5. +enter -> 把光標移動到下一行非空白字符
  6. w -> 前移一個單詞,光標停在單詞的開頭
  7. W -> 前移一個單詞,光標停在單詞的開頭,但是會忽略一些標點
  8. e -> 前移一個單詞,光標停在單詞的末尾
  9. E -> 前移一個單詞,光標停在單詞的末尾,如果詞尾有標點,則移動到標點
  10. b -> 后移一個單詞,光標停在單詞的開頭
  11. B -> 后移一個單詞,光標停在單詞的開頭,但是會忽略一些標點
  12. ge -> 后移一個單詞,光標停在單詞的末尾
  13. gE -> 后移一個單詞,光標停在單詞的末尾,如果詞尾有標點,則移動到標點
  14. ( -> 前移一句
  15. ) -> 后移一句
  16. { -> 前移一段
  17. } -> 后移一段
  18. fc -> 把光標移動到同一行的下一個c字符處
  19. Fc -> 把光標移動到同一行的上一個c字符處
  20. tc -> 把光標移動到同一行的下一個c字符前
  21. Tc -> 把光標移動到同一行的上一個c字符后

上面的操作都可以配合數字n使用,例如:3h 表示光標左移3個字符。下面是另外一些文檔移動的命令:

  1. 0 -> 移動到行首
  2. ^ -> 移動到本行第一個非空白字符
  3. $ -> 移動到行尾
  4. n| -> 把光標移到第n列上
  5. nG -> 把光標移到第n行上
  6. H -> 把光標移到到屏幕最頂端一行
  7. M -> 把光標移到到屏幕中間一行
  8. L -> 把光標移到到屏幕最底端一行
  9. gg -> 把光標移到到文件頭部
  10. G -> 把光標移到到文件尾部

四.翻屏

翻屏命令是在命令模式進行的

  1. ctrl + f -> 下翻一屏
  2. ctrl + b -> 上翻一屏
  3. ctrl + d -> 下翻半屏
  4. ctrl + u -> 上翻半屏
  5. ctrl + e -> 向下滾動一行
  6. ctrl + y -> 向上滾動一行
  7. n% -> 把光標移動到文件內容的n%位置處
  8. zz -> 把當前行移動到屏幕中央
  9. zt -> 把當前行移動到屏幕頂端
  10. zb -> 把當前行移動到屏幕底端

五.插入文本

從命令模式進入插入模式,設置光標開始輸入的位置

  1. i -> 在光標前插入
  2. I -> 在當前行的第一個非空字符前插入
  3. a -> 在光標后插入
  4. A -> 在當前行最后插入
  5. o -> 在下面新建一行插入
  6. O -> 在上門新建一行插入
  7. :r filename -> 在當前行位置插入另一個文件的內容
  8. :[n]r filename -> 在第n行插入另一個文件的內容
  9. :r !date -> 在當前行(空行)插入日期,或當前行非空,就在下一行插入日期。同理,:r !command 可以把shell命令的輸出插入當前行

小技巧

  1. 命令模式下,按數字n,然后按i,輸入=,最后按ESC,就會在光標處插入n=,這在做分割線時非常有用
  2. 視行模式下(ctrl+v),選擇要操作的行,按iI)輸入插入內容,之后按兩次ESC,就會在每行選定的區域出現插入的內容

下面是修改文本的命令,功能是先刪除文字,然后等待插入文本:

  1. c[n]w[n]cw -> 刪除光標后n個單詞,然后進入插入模式
  2. c[n]l[n]cl -> 刪除光標后n個字母,然后進入插入模式
  3. c[n]h[n]ch -> 刪除光標前n個字母,然后進入插入模式
  4. [n]cc -> 刪除當前行及以后的n-1行,然后進入插入模式
  5. [n]s -> 刪除光標之后的n個字符,然后進入插入模式
  6. [n]S -> 刪除當前行及以后的n-1行,然后進入插入模式

類似的操作也適用于:dy

六.剪切、復制和粘貼

在命令模式執行該命令

  1. [n]x -> 剪切光標右邊n個字符,相當于d[n]l
  2. [n]X -> 剪切光標左邊n個字符,相當于d[n]h
  3. y -> 在可視模式下復制選中的文本
  4. yyY -> 復制整行文本
  5. y[n]w -> 復制n個詞
  6. y$ -> 復制從光標到行尾的內容
  7. y0 -> 復制從光標到行首的內容
  8. y^ -> 復制從光標到本行非字符的內容
  9. :m,ny -> 復制m行到n行的內容
  10. y1Gygg -> 復制光標以上所有行
  11. yG -> 復制光標以下所有行
  12. d -> 刪除(剪切)在可視模式下選中的文本
  13. [n]dd -> 刪除(剪切)n行
  14. :m,nd -> 刪除(剪切)m行到n行的內容
  15. p -> 在光標之后粘貼
  16. P -> 在光標之前粘貼

文本對象可以快速的操作一個詞、一個句子、一個段落等等,大大加快了文本操作的便捷性。其中,ydcv都可以和這些命令配合使用,具體如下:

  1. aw -> 一個詞
  2. as -> 一個句子
  3. ap -> 一個段落

七.查找和替換

7.1查找

查找是在命令模式下執行的命令,用于快速查找特定的內容

  1. /something -> 在光標文本后面查找something
  2. ?something -> 在光標文本前面查找something
  3. /pattern/[+]n -> 將光標停在匹配pattern模式后面第number行
  4. /pattern/[-]n -> 將光標停在匹配pattern模式前面第number行
  5. n -> 向后查找下一個
  6. N -> 向前查找上一個

7.2替換

替換是在編輯模式下執行的命令,用于替換特定的內容

  1. :s/old/new -> 用new替換當前行的第一個old
  2. :s/old/new/g -> 用new替換當前行所有的old
  3. :n1,n2/old/new/g -> 用new替換n1行到n2行的所有old
  4. :%s/old/new/g -> 用new替換文件中的所有old
  5. :%s/^/xxx/g -> 在每一行的行首插入xxx
  6. :%s/$/xxx/g -> 在每一行的行尾插入xxx

八.排版

vim可以進行簡單的快速的排版,下面的排版是在命令模式下執行

  1. [n]<< -> 向左縮進一個n個shiftwidth
  2. [n]>> -> 向右縮進一個n個shiftwidth
  3. J -> 拼接當前行和下一行
  4. gJ -> 拼接后不留空格

下面的排版是在編輯模式執行的命令

  1. :le(ft) -> 本行文字靠左
  2. :ce(nter) -> 本行文字居中
  3. :ri(ght) -> 本行文字靠右

vim還可以統計本行或者整個文本的字數,行數等等信息

  1. ctrl + g 統計文檔的字符數、行數、文件名等信息

九.編輯文件

vim可以一次編輯多個文件,如:vim a.txt b.txt c.txt

  1. :next:n -> 編輯下一個文件
  2. :2n -> 編輯下2個文件
  3. :previous:N -> 編輯上一個文件
  4. :wnext -> 保存當前文件,并編輯下一個文件
  5. :wprevious -> 保存當前文件,并編輯上一個文件
  6. :args -> 顯示文件列表
  7. vim -o filenames -> 在水平分割多個窗口中編輯多個文件
  8. vim -O filenames -> 在垂直分割多個窗口中編輯多個文件
  9. :split:sp -> 把當前窗口水平分割成兩個窗口
  10. :vsplit:vsp -> 把當前窗口垂直分割成兩個窗口
  11. :qall -> 關閉所有窗口
  12. :wall -> 保存所有修改過的窗口
  13. :only -> 只保留當前窗口,關閉其它窗口
  14. :close -> 關閉當前窗口
  15. [n]u -> 取消n個改動
  16. U -> 取消當前所有的改動

vim窗口分屏后,在多個編輯窗口直接切換編輯的命令如下:

  1. ctrl+w ctrl+w -> 切換下一個窗口
  2. ctrl+w p -> 切換到前一個窗口
  3. ctrl+w h(l,j,k) -> 切換到左 (右、下、上)的窗口
  4. ctrl+w H(L,J,K) -> 切換窗口到最左(右、下、上)的窗口

進入替換模式,就可以快速替換當前的文本,在命令模式才可以進入替換模式

  1. r -> 替換光標出的一個字符
  2. R -> 進入替換模式,可以進行多次替換,按esc回到命令模式

十.編程輔助技能

  1. g; -> 上一個修改過的地方
  2. g, -> 下一個修改過的地方
  3. [[ -> 跳轉到上一行函數塊開始的位置,需要有單獨一行的{
  4. ]] -> 跳轉到下一行函數塊開始的位置,需要有單獨一行的{
  5. [] -> 跳轉到上一行函數塊結束的位置,需要有單獨一行的}
  6. ][ -> 跳轉到下一行函數塊結束的位置,需要有單獨一行的}
  7. % -> 移動到匹配()、{}、[]的另一個符號上
  8. 可視模式下,選擇代碼塊,然后按=,代碼會進行自動縮排

下面的符號匹配能夠高效的處理文本,可以把cdy'"([{<結合起來使用,可以加快編程速度,下面以c為例:

  1. ci' -> 修改、剪切或復制'之間的內容,不包含'本身
  2. ca' -> 修改、剪切或復制'之間的內容,包含'本身

十一.命令行

下面的命令是在編輯模式下執行

  1. :! cmd -> 執行外部命令
  2. :r !cmd -> 將命令的返回結果插入文件當前的位置
  3. :pwd -> 顯示vim的工作目錄
  4. :ver -> 顯示版本信息

十二.Mac Terminal快捷鍵

  1. ctrl+u -> 刪除整行
  2. ctrl+l -> 清屏

十三.移動當前行

  1. m+1 -> 向下移動1行
  2. m-2 -> 向上移動2行

vim的命令大致有這么多,還有一些不是太常用的沒有列舉出,如有需要,請查看相關手冊。如果你想用vim高效的編輯文本,還是要多練習,畢竟這么多命令,無法一下子全部記住。最后,附上一張vim的指法引導圖,可以參考一下。(本文所有圖片來自互聯網,版權歸源作者所有)

圖2

參考資料

http://blog.csdn.net/scaleqiao/article/details/45153379

http://www.cnblogs.com/xiaowant/articles/1992923.html

http://www.cnblogs.com/yangjig/p/6014198.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容