文章目錄 一、基本使用流程 二、普通命令模式 (一)切換到插入模式(編輯/寫入/輸入) (二)切換到可視模式(選擇文本模式) (三)切換至底行命令模式 (四)替換/修改 1. 切換到替換模式 2. 替換命令 3. 修改替換(刪除舊的,輸入新的) (五)互換位置 (六)字符大小寫切換 (七)選擇文本 (八)復制 (九)粘貼/恢復 (十)刪除/剪切 (十一)重復前一個操作 (十二)標記(其實沒啥用) (十三)多行合并 (十四)文本行移動/縮進 (十五)撤回/撤銷 (十六)游標移動 1. 以詞為單位移動 2. 以字符為單位移動 3. 按句子移動 4. 按段移動 5. 移動游標到匹配字符 6. 查看游標所在行號 (十七)跨行移動文本內容/剪切文本內容 (十八)屏幕滾動命令 (十九)文檔狀態/統計文檔信息 (二十)查找/搜索字符串 (二十一)查看歷史命令 (二十二)查看歷史搜索記錄 (二十三)保存退出 (二十四)宏錄制 (二十五)打開光標所在詞的使用手冊 三、可視模式 (一)字符可視模式 1. 選擇文本 2. 復制文本 3. 刪除文本 4. 修改替換 5. 文本行移動 6. 大小寫切換 7. 合并多行 8. 加密文本 9. 保存文本 10. 文本排序 11. 移動光標 12. 切換到插入模式 13. 退出可視模式 (二)行可視模式 1. 選擇文本 2. 復制文本 3. 刪除文本 4. 修改替換 5. 文本行移動 6. 大小寫切換 7. 合并多行 8. 加密文本 9. 保存文本 10. 文本排序 11. 移動光標 12. 切換到插入模式 13. 退出可視模式 (三)塊可視模式 1. 選擇文本 2. 復制文本 3. 刪除文本 4. 修改替換 5. 文本行移動 6. 大小寫切換 7. 合并多行 8. 加密文本 9. 保存文本 10. 文本排序 11. 移動光標 12. 切換到插入模式 13. 退出可視模式 四、底行命令模式 五、插入模式 (一)選擇文本 (二)復制文本 (三)粘貼文本/插入寄存器的內容 (四)運算表達式 (五)刪除文本 (六)移動文本 (七)移動光標 (八)臨時切換到普通命令模式 (九)修改/替換 (十)搜索 (十一)退出插入模式 (十二)自動補全 (十三)翻頁 六、vim 命令打開文件及選項參數說明 七、寄存器 八、查看 vim 編輯器的幫助文檔
Vim 和 Vi 都是多模式編輯器,不同的是 vim 是 vi 的升級版本,它不僅兼容 Vi 的所有指令,而且還有一些新的特性在里面。
下面講解的 vim 功能都是基于以下的系統環境和軟件版本:
Linux 內核版本:4.18.0-193.6.3.el8_2.x86_64 Linux 發行版本:CentOS Linux release 8.2.2004 (Core) VIM 版本:8.0.1763 ? 注:查看 vim 的各個選項使用說明:vim -h 或 vim --help;查看 vim 的版本信息:vim -v 或 vim --version
一、基本使用流程
Linux 系統的命令終端中,經常會使用 vi 或者 vim 編輯器編輯文件,基本操作流程如下:
在命令終端輸入 vim /etc/liaowenxiong.txt 打開指定的文件,默認進入 vim 的“普通命令模式”(Normal Mode) 在“普通命令模式”下輸入i 進入編輯界面,也就是 vim 的“插入模式”(Insert Mode) 編輯好之后按 Esc 返回到 vim 的“普通命令模式” 按冒號 : 進入 vim 的“底行命令模式”(Last Line Command Mode or Ex Command Mode) 輸入 q! 或者 wq 返回到命令終端(也叫控制器)
二、普通命令模式
normal mode.
vi/vim 的默認模式就是普通命令模式,啟動 vi/vim 就進入普通命令模式,在插入模式和底行模式下按 Esc 回到普通命令模式,該模式下常用的命令如下:
(一)切換到插入模式(編輯/寫入/輸入)
命令說明 i 切換到插入模式,i在當前游標前(就是游標左邊)插入字符 I 在行首插入 a 切換到插入模式,a在當前游標后(就是游標右邊)插入字符 A 在行末插入 o 切換到插入模式,o在當前行后(就是當前行的下面)插入一個新行 O 在當前行前(就是上面)插入一個新行
技巧: 假如我要一次性輸入 30 個等號 =,可以在普通命令模式下,輸入:30i=<esc>,就是先輸入數量 30,接著按 i 切換到插入模式,接著輸入 1 個等號 =,最后按 esc 返回普通命令模式,就成功插入 30 個等號 = 啦!這在插入分割線時非常有用哦~
(二)切換到可視模式(選擇文本模式)
命令說明 v 切換到按字選擇文本的可視模式,所謂“可視”,就是被選中的字符會“高亮”顯示 V 或 Shift + v 切換到按行選擇文本的可視模式,按上下箭頭來選擇行 Ctrl + v 切換到按塊選擇文本的可視模式,按上下左右箭頭來選擇矩形區域。它選中屏幕上的一個矩形區域。以按下 Ctrl + v 的位置為一個角,光標所在位置為它的對角。
(三)切換至底行命令模式
(四)替換/修改
1. 切換到替換模式
命令說明 R 按下大寫的 R 鍵,屏幕左下角出現 --REPLACE--字樣,說明你已經處于“替換模式”。此時輸入字符可以連續替換光標及其后面的內容。注意:退格鍵(Backspace)在替換模式中被解釋為:如果左邊的內容被替換過,則恢復到原來的樣子;如果沒有被替換過,則光標向左移動。修改完畢后,按下 Esc 鍵回到“普通命令模式”。若新輸入的字符數超過原有對應字符數,則多出部分就附加在后面。 #R 若在命令 R 之前加上一個數字,例如 5R,則表示新輸入的文本重復出現 5 次,但只取代一個被輸入文本所覆蓋的字符序列,當前行中未被覆蓋的內容仍保留下來,只是位置相應右移。這個命令其實沒有意義
2. 替換命令
命令說明 r r 命令用于替換光標所在位置的字符,具體操作是,先將光標移動到需要替換的字符處,按一下 r 鍵,然后輸入新的字符,就完成了一次替換。再次替換需要再次按下 r 鍵才可以。注意,全程不會進入插入模式。其實整個操作還是在“普通命令模式”下完成的,所以這個命令并不算是切換到“替換模式”下 #r 光標所在位置的字符起 # 個字符被 r 后所輸入的新字符替換掉
3. 修改替換(刪除舊的,輸入新的)
文本內容的修改是指在編輯過程中,可以對文本中的某些字符,某些行進行修改,即用新輸入的文本代替需要修改的老文本,它等于先用刪除命令刪除需要修改的內容,然后再利用插入命令插入新的內容。所以在使用修改命令后,vi/vim 進入到“插入模式”下,當輸入完新的內容后,再按 Esc 回到“普通命令模式”。
命令說明 s 該命令表示用隨后輸入的文本替換當前游標所在的字符。如果只用一個新字符替換游標所在字符,則s命令與r命令功能類似,如sh與rh的作用都是將游標所在字符變為h。但二者也有區別,r命令是在命令模式下替換,而s命令的工作模式是先刪掉游標所在字符后進入插入模式,在插入模式下輸入文字完成替換。 #s 以輸入的文本替換光標之后 # 個字符,包含光標所在位置的字符。即用 s 后輸入的文本替換從光標所在字符開始及其后的 #-1 個字符(共 # 個字符) S 表示用新輸入的文本內容替換光標當前行(整行,不管光標位于何列)。輸入S后,光標所在行成為空行,切換到“插入模式”,光標停在行的開頭 #S 表示用新輸入的文本替換光標所在行及其下面 #-1 行的文本內容。例如 3S,則表示有 3 行(包括光標當前行及其下面 2 行)要被 S 命令之后輸入的正文所替換 cw 輸入該命令后,光標所在位置到詞尾之間的字符被刪除,并切換到“插入模式”,然后可以輸入所需要的字符,輸入完成之后按 Esc 回到“普通命令模式”,這樣就完成了用所輸入的內容替換光標位置至詞尾的所有文本內容 c#w 或 #cw 替換游標后面 # 個詞,包含游標所在位置的詞在內。例如:c6w,就會刪除游標后 6 個詞,同時切換到插入模式中,接著可以輸入新的內容。什么意思呢?就是游標所在位置的詞以及后面的 5 個詞被刪除了,然后切換到插入模式,接著輸入的內容就相當于是替換掉被刪的 6 個詞的內容。 c#l 或 #cl 修改(改寫/替換)游標后的 # 個字母,包含游標所在位置的字符在內。 c3j j 表示向下,表示將游標所在行和下面3行都刪除,即游標所在行到往下數的第 3 行之間的文本刪除,然后進入“插入模式” c3G 輸入c3G,游標所在行到第 3 行之間的文本刪除,然后進入“插入模式”,注意是整個文檔的第 3 行 c3k k表示向上,表示將游標所在行和上面3行都刪除,會進入“插入模式” c$ 修改從游標當前位置開始到本行末尾范圍內的內容,先刪除舊內容,進入“插入模式”,再輸入新內容完成修改替換 C C命令和c$命令相同,可以修改從游標當前位置開始到行尾的內容。 #C 當在命令C之前加上數字 # 時,表示可以修改指定行數的內容。例如,3C,表示把游標所在位置起之后(注意不是整行)直到下面兩個整行的內容刪除,替換成隨后輸入的內容 cc 和 S 相同,修改游標所在行(不管游標處于該行的何列)的內容,即先刪除光標所在行的文本內容成為空行,再進入“插入模式”,光標會跳到行首準備輸入 #cc 在cc之前加上數字 #,表示要從游標當前行算起,往后面數,一共修改 # 行的內容。例如,5cc 表示先刪除游標所在行及其下面的 4 行,然后輸入新的內容 #ch 或 c#h 改寫游標前 # 個字符,包含游標所在位置的字符在內
(五)互換位置
命令說明 xp 光標位置的字符和光標后面一個字符位置互換
(六)字符大小寫切換
命令說明 ~ 反轉光標下字符的大小寫 gu 直接輸入 gu 將游標所在行及其下一行的英文字母轉成小寫 gU 直接輸入 gU 將游標所在行及其下一行的英文字母轉成大寫 guG 游標所在行到文檔的最后 1 行的英文字母轉成小寫 gu0 或者 gu^ 游標所在位置到行首的英文字母轉成小寫,不包含游標所在位置的字符 gu$ 游標所在位置到行尾的英文字母轉成小寫 gU$ 游標所在位置到行尾的英文字母轉成大寫 gu5k 游標所在行及其上面 4 行中的英文字母轉成小寫,大寫同理 gu5j 游標所在行及其下面 4 行中的英文字母轉成小寫,大寫同理 gu3l 游標所在位置的字符及其右邊的2個字符中的英文字母轉成小寫,大寫同理 guH 游標當前行至屏幕所顯示文本的第 1 行的英文字母轉成小寫,大寫同理 gUG 游標所在行到文檔的最后 1 行的英文字母轉成大寫 guL 游標當前行至屏幕所顯示文本的最后 1 行的英文字母轉成小寫,大寫同理
總結:往左邊的基本不包含游標所在位置的字符,而往右邊的基本都會包含游標所在位置的字符
(七)選擇文本
命令說明 ggvG 按下 ggvG ,除了最后一行,選中剩余的全部文本,并進入可視模式下,選中的文本高亮顯示 ggVG 按下 ggVG 才是真正的全選文本,并進入可視模式下,選中的文本高亮顯示
(八)復制
Vim 的拷貝與大家預期的方式可能略有不同。拷貝命令不是大家料想的 c。因為 c 表示“修改”,已經被占用了。Vim 用拉取(yank)來表示拷貝,簡寫為 y。
命令說明 yw 將游標所在位置的字符到詞尾的字符復制到緩沖區中 #yw 或 y#w 復制游標所在位置的詞及其后面的 #-1 個詞到緩沖區 yy 復制游標所在行到緩沖區,所謂的緩沖區就是剪貼板,或者叫寄存器 y0 從游標所在位置復制到行首 y$ 從游標所在位置復制到行尾 #yy 例如:6yy表示拷貝從游標所在行往下數6行文字 yl 復制游標后面的 1 個字符 #yl 或 y#l 復制游標所在位置及其后面 #-1個字符 yh 復制游標前面的 1 個字符 #yh 或 y#h 復制游標所在位置及其前面 #-1個字符 9,15 copy 16 或 9,15 co 16 或 9,15 t 16 將第 9 行至第 15 行的文本內容,復制到第 16 行的后面 9,15 move 16 或 9,15 m 16 將第 9 行至第 15 行的文本內容,移動(剪切)到第 16 行的后面 6 t . 把第 6 行復制到當前行下面 6 t 同上,只是省略了 . . t $ 把當前行復制到文本末尾 t $ 同上 . m $ 將當前行移動到文本末尾 ggyG 按下 ggyG 復制全部文本,注意:G 必須大寫 y1G 或 ygg 復制游標所在行及其上面的所有行 yG 復制游標所在行及其下面的所有行 yaw 復制游標所在位置的詞 yiw 復制游標所在位置的詞,好像和 yaw 效果一樣 yas 復制游標所在位置的句子 yit 復制游標所在位置的標簽的內容。例如:<table><tr><td>sfd</td></tr></table>,假設當前游標落在標簽 <table>上,那么按下 yit 則會復制 <tr><td>sfd</td></tr> yft 復制游標所在行上從游標位置算起到后面第 1 個字符 t 。注意:指定字符也復制 yFt 復制游標所在行上從游標位置算起到前面第 1 個字符 t 。注意:指定字符也復制 ytk 復制游標所在行上從游標位置算起到后面第 1 個字符 t 的前一個字符 yTk 復制游標所在行上從游標位置算起到前面第 1 個字符 t 的后一個字符 y/t 復制游標所在行上從游標位置算起到后面第 1 個字符 t 之間的文本內容 。注意:指定字符沒有被復制
(九)粘貼/恢復
命令操作說明 p 將緩沖區(寄存器)的內容粘貼到游標所在位置的后面 P 將緩沖區(寄存器)的內容粘貼到游標所在位置的前面 #p 粘貼指定的寄存器的內容,常用來恢復被刪除的內容,其中 # 為寄存器的名稱,詳見《vim 的寄存器/剪貼板》
(十)刪除/剪切
命令說明 x 刪除游標所在位置的字符,注意此時沒有進入“插入模式”,依舊是在“命令模式”下,相當于 dl X 刪除游標所在位置前面的 1 個字符,相當于 dh Shift + x 刪除游標所在位置前面的 1 個字符 #x 刪除游標所在位置的字符及其右邊 #-1 個字符,共計刪除 # 個字符。相當于 #dl。例如:6x 表示刪除游標所在位置的字符及其后面 的 5 個字符,共計刪除 6 個字符;即游標所在位置的及其右側 5 個字符,共計 6 個字符被刪除。注意:包含游標所在位置的字符 #X 表示刪除/剪切游標所在位置的字符及其前面 #-1 個字符,共計刪除 # 個字符。例如:6X 表示刪除游標所在位置的字符以及前面 的 5 個字符,共計刪除 6 個字符 #dh 或 d#h 表示刪除/剪切游標所在位置的字符及其前面 #-1 個字符,共計刪除 # 個字符。 #dw 刪除游標所在位置的詞及其后面的 #-1 個詞,共計刪除 # 個詞。例如:輸入 3dw,會將游標位置起后面的 3 個詞的內容刪除,包含游標所在位置的詞 dw 刪除從游標位置起到詞尾的字符,包含游標所在位置的字符 dd 刪除游標所在的行 #dd 從游標所在行開始向后刪除 # 行,例如:2dd 表示刪除游標所在的行以及下面的 1 行,合計刪除 2 行;3dd 表示刪除游標所在的行,以及下面的 2 行,合計刪除 3 行 D 刪除游標所在位置的字符到行尾 d$ 效果和D一樣,刪除至行尾,游標位置的字符一起刪除 d0 刪除(剪切)游標所在位置到行首的內容,游標所在位置的字符保留 d^ 刪除至行首,游標所在位置的字符保留 dj 刪除游標所在的行和下面的一行 d+回車 和 dj 一樣。刪除游標所在的行和下面的一行 dG 刪除游標所在行至文檔結尾處,游標所在行也刪除 1dG 或 d1G 刪除游標所在行至文檔開始處,游標所在行也刪除 dgg 刪除游標所在行至文檔開始處,游標所在行也刪除 d) 刪除從光標位置起到本句尾的全部字符,包含光標所在位置的字符 d} 刪除從光標位置起到本段落尾的全部字符,包含光標所在位置的字符 dH 使用命令 dH 將會刪除從“游標所在行”至“屏幕所顯示文本的首行”的全部內容,“游標所在行”也刪除 dM 使用命令 dM 將會刪除從“游標所在行”至“屏幕所顯示文本的中間行”的全部內容,“游標所在行”也刪除 dl 刪除游標所在位置的字符,類似 x #dl 或 d#l 刪除游標所在位置的字符及其右邊 #-1 個字符,共計刪除 # 個字符。 dL 使用命令 dL 將會刪除從“游標所在行”至“屏幕所顯示文本的底行”的全部內容,“游標所在行”也刪除 daw 刪除游標所在位置的詞 das 刪除游標所在位置的句子 d/f 它將刪除當前游標所在位置到下一個字符 f 之間的內容。輸入完 d/f 后,要按下“回車鍵”才行。注意:指定字符保留 dfk 刪除游標所在位置到下一個字符 k。注意:指定字符也刪除了 dFk 刪除游標所在位置到上一個字符 k。注意:指定字符也刪除了 dtk 刪除游標所在位置到下一個字符 k 的前一個字符。注意:指定字符也刪除了 dTk 刪除游標所在位置到上一個字符 k 的后一個字符。注意:指定字符也刪除了
(十一)重復前一個操作
命令說明 . 不要懷疑,這就是小數點,意思是重復前一個動作
(十二)標記(其實沒啥用)
使用標記可以快速移動。到達標記后,可以用 Ctrl + o 返回原來的位置,按下 Ctrl + i 游標跳到后一個標記處
命令說明 m{a-z} 使用小寫英文字母標記光標所在位置,這是局部標記,只用于當前文件。貌似標記的名稱只能取英文字母或者數字,而且是單個字符。例如:按下 m + a,是指按下 m 鍵,然后再按 a 鍵,則表示在光標所在位置打了一個標記,該標記取名為 a m{A-Z} 使用大寫英文字母標記光標所在位置,這是全局標記。標記之后,退出 Vim,重新啟動,標記仍然有效 `{a-z} 游標移動到標記位置。例如:按下撇符號,再按下標記名稱 a,游標則會移動到標記 a 所在的字符上。其實打標記,就是給某個字符打標記 '{a-z} 移動到標記行的行首。例如:按下單引號,再按下標記名稱 a,游標就會移動到標記 a 所在的行的行首,這里的行首是指行的第 1 個字符 `` 雙撇號,移動到上次編輯的位置。" 也可以,不過 `` 是精確到列,而 " 精確到行 。如果想跳轉到更老的位置,可以按 Ctrl + o,跳轉到更新的位置用 Ctrl + i `" 移動到上次離開的地方 `. 移動到最后改動的地方
(十三)多行合并
命令說明 J 合并游標所在行及下一行為一行。合并后留有空格。如果在 J 命令之前給出一個數字n,例如3,則表示把光標當前行及其后面的2行(共3行)合并為一行 gJ 合并游標所在行及下一行為一行。合并后不留空格
(十四)文本行移動/縮進
命令說明 >> 將光標所在行右移 8 個空格。如果在 >> 命令之前給出一個數字 n,例如 4,則表示光標當前行及其下面的 3 行(共 4 行)都右移 8 個空格 << 其使用與>>命令相同,只是移動方向相反 >G 光標所在行至文件末尾之間的所有行向右移動 8 個空格 <G 光標所在行至文件末尾之間的所有行向左移動 8 個空格 zz 將當前行移動到屏幕中央 zt 當前行移到屏幕首行,當前行后面的內容超過 1 屏才行 zb 當前行移到屏幕底行,當前行前面的內容超過 1 屏才行
(十五)撤回/撤銷
命令說明 u 如果您誤執行一個命令,可以馬上按下 u,撤回到上一個操作。按多次 u 可以執行多次撤回 2u 撤銷前面兩次的操作 U 撤銷當前行中所有的改動,撤回到最初的狀態 undo 5 撤銷 5 個改變,不知道怎么玩 undolist 你的撤銷歷史 Ctrl + r 重做最后的改動 earlier 4m 回到 4 分鐘前 later 55s 前進 55 秒
(十六)游標移動
命令說明 #G 例如:15G 表示移動游標至文章的第 15 行的行首 #? 游標向下移動 # 行,例如輸入 5,再按下“回車鍵”,游標從游標所在行的下 1 行算起向下移動 5 行,即從光標所在行的下一行開始算起 5 行,不含光標所在行在內 G 移動游標到文檔最后一行的首個字符處 Shift + g 移動游標到文檔最后一行的首個字符處 gg 移到游標到文檔開始位置,文檔第 1 行的首個字符處 0 游標移動到所在行的第 1 個字符處,效果和 ^ 一樣 $ 游標移動到所在行的最后 1 個字符處 #$ 將游標移動到游標所在行起之后的第 # 行的最后 1 個字符處,從游標所在行算起。例如:3$,將游標移至游標所在行起之后的第 3 行的最后 1 個字符處 ^ 游標移動到所在行的第 1 個字符處 H 將游標移至屏幕所顯示文本的第 1 行的第 1 個字符處。注意:是當前屏幕顯示文本的第 1 行,而不是整個文檔的第 1 行 #H 若在 H 命令之前加上數字 #,則將游標移至第 # 行的第 1 個字符處,注:從文檔第 1 行開始算起 M 將游標從屏幕的任意位置移至屏幕所顯示文本的中間行的第 1 個字符處。如果當前屏幕已經充滿,則移動到整個屏幕的中間行的第 1 個字符處;如果沒有充滿,則移動到所顯示文本的中間行的第 1 個字符處 L 將游標移到屏幕所顯示文本的最后 1 行的第 1 個字符處。如果當前屏幕已經充滿,則將游標移至屏幕最底行的第 1 個字符處;如果沒有充滿,則將游標移至屏幕所顯示文本的最后 1 行的第 1 個字符處 #L 若在 L 命令之前加上數字 #,則將游標移至從屏幕所顯示文本的底行算起第 # 行的第 1 個字符處 j 游標下移 #j 游標向下移動到第 # 行,且所在列的位置不變。注:從游標所在行的下一行算起。例如,5j 游標向下移動到第 5 行 k 游標上移 #k 游標向上移動到第 # 行,且所在列的位置不變。 h 游標左移 #h 游標向左移動到第 # 個字符處,從游標左邊第 1 個字符算起 l 游標右移 #l 游標向右移動到第 # 個字符處,從游標右邊第 1 個字符算起 % 移動到匹配的括號處。例如,光標現在處于左小括號 ( 位置,按下 % 就會把光標移動到與之匹配的右小括號 ) 處 Ctrl + m 游標跳到下一行首個字符處,效果與+ 和 Enter 相同 + 或 Enter 游標移動到下一行的第 1 個字符處 - 游標移動到上一行的第 1 個字符處
1. 以詞為單位移動
例如:{int k;。 廣義的詞:兩個詞 {int 和 k;。 狹義的詞:有四個詞 { ,int,k,;。 Vim 中使用大寫命令一般就是指將字作為廣義來對待,使用小寫命令就是作為狹義對待。
命令說明 w/W 移動游標到下一個詞的第 1 個字符處 e/E 移動游標到下一個詞的最后 1 個字符處。如果游標起始位置處于詞內(即非詞尾處),則該命令將把游標移到本詞詞尾;如果游標起始位置已經處于詞尾,則該命令將把游標移動到下一個詞的詞尾 b/B 移動游標到上一個詞的第 1 個字符處。如果游標處于所在詞內(即非詞首),則該命令將把游標移至本詞的詞首;如果游標處于所在詞的詞首,則該命令將把游標移到上一個詞的詞首 ge 移動游標到上一個詞的最后 1 個字符處 Shift + → 游標移到后面第 1 個單詞的第 1 個字符處 Shift + ← 游標移動到前面第 1 個單詞的第 1 個字符處
2. 以字符為單位移動
在命令模式中使用 h、j、k、l 這 4 個字符控制方向,分別表示向左、向下、向上、向右。
3. 按句子移動
在 Vim 中,一個句子被定義為是以逗號,、句號.、問號?和感嘆號!結尾,且其后面跟著至少兩個空格或一個換行符的字符序列。這個句子的定義有問題!!句子后面未必有空格或者換行符吧!
命令說明 ( 將游標移至上一個句子的開頭 ) 將游標移至下一個句子的開頭
注意:要結合 Shift 鍵才行
4. 按段移動
在Vim中,一個段被定義為是以一個空白行開始和結束的片段
命令說明 { 該命令將游標向前移至上一個段的開頭 } 該命令將游標向后移至下一個段的開頭
注意:要結合 Shift 鍵才行
5. 移動游標到匹配字符
命令說明 f 向后(游標后面)查找指定的字符,游標移動到該字符處。例如,某行(háng)為 you can you up, no can no bb,現在需要將游標移動到字符 p 處,則可以使用 fp 命令,這樣游標就會迅速定位到字符 p 處。按下 ; 向后繼續查找,按下 , 向前繼續查找 F 向前查找指定的字符,游標定位到該字符處。按下 ; 向后繼續查找,按下 , 向前繼續查找 t 向后(游標后面)查找指定的字符,游標移動到該字符的前一個字符處。按下 ; 向后繼續查找,按下 , 向前繼續查找 T 向前查找指定的字符,游標移動到該字符的后一個字符處。按下 ; 向后繼續查找,按下 , 向前繼續查找
注意:是匹配單個字符,不是單詞!!!
6. 查看游標所在行號
(十七)跨行移動文本內容/剪切文本內容
我們可以利用下面的步驟完成文本行(1行或者多行)從一個地方移至另外一個地方。
將光標移至待移動文本的首行 按 #dd 命令(其中 # 為待移動的行數),此時 vim 把光標所在行起下面的 # 行文本刪除,將其放入到 "1 寄存器中 接著將游標移動到要粘貼文本的地方 按 1p 將 "1 寄存器的內容粘貼到游標所在行的下方
(十八)屏幕滾動命令
屏幕滾動命令是以屏幕為單位移動游標的,常用于文件的滾屏和分頁。需要注意的是,屏幕命令不是游標移動命令,不能作為文本限定符用于刪除命令中。
在普通命令模式下和插入模式下均可以使用屏幕滾動命令
1. 滾屏命令
命令說明 Ctrl+u 將屏幕向前(文件頭方向)翻滾半屏。可以在這命令之前加上一個數字 #,則屏幕向前翻滾 # 行。并且這個值被系統記住,以后再用 Ctrl+u 命令滾屏時,還滾相應的行數 Ctrl+d 將屏幕向后(文件尾方向)翻滾半屏。可以在這命令之前加上一個數字 #,則屏幕向后翻滾 # 行。并且這個值被系統記住,以后再用 Ctrl+d 命令滾屏時,還滾相應的行數 Ctrl + e 整個文檔向上移動一行,但是光標所在位置不變。可以在這命令之前加上一個數字 #,則文檔向上移動 # 行 Ctrl + y 整個文檔向下移動一行,但是光標所在位置不變。可以在這命令之前加上一個數字 #,則文檔向下移動 # 行
2. 分頁命令
命令說明 Ctrl+b 將屏幕向文件首方向翻滾一整屏(即一頁)。在命令之前加上一個數字 #,則屏幕向前移動 # 頁 Ctrl+f 將屏幕向文件尾方向翻滾一整屏(即一頁)。在命令之前加上一個數字 #,則屏幕向后移動 # 頁
(十九)文檔狀態/統計文檔信息
命令說明 Ctrl+G 在 vi/vim 狀態行顯示文檔的狀態信息,包括正在編輯的文件名、是否修改過、游標所在行號、文件的行數以及游標之前的行占整個文件的百分比 g + Ctrl + g 對文檔的行數、字符數、字節數進行統計,字符數-行數≈中文字數,其實就是扣掉每行的換行符,如果是 Windows 系統格式的文檔,則是字符數-行數x2 ≈ 中文字數,因為 Windows 中換行符占 2 個字節,1 個字節是 1 個字符,那么 1 個換行符就被統計為 2 個字符,那么每行就多了 2 個字符
(二十)查找/搜索字符串
命令說明 * 向后查找游標所在位置的詞 g* 向后查找游標所在位置的詞,模糊查找 # 向前查找游標所在位置的詞 g# 向前查找游標所在位置的詞,模糊查找 / 從游標所在位置起向后查找指定的字符串,其實在輸入字符的時就自動進行全文匹配了(匹配的字符串黃色高亮顯示),只是將游標所在位置后面的第 1 個匹配的字符串黑色高亮顯示,按下回車鍵后,光標會移動到第 1 個匹配字符串的第 1 個字符處。具體操作:先輸入 /,再輸入要查找的字符串,再按下“回車鍵”。例如,輸入 /people,會在游標后面匹配查找字符串 people,可以按n 移動游標到后一個匹配的字符串處或者按 N 移動游標到前一個匹配的字符串處 ? 從游標所在位置起向前查找指定的字符串。具體操作:先輸入 ?,再輸入要查找的字符串,再按下“回車鍵”。例如,輸入 ?people,會在游標前面匹配查找字符串 people,可以按n移動游標到前一個匹配的字符串處或者按 N 移動游標到后一個匹配的字符串處 f 游標所在行上從游標位置起向后查找指定的字符,; 重復前一個搜索,即繼續向后搜索,, 重復前一個搜索,但是方向相反,即向前搜索 F 游標所在行上從游標位置起向前查找指定的字符,; 重復前一個搜索,即繼續向前搜索,, 重復前一個搜索,但是方向相反,即向后搜索 t 游標所在行上從游標位置起向后查找指定字符的前一個字符,; 重復前一個搜索,即繼續向后搜索,, 重復前一個搜索,但是方向相反,即向前搜索 T 游標所在行上從游標位置起向前查找指定字符的后一個字符,; 重復前一個搜索,即繼續向前搜索,, 重復前一個搜索,但是方向相反,即向后搜索
/ 和 f/F/t/T 的區別:
/ 能搜索字符串,f/F/t/T 只能搜索單個字符; 與指令 d、y、c 配合使用時,/ 指定的字符是被排除在外的,而 f/F/t/T 則是包含在內的
(二十一)查看歷史命令
在普通命令模式下直接輸入 q: 打開歷史命令窗口,可以滾動鼠標滾輪上下滾動命令列表,或者使用上下箭頭移動光標來選擇命令,選擇好命令后按下“回車鍵”即刻執行選中的命令。歷史命令列表窗口如下圖所示: 說明:
可以輸入 :q 或者輸入 <C-w>q 退出當前窗口 打開的其實是命令行歷史緩沖區,在緩沖區中,可以像編輯文件一樣編輯命令
(二十二)查看歷史搜索記錄
(二十三)保存退出
命令說明 ZZ 大寫的 Z。若文檔沒有修改過,則不保存直接退出;若文檔已經編輯過,則會保存文檔后退出
(二十四)宏錄制
命令說明 qa 開始錄制宏 a(鍵盤操作記錄) q 停止錄制 @a 播放宏 a
(二十五)打開光標所在詞的使用手冊
三、可視模式
也稱之為“文本選擇模式”。
(一)字符可視模式
在“普通命令模式”下按 v 則進入“字符可視模式”,在屏幕底部出現標識:-- VISUAL --。所謂“字符可視模式”就是選擇文本的時候只能一個一個字符選擇。
1. 選擇文本
命令說明 ↑↓←→ 從“普通命令模式”下按 v 鍵進入“字符可視模式”后,直接通過上下左右箭頭鍵選擇文本 w 選擇到下一個單詞的開頭 e 選擇到下一個單詞的詞尾 b 選擇到上一個單詞的開頭 gv 重新選中上次選中的文本,這個命令不一定要進入“可視模式”下再執行,在“普通命令模式”下就可以按下此命令,然后會自動選中上次選中的文本,并且進入“可視模式”下
2. 復制文本
命令說明 y 選擇好文本后,按下 y 復制文本,并且返回到“普通命令模式”下 Y 按下 Y 復制選中字符的所在行
3. 刪除文本
命令說明 d 選擇好文本后,按下 d 刪除文本,并且返回到“普通命令模式”下,當然你可以再按下 p 粘貼被刪除的文本,所以實際上這個 d 相當于“剪切”功能 D 刪除選中字符所在行 x 效果和 d 一樣
4. 修改替換
命令說明 c 更改被選中的文本。按下此命令后被選中的文本被刪除,進入“插入模式”,此時可以在其中添加新文本,完成修改替換 C 更改被選中的字符的所在行,也是先刪除文本,再進入“插入模式” s 效果和 c 一樣 r 先按 r ,再輸入新字符,則替換掉被選中的字符,并且返回到“普通命令模式”下
5. 文本行移動
命令說明 > 按下 > 被選中的行向右移動8個空格,并返回到“普通命令模式”下 < 按下 < 被選中的行向左移動8個空格,并返回到“普通命令模式”下
6. 大小寫切換
命令說明 u 將選中的文本中的大寫字母全部轉換成小寫 U 將選中的文本中的小寫字母全部轉換成大寫 ~ 大小寫互相切換
7. 合并多行
命令說明 J 按下大寫的 J 可以將高亮顯示的文本內容合并為一行,同時以空格來分隔各行 gJ 將高亮顯示的文本內容合并為一行,行與行之間沒有空格 . 將光標所在行下面的文本行合并到光標所在行后面
8. 加密文本
命令說明 g? 使用 g? 命令,可以使用 rot 13 算法來加密高亮顯示的文本;針對同一個文本再次執行加密命令,就可以進行文本解密
9. 保存文本
在可視化模式下選好文本,然后輸入 :write filename 命令,就可以將選中的字符所在的行內容保存到文件 filename 中,文件存放在當前工作目錄下
10. 文本排序
在可視化模式下選中多行文本,然后輸入 :sort 命令,則可以對選中的文本進行排序
11. 移動光標
命令說明 o 將光標在選中的文本區域首尾切換,例如,光標在選中的文本區域的末尾,按下 o 光標跳到文本區域的開頭位置
12. 切換到插入模式
命令說明 Shift + i 切換到插入模式,光標跳到選中字符所在行首,在行首插入字符 Shift + a 切換到插入模式,光標會后移一個字符,此時插入字符相當于是在光標后移前所在位置的后面插入字符
13. 退出可視模式
再次按下 v 退出“字符可視模式”
(二)行可視模式
在“普通命令模式”下按 V 或 shift + v 進入“行可視模式”,在屏幕底部出現標識:-- VISUAL LINE --。所謂“行模式”其實就是指在這種模式下,每次的選擇都是按“行”來選定。
1. 選擇文本
命令說明 ← 或 → 按左右箭頭鍵,按“行”選擇文本,被選中的文本會高亮顯示 gv 重新選中上次選中的文本,這個命令不一定要進入“可視模式”下再執行,在“普通命令模式”下就可以按下此命令,然后會自動選中上次選中的文本,并且進入“可視模式”下
2. 復制文本
命令說明 y 選擇好文本后,按下 y 復制文本,并且返回到“普通命令模式”下
3. 刪除文本
命令說明 d 選擇好文本后,按下 d 刪除文本,并且返回到“普通命令模式”下,當然你可以再按下 p 粘貼被刪除的文本,所以實際上這個 d 相當于“剪切”功能 x 效果和 d 一樣
4. 修改替換
命令說明 c 按下 c 可更改被選中的文本。按下此命令后被選中的文本被刪除,進入“插入模式”,此時可以在其中添加新文本,完成修改替換 s 效果和 c 一樣 r 先按 r ,再輸入新字符,則替換掉被選中的字符,并且返回到“普通命令模式”下
5. 文本行移動
命令說明 > 按下 > 被選中的行向右移動8個空格,并返回到“普通命令模式”下 < 按下 < 被選中的行向左移動8個空格,并返回到“普通命令模式”下
6. 大小寫切換
命令說明 u 將選中的文本中的大寫字母全部轉換成小寫 U 將選中的文本中的小寫字母全部轉換成大寫 ~ 大小寫互相切換
7. 合并多行
命令說明 J 按下大寫的 J 可以將高亮顯示的文本內容合并為一行,同時以空格來分隔各行 gJ 將高亮顯示的文本內容合并為一行,行與行之間沒有空格
8. 加密文本
命令說明 g? 使用 g? 命令,可以使用 rot 13 算法來加密高亮顯示的文本;針對同一個文本再次執行加密命令,就可以進行文本解密
9. 保存文本
在可視化模式下選好文本,然后輸入 :write filename 命令,就可以將選中的字符所在的行內容保存到文件 filename 中,文件存放在當前工作目錄下
10. 文本排序
在可視化模式下選中多行文本,然后輸入 :sort 命令,則可以對選中的文本進行排序
11. 移動光標
命令說明 o 將光標在選中的文本區域首尾切換,例如,光標在選中的文本區域的末尾,按下 o 光標跳到文本區域的開頭位置
12. 切換到插入模式
命令說明 Shift + i 切換到插入模式,光標跳到選中字符所在行首,在行首插入字符 Shift + a 切換到插入模式,光標會后移一個字符,此時插入字符相當于是在光標后移前所在位置的后面插入字符
13. 退出可視模式
再次按下 V 退出“行可視模式”
(三)塊可視模式
從“普通命令模式”下按Ctrl + v 進入到“塊選擇模式”下,在屏幕底部出現標識:-- VISUAL BLOCK --。所謂“塊模式”就是指在這種模式下,按上下左右箭頭(↑↓←→)可以選擇矩形區域,它選中的是文本的一個矩形區域(block)
1. 選擇文本
命令說明 ↑↓←→ 按上下左右箭頭(↑↓←→)可以在文本上選擇一個矩形區域
2. 復制文本
命令說明 y 選擇好文本后,按下 y 復制文本,并且返回到“普通命令模式”下
3. 刪除文本
命令說明 d 選擇好文本后,按下 d 刪除文本,并且返回到“普通命令模式”下,當然你可以再按下 p 粘貼被刪除的文本,所以實際上這個 d 相當于“剪切”功能 x 效果和 d 一樣
4. 修改替換
命令說明 c 按下 c 可更改被選中的文本。按下此命令后被選中的文本被刪除,進入“插入模式”,此時可以在其中添加新文本,完成修改替換 s 效果和 c 一樣 r 先按 r ,再輸入新字符,則替換掉被選中的字符,并且返回到“普通命令模式”下
5. 文本行移動
命令說明 > 按下 > 被選中的行向右移動8個空格,并返回到“普通命令模式”下 < 按下 < 被選中的行向左移動8個空格,并返回到“普通命令模式”下
6. 大小寫切換
命令說明 u 將選中的文本中的大寫字母全部轉換成小寫 U 將選中的文本中的小寫字母全部轉換成大寫 ~ 大小寫互相切換
7. 合并多行
命令說明 J 按下大寫的 J 可以將高亮顯示的文本內容合并為一行,同時以空格來分隔各行 gJ 將高亮顯示的文本內容合并為一行,行與行之間沒有空格
8. 加密文本
命令說明 g? 使用 g? 命令,可以使用 rot 13 算法來加密高亮顯示的文本;針對同一個文本再次執行加密命令,就可以進行文本解密
9. 保存文本
在可視化模式下選好文本,然后輸入 :write filename 命令,就可以將選中的字符所在的行內容保存到文件 filename 中,文件存放在當前工作目錄下
10. 文本排序
在可視化模式下選中多行文本,然后輸入 :sort 命令,則可以對選中的文本進行排序
11. 移動光標
命令說明 o 將光標在選中的文本區域首尾切換,例如,光標在選中的文本區域的末尾,按下 o 光標跳到文本區域的開頭位置
12. 切換到插入模式
命令說明 Shift + i 切換到插入模式,光標跳到選中區域左上角 Shift + a 切換到插入模式,光標跳到選中區域右上角
13. 退出可視模式
再次按下 Ctrl + v 退出“塊可視模式”
四、底行命令模式
It’s called command mode or ex mode.
在“普通命令模式”下輸入 : 進入“底行命令模式”下。“底行命令模式”也稱之為“ex 命令模式”,因為以冒號 : 開頭的命令基本都是 ex 命令。所以“底行命令模式”下的相關命令詳解請參見《vim 下的 ex 指令》。
五、插入模式
該模式也可以叫輸入模式、編輯模式、寫入模式等。
(一)選擇文本
無法選擇文本,只能返回到“普通命令模式”下,再進入“可視模式”下進行選擇
(二)復制文本
快捷鍵說明 Ctrl + y 對應正上方的行,挨個復印字符。非常有意思的命令。 Ctrl + e 與上個命令類似,但拷貝的是下方的行
(三)粘貼文本/插入寄存器的內容
快捷鍵說明 <C r>{register} 將寄存器的內容插入到光標所在的位置
(四)運算表達式
命令說明 C-r = 先按下 C-r,接著按 =,再輸入運算表達式,再按下“回車”,就能在光標處插入計算結果
(五)刪除文本
快捷鍵說明 Back Space 退格鍵,刪除光標后(光標右邊)一個字符,Fn+Del就是Back Space Del 刪除鍵,刪除光標前一個字符 Ctrl + w 刪除光標左邊的單詞 Ctrl + u 從此處刪除到行首的第一個非空字符
注:上述不是命令,而是快捷鍵
(六)移動文本
好像不行
(七)移動光標
快捷鍵說明 Home 移動光標到行首,MacBook 的鍵盤使用 Fn+←就是Home鍵 End 移動光標到行尾,Fn+→就是End鍵 Shift + ← 移動到前一個單詞 Shift + → 移動到后一個單詞
(八)臨時切換到普通命令模式
快捷鍵說明 Ctrl + o 進入命令模式并在執行一個命令后自動返回插入模式。很常用
(九)修改/替換
命令說明 Insert 切換光標為輸入/替換模式,光標將變成豎線/下劃線,MacBook 內置鍵盤下沒有此鍵
(十)搜索
好像不行
(十一)退出插入模式
退出插入模式,返回到普通命令模式。
命令說明 Esc 退出輸入模式,切換到“普通命令模式” <C [> 同上
(十二)自動補全
命令說明 Ctrl + N 所謂補全,就是你按下這個組合鍵,會出來一個列表,當前所有打開的窗口中與光標所在位置的字符或字符串有關的詞會出現在這個列表中
(十三)翻頁
命令說明 Page Up 上翻頁,Fn+↑就是Page Up Page Down 下翻頁,Fn+↓就是Page Down
六、vim 命令打開文件及選項參數說明
命令說明 vim -c command filename 在打開文件前,先執行指定的命令 vim -r filename 恢復上次異常退出的文件 vim -R filename 以只讀的方式打開文件,但可以強制保存,因為不能增減內容,那這個保存意義又何在呢? vim -M filename 以只讀的方式打開文件,不可以強制保存 vim -y num filename 將編輯窗口的大小設為 num 行 vim + filename 從文件的末尾開始。例如:vim + text.txt,游標會默認停留在文檔最后 1 行的第 1 個字符處 vim +num filename 從第 num 行開始。例如:vim +3 text.txt,游標會默認停留在文檔的第 3 行的第 1 個字符處。注意:加號 + 與數字之間不能有空格 vim +/pattern filename 打開文件后,游標會停留在第一個含有 pattern 的行的第 1 個字符處 vim +n filename 打開 filename 文件后游標跳到第 n 行的第 1 個字符處 vim + filename 打開文件 filename 后跳到最后一行 vim -x filename 開始編輯一個加密的文件 vim -o files 以水平分割的多個窗口形式同時打開多個文件。例如:vim -o a.txt b.txt c.txt vim -O files 以垂直分割的多個窗口形式同時打開多個文件 vim -O5 a.txt b.txt 打開 5 個垂直分割的窗口,其中兩個顯示 a.txt,b.txt 的內容,另外 3 個為空的窗口 vim -p files 以多標簽形式同時打開多個文件,每個文件占用一個標簽頁 vim files 同時打開多個文件,打開后使用 next、previous 等指令切換 vim -d files 垂直打開多窗口,并且進行比較 vimdiff files 垂直打開多窗口,并且進行比較 vim -h 或 vim --help 查看命令 vim 的幫助文檔
七、寄存器
"ayy 把游標所在行的內容復制到 a 寄存器中。大小寫英文字母表示寄存器的名稱。其實是創建了一個以名稱為 a 的寄存器,該寄存器存放了當前游標所在行的文本內容,可以在底行命令模式下輸入 reg 查看下
""yy 表示把游標所在行的內容追加到默認的寄存器中
"*yy 把游標所在行的內容放入當前選擇緩沖區
"+yy 把游標所在行的內容放入系統剪貼板
關于寄存器的其它內容可以參見《vim 的寄存器/剪貼板》
八、查看 vim 編輯器的幫助文檔
命令說明 h[elp] 按回車,打開總的幫助 help {command} 對于任何一個 vim 指令,都可以輸入 help 然后輸入命令名稱,查看相關的幫助文檔 F1 打開總的幫助文檔,這個不是 ex 指令,在“普通命令模式”下按下 F1 鍵,有些電腦要結合 Fn 鍵才行 help user-manual 打開用戶手冊。命令幫助的格式為:第一行指明怎么使用那個命令; 然后是縮進的一段解釋這個命令的作用;然后是進一步的信息 helptags somepath 為 somepath 中的文檔生成索引,不知道干嘛的 helpgrep 可以搜索整個幫助文檔,匹配的列表顯示在 quickfix 窗口中。Ctrl + ] 跳到含有光標所在位置的詞的 tag 主題,Ctrl + t 跳回。 ver 顯示版本信息 help version# # 是主版本號,例如 vim 8.0,你可以輸入 help version8,再按 <Enter>,查看版本信息。
注:沒有特別說明的命令,都是在“底行命令模式”下執行的命令,記得按下“回車”哦~
總結
以上是生活随笔 為你收集整理的vim 编辑器命令整理 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。