Vim 系列教程目錄:
前言
Vim, 上古時(shí)期的編輯器, 號(hào)稱編輯器之神. 我相信搞軟件開發(fā)的大都聽說過, 而且大多數(shù)人其實(shí)都多多少少用過 Vim. 什么? 你沒用過? git commit 了解一下, Git 寫提交信息時(shí)默認(rèn)的編輯器就是 Vim 啊.
提起 Vim, 很多人的第一印象是: 功能強(qiáng)大, 但是難學(xué), 難用, 能用 Vim 的要么是大牛, 要么是在裝B... 老實(shí)說, Vim 在服務(wù)端用的比較多, 因?yàn)槟J(rèn)情況下, Vim 是服務(wù)器上唯二的選擇(還有一個(gè)叫 Emacs 的上古神器), 搞客戶端/前端/游戲/人工智能大數(shù)據(jù)開發(fā)的, 一般不怎么用 Vim. 而且現(xiàn)在各種編輯器, IDE(集成開發(fā)環(huán)境) 層出不窮, 界面美觀, 功能強(qiáng)大, 上手容易, 而 Vim 以界面簡(jiǎn)陋, 上手困難著稱, 這么一對(duì)比, 選擇 Vim 的人越來越少, 對(duì)其望而生畏, 也不難理解.
但是, 我還是想寫一些關(guān)于 Vim 的文章, 一來是總結(jié)記錄我這些年來使用 Vim 的心得; 二來, Vim 其實(shí)真的是個(gè)很優(yōu)秀的編輯器, 它就像一個(gè)其貌不揚(yáng)卻卻充滿智慧的男人, 你越深入了解, 越能發(fā)現(xiàn)其魅力, 直到你愛上他, 離不開他(咳咳, gay 里 gay 氣的).
聽上去我像是個(gè)忠實(shí) Vim 粉, 隨時(shí)都要引發(fā)編輯器圣戰(zhàn). 其實(shí)不是的. 我在大學(xué)期間就學(xué)習(xí)了 Vim, 到現(xiàn)在也有六七年了, 中間也曾換過 Notepad++, Sublime, VSCode 作為主力編輯器, 各種 IDE 也都用過(Eclipse, AndroidStuido, JetBrains 全家桶等等), 最終我選擇了 VSCode/IDE + Vim 插件作為主要的開發(fā)工具, 而 Vim 本身, 是我平時(shí)寫文檔, 記筆記, 簡(jiǎn)單修改 log/配置文件的工具.
我向你推薦 Vim, 不是要你把它當(dāng)作主力工具, 而是希望你能通過學(xué)習(xí)了解它, 學(xué)習(xí)一種高效的編輯方式, 同時(shí)你也能發(fā)現(xiàn)一些神奇的, 有趣的功能, 你可以在你喜歡的工具中添加 Vim 插件, 提升你的編輯效率, 這才是重點(diǎn). 另外, 這系列文章并不會(huì)教你把 Vim 打造成 IDE, 即使對(duì)于我來說, Vim 還是作為一個(gè)文本編輯器比較合適.
Vim 下載和安裝
官網(wǎng)下載地址: https://www.vim.org/download.php
Windows 版本請(qǐng)點(diǎn)擊: https://ftp.nluug.nl/pub/vim/pc/gvim81.exe
注意, 下載的文件名是 "gVim81.exe", gVim 的意思是帶圖形界面(Graphic)的 Vim, 因?yàn)?Vim 默認(rèn)是在命令行里用的, 沒有圖形界面, 實(shí)在是太不友好了, 所以官方出了個(gè) gVim, 有圖形界面, 相對(duì)友好一些.
PS. 我現(xiàn)在的電腦是 Windows, 所以以下都會(huì)以 Windows 版本的 gVim 做演示.
下載之后雙擊下一步下一步安裝就好了, 沒啥需要注意的, 安裝好會(huì)在桌面上生成三個(gè)圖標(biāo): gVim, gVim Easy, 以及 gVim Read-only, 注意, 請(qǐng)點(diǎn)擊 gVim 圖標(biāo)來打開 Vim, 或者你也可以在某個(gè)文件上右鍵, 選擇"用 Vim 編輯".
打開 Vim 之后, 你會(huì)發(fā)現(xiàn)這玩意奇丑無比, 簡(jiǎn)直不像21世紀(jì)的產(chǎn)物. 不要急, 我們先不要管界面, 先學(xué)習(xí)使用, 后面我們會(huì)慢慢地把它變好看(所以男人也得學(xué)會(huì)打扮啊).
接下來, 我們就可以學(xué)習(xí)使用 Vim 了. 我不建議你現(xiàn)在馬上就去看官方文檔(不然我寫這些文章還有啥意義, 大誤...), 因?yàn)橹苯涌次臋n很容易看懵. 既然你選擇看我這系列文章, 那么就安心看完, 之后你一定有所收獲, 并且已經(jīng)掌握基本使用和進(jìn)階技巧, 再去看官方文檔就會(huì)輕松很多.
Vim 的幾種模式
Vim 和普通的編輯器有一點(diǎn)非常大的區(qū)別, 或者是是本質(zhì)的區(qū)別: Vim 是有不同的模式(狀態(tài))的. 普通的編輯器, 你一打開就可以進(jìn)行輸入(打字)了, 很符合直覺, 打開就會(huì)用, 就好像使用 Word 一樣. 但是 Vim 和他們不一樣, 你打開 Vim 之后, 是處于一種無法編輯的狀態(tài)中的, 這是 Vim 的普通模式, 在這種狀態(tài)下, 你是無法輸入文字的, 只能執(zhí)行一些指令.
在普通模式(默認(rèn)模式)下, 你可以使用 h,j,k,l 這幾個(gè)按鍵來移動(dòng)光標(biāo), 這四個(gè)鍵分別代表 左,下,上,右. 如果想輸入文字, 你需要按下鍵盤上的 i 鍵, 才能進(jìn)入可編輯的狀態(tài), 即 Vim 的插入模式, 才能像使用普通編輯器一樣打字.
可以說, 正是由于 Vim 有不同的模式, 才使得 Vim 的編輯效率遠(yuǎn)超其他編輯器. 模式是 Vim 的基礎(chǔ), 這里有必要先介紹一下 Vim 的幾種模式.
Vim 有五種模式:
- 普通模式/默認(rèn)模式: 執(zhí)行 Vim 的指令, 如移動(dòng)光標(biāo), 復(fù)制/刪除/粘貼文本等等, 不能進(jìn)行輸入(打字).
- 插入模式/編輯模式: 進(jìn)行文本輸入(打字), 和普通編輯器一樣
- 替換模式: 進(jìn)行字符替換
- 可視模式/選擇模式: 進(jìn)行文本選擇
- 命令模式: 在 Vim 底部最后一行中輸入命令, 按回車并執(zhí)行
接下來我介紹以下如何進(jìn)入/退出這幾種狀態(tài), 我會(huì)把所有方式都列舉出來, 但是現(xiàn)在你只需使用最簡(jiǎn)單的一種方式即可.
在開始之前, 請(qǐng)連續(xù)按幾次 Esc 鍵, 保證你處于普通模式(無論你現(xiàn)在在任何模式下, 按 Esc 鍵可以讓你回到普通模式).
普通模式 > 插入模式
要從普通模式進(jìn)入插入模式, 最簡(jiǎn)單的方法就是按 i 鍵, 你可以理解為 "insert". 按過 i 鍵之后, 你就可以打字了.
除此之外, 你還可以:
- i/I: 在光標(biāo)前面/行首插入
- a/A: 在光標(biāo)后面/行尾插入
- o/O: 在下/上一行行首插入
- 在插入模式下按 Ctrl-o 可進(jìn)入插入-普通模式, 在此模式下可以運(yùn)行一次普通模式命令, 然后就又回到插入模式.
在繼續(xù)學(xué)習(xí)之前, 請(qǐng)先輸入一些文本(最好是英文), 以供后續(xù)的操作使用. 另外, 如果操作過程中, 你不知道自己處于什么模式了, 那就連續(xù)按幾次 Esc, 回到普通模式, 再繼續(xù)進(jìn)行操作. 遇事不決 Esc!
普通模式 > 替換模式
在普通模式下, 按 r 鍵(小寫)可進(jìn)入替換模式, 你可以理解為"replace". 此時(shí)你再次輸入的字符, 可以替換光標(biāo)處的那個(gè)字符. 如果你想連續(xù)替換多個(gè)字符, 則按 R 鍵(大寫, 即 Shift+r), 此時(shí)你的輸入會(huì)不斷地替換光標(biāo)處的字符. 想退出持續(xù)替換模式, 按 Esc 即可.
除此之外, 你還可以:
- 數(shù)字r: 將光標(biāo)所在向后 n 個(gè)字符都替換掉, 例如
3rs可以把光標(biāo)向后的三個(gè)字符都替換成 s - 在持續(xù)替換模式中可使用 Insert 鍵在持續(xù)替換模式和插入模式中切換
普通模式 > 可視模式
在普通模式下, 按 v 鍵可進(jìn)入可視模式(選擇模式), 你可以理解為"visual". 進(jìn)入可視模式后, 你可以選擇一些文本, 此時(shí)你使用 h,j,k,l 鍵, 可以改變選擇的區(qū)域, 當(dāng)你選擇了一些文本后, 可以使用一些執(zhí)行操作你選擇的文本, 這個(gè)后面再介紹. 要退出可視模式, 按 Esc 鍵或者 v 鍵.
除此之外, 你還可以:
- V: 進(jìn)入行選擇模式, 整行整行地進(jìn)行選擇
- Ctrl-q: 進(jìn)入塊選擇模式. 在這個(gè)模式下, 你可以以"塊" 或者說 "列" 的方式選擇文本. 本來快捷鍵是 Ctrl+v, 但是在 Windows 上, Vim 會(huì)模仿 Windows 快捷鍵, Ctrl-v 是粘貼, 所以使用 Ctrl-q 進(jìn)入塊選擇模式.
普通模式 > 命令模式
在普通模式下, 按 : 鍵(即 Shift+;)即可進(jìn)入命令模式, 此時(shí)光標(biāo)會(huì)跑到編輯器的最底部, 你可以輸入一些命令, 按回車執(zhí)行, 執(zhí)行完命令之后自動(dòng)回到普通模式, 或者你可以直接按 Esc 回到普通模式.
其他模式 > 普通模式
任何模式下, 你都可以按 Esc 回到普通模式, 一次不行就多按幾次, 遇事不決 Esc.
OK, 現(xiàn)在你想一下記住這么多模式以及進(jìn)入方法, 肯定是比較困難的. 這里說一下, Vim 不是學(xué)會(huì)的, 是用會(huì)的. 與其學(xué)怎么操作, 不如按照教程自己多做幾次, 多用幾次自然就記住了, 不用擔(dān)心把 Vim 折騰壞了, 大不了重裝(滑稽).
普通模式
接下來我們就來學(xué)學(xué)普通模式下的一些指令. 普通模式是進(jìn)入 Vim 后的默認(rèn)模式, 在這種模式下, 無法輸入, 只能移動(dòng)光標(biāo)或?qū)ξ谋具M(jìn)行操作.
在進(jìn)行下面的操作之前, 請(qǐng)先保證你輸入了一定量的文本(最好是英文. PS. 也別最好了, 請(qǐng)一定保證是英文, 中文會(huì)遇到一些小情況, 影響效果).
另外, 下面的指令非常多, 不可能背下來, 要通過"用"去記憶.
移動(dòng)
- h/j/k/l: 左/下/上/右移動(dòng), 這幾個(gè)鍵就在你的右手手指下, 很方便. h 在最左邊, 表示向左, l 在最右邊, 表示向右, j 像個(gè)向下的箭頭, 表示向下, k 則是向上. 多用用, 自然可以記住.
- 數(shù)字h/j/k/l: 左/下/上/右移動(dòng) n 下, n 為輸入的數(shù)字, 例如 3l 表示向右移動(dòng)3次, 3j 表示向下移動(dòng)三行
- w: 移動(dòng)到下一個(gè)單詞開頭. 同上, 也可以在前面加數(shù)字來重復(fù)多次, 例如
- e: 移動(dòng)到當(dāng)前或下一個(gè)單詞結(jié)尾
- ge: 移動(dòng)到上一個(gè)單詞結(jié)尾
- b: 移動(dòng)到當(dāng)前或上一個(gè)單詞開頭
- f/t: 在當(dāng)前行, 移動(dòng)到下一個(gè)出現(xiàn)某字符的位置/前, 例如 fa, 光標(biāo)會(huì)移動(dòng)到下一個(gè)字母a的位置
- F/T: 在當(dāng)前行, 移動(dòng)到上一個(gè)出現(xiàn)某字符的位置/前, 例如 Fa, 光標(biāo)會(huì)移動(dòng)到上一個(gè)字母a的位置
- 數(shù)字f/t: 在當(dāng)前行向后移動(dòng)到第 n 次出現(xiàn) a 的位置/前, 例如 3fa, 光標(biāo)會(huì)向后移動(dòng)到第三次出現(xiàn)字母a的位置
- 數(shù)字F/T: 在當(dāng)前行向前移動(dòng)到第 n 次出現(xiàn) a 的位置/前, 例如 3Fa, 光標(biāo)會(huì)向前移動(dòng)到第三次出現(xiàn)字母a的位置
- 0/$: 光標(biāo)移動(dòng)到行首/行尾
- ^: 光標(biāo)移動(dòng)到到非空格的行首
- %: 在兩個(gè)匹配的符號(hào) (, ", { 等等中切換, 光標(biāo)需先移動(dòng)到其中一個(gè)符號(hào), 如果不在, 則會(huì)向后找到最近的一個(gè)
- gg: 光標(biāo)移動(dòng)到第一行行首
- G: 光標(biāo)移動(dòng)到最后一行行首
- 行號(hào)G: 光標(biāo)移動(dòng)到對(duì)應(yīng)行號(hào)行首
- 數(shù)字%: 光標(biāo)移動(dòng)到指定百分比的文檔位置, 例如 80%, 光標(biāo)會(huì)移動(dòng)到文本的 80% 處
- {/}: 光標(biāo)移動(dòng)到上一段/下一段(Paragraph)的行首
- g;/g,: Vim 內(nèi)部維護(hù)著一個(gè)編輯位置歷史, 使用這兩個(gè)指令可在編輯位置歷史中跳轉(zhuǎn).
- H: 光標(biāo)移動(dòng)到當(dāng)前屏幕的最上邊(High)
- M: 光標(biāo)移動(dòng)到當(dāng)前屏幕的中間(Middle)
- L: 光標(biāo)移動(dòng)到當(dāng)前屏幕的最下邊(Low)
- zt/zb/zz: 把當(dāng)前行置為屏幕正頂部/底部/中間
- ``: 在兩次 非行內(nèi)移動(dòng) 的位置之間跳轉(zhuǎn), 例如你現(xiàn)在在第一行, 使用 G 到達(dá)文件末尾, 此時(shí)按``, 就可以回到第一行, 另外注意, 這個(gè)指令只能在非行內(nèi)的移動(dòng)之間跳轉(zhuǎn), 如果你的上一次移動(dòng)是行內(nèi)移動(dòng), 則無效
- J: 將下一行移動(dòng)到這一行末尾(合并當(dāng)前行和下一行)
注意: 數(shù)字+指令表示執(zhí)行多次指令, 數(shù)字一般放在指令之前, 很多指令前面都可以加數(shù)字, 這個(gè)技巧很重要.
復(fù)制/剪切/粘貼
在普通模式下, 可以進(jìn)行文本的復(fù)制, 剪切和粘貼, 這里要注意的是, 在 Vim 中, 剪切和刪除的表現(xiàn)效果是一樣的, 剪切或刪除的文本都會(huì)進(jìn)入到 Vim 的寄存器里(寄存器是什么鬼, 以后會(huì)講).
- y: 開始復(fù)制
- yy/Y: 復(fù)制當(dāng)前行
- 數(shù)字yy: 從當(dāng)前行開始, 復(fù)制多行, 例如: 3yy 表示復(fù)制三行.
- yh/yl: 向左/向右復(fù)制一個(gè)字符, 即 y 指令后面可以跟"移動(dòng)指令"
- y0/y$: 從光標(biāo)處復(fù)制到本行開頭/末尾
- yw/ye: 復(fù)制一個(gè)單詞, 或從光標(biāo)處復(fù)制到本單詞末尾
- yt: 從光標(biāo)處開始復(fù)制, 直到遇見某字符. 例如 yta, 表示從光標(biāo)處開始復(fù)制, 直到遇見a, a不復(fù)制, 同理可使用 yf, yF, yT
- yG: 從當(dāng)前行開始復(fù)制直到最后一行
- ygg: 從當(dāng)前行開始復(fù)制直到第一行
- d: 開始剪切, 之后仍留在普通模式, 其用法和 y 類似, 請(qǐng)自行嘗試
- D: 從光標(biāo)處開始剪切, 直到行尾
- x: 剪切光標(biāo)所在的字符, 之后仍留在普通模式
- 數(shù)字x: 剪切從光標(biāo)開始往后的 n 個(gè)字符, 之后仍留在普通模式, 例如 3x, 表示向后剪切3個(gè)字符
- X: 剪切當(dāng)前光標(biāo)左邊的字符
- 數(shù)字X: 剪切從光標(biāo)開始往前的 n 個(gè)字符, 之后仍留在普通模式, 例如 3X, 表示向前剪切3個(gè)字符
- c 開始剪切, 之后進(jìn)入插入模式, 用法和 d 類似, 請(qǐng)自行嘗試
- 數(shù)字c: 剪切從光標(biāo)開始往后的 n 個(gè)字符, 并進(jìn)入插入模式
- C 剪切至行尾, 并進(jìn)入插入模式
- s 剪切光標(biāo)所在字符, 并進(jìn)入插入模式, 和 x 類似
- S 剪切當(dāng)前行, 并進(jìn)入插入模式
- p: 將復(fù)制/剪切的內(nèi)容粘貼到光標(biāo)后面, 如果復(fù)制/剪切的內(nèi)容是整行的, 則粘貼到當(dāng)前行的下面
- P: 將復(fù)制/剪切的內(nèi)容粘貼到光標(biāo)前面, 如果復(fù)制/剪切的內(nèi)容是整行的, 則粘貼到當(dāng)前行的上面
- 數(shù)字p/P: 粘貼多次
- ddp: 其實(shí)就是剪切當(dāng)前行再粘貼了, 但是你會(huì)發(fā)現(xiàn), 當(dāng)前行和下一行換位置了
- xp: 其實(shí)就是剪切當(dāng)前光標(biāo)所在字符再粘貼, 但是你會(huì)發(fā)現(xiàn), 兩個(gè)字符交換位置了
注意: 幾乎所有的移動(dòng), 復(fù)制, 粘貼命令前面都可以加數(shù)字, 表示重復(fù)的次數(shù), 復(fù)制和剪切指令也幾乎都可以加上移動(dòng)指令, 表示向某個(gè)方向復(fù)制/剪切.
查找
在普通模式下輸入 / , 即可對(duì)當(dāng)前文件進(jìn)行文本查找.
- /xxx: 在全文中查找 xxx, 并高亮顯示, 字符
.*[]^%/?~$<>等有特殊意義, 需要用 \ 轉(zhuǎn)義 - ?xxx: 和 / 效果一樣, 只是查找方向反向
- N/n: 在查找到的高亮位置之間前后切換, 前面可以加數(shù)字, 表示第n次出現(xiàn)的位置
-
/\\<xxx\\>: 匹配完整的單詞, 如果某單詞中只是包含 xxx, 則不會(huì)被匹配上, 由于>有特殊含義, 所以需要轉(zhuǎn)義, 由于\也有特殊含義, 需要二次轉(zhuǎn)義... -
/*: 在某個(gè)單詞上使用這兩個(gè)指令, 可以移動(dòng)到上一個(gè)/下一個(gè)與光標(biāo)所在單詞相同的單詞上, 同時(shí)高亮所有相同單詞, 這個(gè)指令很有用
PS. Vim 會(huì)記錄已經(jīng)查找過的內(nèi)容, 再次查找時(shí), 可通過上下鍵來切換之前的輸入
注意: 一個(gè)有用的命令: nohlsearch, 此命令可以取消當(dāng)前的查找的高亮, 簡(jiǎn)寫 nohl
文本操作
在普通模式下, 可以使用如下指令進(jìn)行簡(jiǎn)單的文本操作:
-
>>/<<: 當(dāng)前行向右/向左縮進(jìn)一個(gè) Tab -
行號(hào)1 行號(hào)2 >>: 從行號(hào)1到行號(hào)2向右縮進(jìn)一個(gè) Tab -
行號(hào)1 行號(hào)2 <<: 從行號(hào)1到行號(hào)2向左縮進(jìn)一個(gè) Tab - gU/gu/g~: 將選中的內(nèi)容轉(zhuǎn)化為大/小寫/大小寫切換
- u: u 指令可以對(duì)之前的操作進(jìn)行 Undo, 即撤銷操作
- Ctrl-r: Ctrl-r 這個(gè)快捷鍵可以對(duì)之前的操作進(jìn)行 Redo, 即撤銷上次撤銷.
其他
- .: 普通模式中按 . (即句號(hào)鍵)可以重復(fù)上次的指令, 除了 u 指令. 除此之外, 從進(jìn)入插入模式開始, 到回到普通模式為止, 這個(gè)過程中發(fā)生的所有操作 也可以使用 . 來回放. . 本質(zhì)上是一個(gè)"宏"(什么鬼, 后面會(huì)詳細(xì)講"宏").
- ZZ: 退出當(dāng)前的文件. 我在查看不可編輯的文件時(shí), 經(jīng)常用這個(gè)指令退出文件, 比如 git log.
可視模式
普通模式中按 v 鍵可進(jìn)入可視模式(選擇模式), 按 Esc 或 v 退出, 選擇過程中可使用普通模式的移動(dòng)指令改變選擇區(qū)域, 選擇之后可以對(duì)選擇的內(nèi)容進(jìn)行復(fù)制/刪除等操作.
普通模式中按 V 鍵進(jìn)入整行可視化選擇, 再按 Esc/V 退出, 以"行"為單位進(jìn)行選擇.
可視模式下的一些技巧:
- o: 在可視化選擇模式下, 使光標(biāo)移動(dòng)到選擇區(qū)域的另一頭
- O: 在塊可視化選擇模式下, 使光標(biāo)移動(dòng)到這一行的另一頭
- gg, 然后 vG, 就可以全選.
- Ctrl-q: 塊可視化選擇, 其實(shí)應(yīng)該是 Ctrl-v, 但是對(duì)于 Windows 的 gVim, Ctrl-v 是粘貼, 所以改為 Ctrl-q.
- gg, 然后 Ctrl-q(Ctrl-v), 然后按 G, 就可以選擇文本的第一列
命令模式
在普通模式下按 : 進(jìn)入命令模式, 可以執(zhí)行一些 Vim 命令, 也可執(zhí)行系統(tǒng)命令.
在我這系列 Vim 的文章中, 我會(huì)將普通模式下的操作稱之為 "指令", 而命令模式下的操作稱之為 "命令", 雖然在英文中, 它們都是 "command", 但是我這里還是想?yún)^(qū)分開來, 以后我只要說 "指令", 指的就是普通模式的操作, 而 "命令", 指的就是命令模式下的操作.
常用命令
-
:w: 保存當(dāng)前文件, 但不退出. 注意, 如果你是直接打開 Vim, 然后開始編輯, 你是無法直接使用 w 命令保存的, Vim 會(huì)提示你沒有文件名, 要解決這個(gè)問題, 你需要在 w 命令后面跟上一個(gè)路徑及文件名, 比如::w d:/temp/test.txt, 這樣你才能保存當(dāng)前文件. 這就好比你在其他編輯器里新建個(gè)文件, 當(dāng)你要保存時(shí), 其他編輯器會(huì)彈一個(gè)對(duì)話框, 讓你選擇保存路徑, 只是 Vim 把這個(gè)過程命令化了. -
:q/:q!: 退出/強(qiáng)制不保存退出, 在任何命令后加 ! 表示強(qiáng)制執(zhí)行此命令. -
:wq: 保存并退出當(dāng)前文件 -
:e!: 放棄所有修改, 載入文件的初始狀態(tài), 慎用! -
:pwd: 顯示當(dāng)前目錄 -
:行號(hào): 定位到對(duì)應(yīng)行號(hào), 例如:20可定位到第20行, 和普通模式下的 20G 效果一樣. -
行號(hào)1,行號(hào)2 d: 刪除從行號(hào)1到行號(hào)2的內(nèi)容, 例如::3,5 d表示刪除第3行到第5行, y 指令也同樣適用. -
行號(hào)1,行號(hào)2 >>: 從行號(hào)1到行號(hào)2向右縮進(jìn)一個(gè) Tab, 同理, 也可以向左縮進(jìn) -
:! shell指令: 執(zhí)行 shell(dos) 指令, 例如::! ipconfig -
:r! shell指令: 將 shell(dos) 指令的執(zhí)行結(jié)果寫到當(dāng)前行的下面
PS: 在命令模式里按上下箭頭可以切換之前輸入的命令
替換命令
在普通模式下, 按 / 可以進(jìn)行查找操作, 在命令模式下, 可使用一些替換命令, 將查找到的文本的進(jìn)行替換.
替換的基本表達(dá)式 [range]s/from/to/[flags], 表示將 range 范圍的 from 替換成 to, flags 表示替換范圍. 替換指令使用起來很復(fù)雜, 暫時(shí)不需要掌握.
-
:%s/aaa/bbb/g: 把全文中的所有 aaa 替換成 bbb, %s 表示全部行(range), g 表示所有匹配的(flags) -
:s/aaa/bbb/: 把當(dāng)前行的第一個(gè) aaa 替換成 bbb, s 表示當(dāng)前行(range), 不指定 flag 就只替換第一個(gè) -
:行號(hào)1,行號(hào)2s/aaa/bbb/g: 把行號(hào)1和行號(hào)2之間的 aaa 替換成 bbb. -
:行號(hào)1,行號(hào)2s/^/aaa/g: 把行號(hào)1和行號(hào)2之間的行前面都加上aaa(即可以使用正則, ^表示行首) -
:行號(hào)1,行號(hào)2s/^/\/\//g: 從行號(hào)1和行號(hào)2之間的行都加上//注釋(/需要轉(zhuǎn)義) -
:行號(hào)1,行號(hào)2s/\/\//g: 從行號(hào)1和行號(hào)2之間的行都去掉//注釋
PS. 在替換命令中 . 代表當(dāng)前行, $ 表示最后一行
小結(jié)
好了, 到此為止, Vim 的基本操作已經(jīng)講完了, 我相信你已經(jīng)可以打開 Vim, 進(jìn)行文字編輯, 并保存文件了.
上面列出的指令命令非常多, 需要你在使用過程中慢慢記憶, 還是那句話, Vim 不是學(xué)會(huì)的, 是用會(huì)的.
Vim 教程
其實(shí)我這一系列教程就不錯(cuò). emmm... 真的, 看完之后, 你一定可以掌握 Vim 的基本使用以及進(jìn)階用法, 而且我還講了一些初學(xué)者會(huì)遇到的問題, 能夠解釋很多奇怪的現(xiàn)象.
Vim 自帶一個(gè)交互式教程, 在 Linux/Mac 的 Vim 中, 你可以在命令模式下輸入 vimtutor 開啟這個(gè)教程, 在 Windows 下, 你可以打開 Vim 安裝目錄下的 vim81/vimtutor.bat 來開啟這個(gè)教程. 這個(gè)交互式教程會(huì)開啟一個(gè) Vim 副本, 你可以隨便在里面操作, 不必?fù)?dān)心搞壞. 教程比較精煉, 一小時(shí)左右可以學(xué)完, 掌握 Vim 的基本操作.
當(dāng)然了, 如果你想看更詳細(xì)的教程, 我推薦 Vim 的官方文檔. Vim 有非常詳細(xì)的官方文檔, 文檔就是最權(quán)威的 Vim 教程. 要查看文檔, 可在命令模式下輸入 help 即可. 如果要查看某個(gè)主題的幫助文檔, 則輸入 help <主題> 即可. 看文檔的時(shí)候按 Ctrl-] 跳入某個(gè)子主題, Ctrl-t/o 跳回來.
這里有個(gè)問題: 默認(rèn)情況下文檔是英文的, 看起來還是很費(fèi)勁, 這里給出一份中文文檔:
鏈接:https://pan.baidu.com/s/1jpCwdBPHIhMNxOHWbR5KeA 提取碼:cyqf
里面有 PDF 版本, 還有一個(gè)安裝程序, 會(huì)自動(dòng)將中文文檔安裝到你的 Vim 安裝目錄下, 很貼心吧.
不過現(xiàn)在還是不建議你看文檔, 很容易看懵. 還是繼續(xù)把我這系列教程看完吧.