本文是對《Linux三劍客》中vim視頻教程中的命令進行總結,方便大家學習、收藏,快速掌握vim各種命令的使用。
vim是什么?
vim是Linux環境下一款功能強大、高度可定制的文本編輯工具,類似於Windows下面的source insight、sublime、notepad。VI是visual interface的縮寫,即可視化接口。vim 即 vi IMproved,在 vi 的基礎上做了很多改進,如:增加了多級撤銷、多窗口操作、崩潰后也可以恢復、增加了穩定性、關鍵字自動補全、上下文自動補全等功能。
vim的工作模式
vim一般有6種工作模式。
- 普通模式:使用vim打開一個文件時默認模式,也叫命令模式,允許用戶通過各種命令瀏覽代碼、滾屏等操作。
- 插入模式:也可以叫做編輯模式,在普通模式下敲擊 i 、a 或 o 就進入插入模式,允許用戶通過鍵盤輸入、編輯。
- 命令行模式:在普通模式下,先輸入冒號:,接着輸入命令,就可以通過配置命令對vim進行配置了,如改變顏色主題、顯示行號等,這些配置命令也可以保存到/etc/vim/vimrc配置文件中,每次打開默認配置執行。
- 可視化模式:在普通模式下敲擊前盤上的 v 鍵,就進入可視化模式,然后移動光標就可以選中一塊文本,常用來完成文本的復制、粘貼、刪除等操作。
- 替換模式:如果我們想修改某個字符,不需要先進入插入模式,刪除,然后再輸入新的字符,直接在普通模式下,敲擊R鍵就可以直接替換。
- EX模式:類似於命令行模式,可以一次運行多個命令
vim的各種工作模式可以通過不同的鍵進行切換,用戶統一使用ESC鍵返回到普通模式。
光標移動命令
單個字符移動: h: 向左移動 l: 向右移動 j: 向下移動 k: 向上移動 xh: 向左移動x個字符距離 單詞移動: w: 將光標移動到下一個單詞的開頭 b: 將光標移動到前一個單詞的開頭 e: 將光標移動到下一個單詞的詞末 E: 移動到單詞的結尾(忽略標點符號) ge: 將光標移動到上一個單詞的詞末 2w: 指定移動的次數 行移動: $: 將光標移動到當前行的行尾 0: 將光標移動到當前行的行首 ^: 將光標移動到當前行的第一個非空字符(行首和當前行非空字符不是一個位置) 2|: 移到當前行的第2列 fx: 將光標移動到當前行的第一個字符x上 3fx: 將光標移動到航前行的第3個字符x上 tx: 將光標移動到目標字符x的前一個字符上 fx和tx可以通過;和,進行重復移動,一個是正向重復,一個是反向重復 %: 用於符號間的移動,它會在一對()、[]、{}之間跳躍 文本塊移動: (: 移到當前句子的開頭 ): 移到下一個句子的開頭 {: 移到當前一段的開頭 }: 移到下一段的開頭 [[: 移到當前這一節的開頭 ]]: 移到下一節的開頭 在屏幕中移動 xG: 跳轉到指定的第x行,G移動到文件按末尾,``(2次單引號)返回到跳轉前的位置 gg: 移動到文件開頭 x%: 移動到文件中間,就使用50% H: 移動到home M: 移動到屏幕中間 L: 移動到一屏末尾 ctrl+G: 查看當前的位置狀態
滾屏與跳轉
半屏滾動: ctrl+u/ctrl+d 全屏滾動: ctrl+f/ctrl+b 定位光標的位置 zz: 將光標置於屏幕的中間 zt: 將光標移動到屏幕的頂部 zb: 將光標移動到屏幕的底部 設置跳轉標記 mx,my,mz設置三個位置 `x,`y,`z跳轉到設置
文本插入操作
i: 在當前光標的前面插入字符 a: 在當前光標的后面追加字符 o: 在當前光標的下一行行首插入字符 I: 在一行的開頭添加文本 A: 在一行的結尾處添加文本 O: 在光標當前行的上一行插入文本 s: 刪除當前光標處的字符並進入到插入模式 S: 刪除光標所在處的行,並進入到插入模式 u: 撤銷修改
文本刪除操作
字符刪除 x: 刪除當前光標所在處的字符 X: 刪除當前光標左邊的字符 單詞刪除 dw: 刪除一個單詞(從光標處到空格) daw: 無論光標在什么位置,刪除光標所在的整個單詞(包括空白字符) diw: 刪除整個單詞文本,但是保留空格字符不刪除 d2w: 刪除從當前光標開始處的2個單詞 d$: 刪除從光標到一行末尾的整個文本 d0: 刪除從光標到一行開頭的所有單詞 dl: 刪除當前光標處的字符=x dh: 刪除當前光標左邊的字符=X 行刪除 dd: 刪除當前光標處的一整行=D 5dd: 刪除從光標開始處的5行代碼 dgg: 刪除從光標到文本開頭 dG: 刪除從光標到文本結尾 行合並 J: 刪除一個分行符,將當前行與下一行合並
文本復制、剪切與粘貼
y: 復制,p:粘貼 yw: 復制一個單詞 y2w: 復制2個單詞 y$: 復制從當前光標到行結尾的所有單詞 y0: 復制從當前光標到行首的所有單詞 yy: 復制一整行 2yy: 復制從當前光標所在行開始的2行 復制文本塊 1.首先進入visual模式:v 2.移動光標選擇文本 3.復制與粘貼的操作
文本的修改與替換
cw: 刪除從光標處到單詞結尾的文本並進入到插入模式 cb: 刪除從光標處到單詞開頭的文本並進入到插入模式 cc: 刪除一整行並進入到插入模式 ~: 修改光標下字符的大小寫 r: 替換當前光標下的字符 R: 進入到替換模式 xp: 交換光標和下一個字符
文本的查找與替換
/string 正向查找 ?string 反向查找 設置高亮顯示 :set hls *按鍵將當前光標處的單詞高亮顯示,使用n瀏覽下一個查找高亮的結果 :s/old/new 將當前行的第一個字符串old替換為new :s/old/new/g 將當前行的所有字符串old替換為new :90s/old/new/g 將指定行的所有字符串old替換為new :90,93s/old/new/g 將指定范圍的行的所有字符串old替換為new :%s/old/new/g 將文本中所有的字符串old替換為new :%s/old/new/gc 依次替換每個字符串關鍵字 :%s/^struct/int/g 將所有以struct開頭的字符串替換為int
撤銷修改、重做與保存
u: 撤銷上一步的操作。 Ctrl+r: 將原來的插銷重做一遍 U: 恢復一整行原來的面貌(文件打開時的文本狀態) q: 若文件沒有修改,直接退出 q!: 文件已經被修改,放棄修改退出 wq: 文件已經被修改,保存修改並退出 e!: 放棄修改,重新回到文件打開時的狀態
編輯多個文件
文件和緩沖區的區別 文件是保存在磁盤上的,而打開的文件的文件是在內存中,在內存中有一個緩沖區,用來存放打開的文件。vim每次打開文件時都會創建一個緩沖區,vim支持打開多個文件 :buffers 查看緩沖區列表==ls :buffer N 根據緩沖區列表的編號跳轉到指定緩沖區 :bnext/bprev 遍歷緩沖區列表 :bfirst/blast 分別調到緩沖區列表的開頭和結尾 :write 將緩沖區的修改保存到磁盤上 :edit! e! 放棄緩沖區的修改,恢復到文件打開時的狀態 :edit file 編輯另一個文件 :wnext 保存當前緩沖區的修改並跳轉到緩沖區列表中的下一個文件 :set autowrite
標簽頁與折疊欄
標簽頁的新建:tabedit file/tab split 標簽頁的切換: tabn/tabp 按鍵:gt/gT 標簽頁的關閉 tabclose 關閉當前的標簽頁: tabonly 創建一個折疊 zf200G:將光標和200行之間的代碼折疊起來 折疊的打開與關閉 za: 打開和關閉折疊 zr/zm: 一層一層地打開和關閉折疊 zR/zM: 分別打開和關閉所有的折疊 折疊鍵的光標移動 zj: 跳轉到下一個折疊處 zk: 跳轉到上一個折疊處 刪除折疊 zd: 刪除光標下的折疊 zD: 刪除光標下的折疊以及嵌套的折疊 zE: 刪除所有的折疊標簽 創建的折疊當退出vim之后就失效了。
多窗口操作
分割窗口 split/vsplit filename 窗口間跳轉 ctrl+w hjkl ctrl+w w 移動窗口 ctrl+w HJKL 調整窗口尺寸 ctrl+w +/- 調整窗口的高度 ctrl+w </> 調整窗口的寬度 ctrl+w = 所有的窗口設置相同的尺寸 :resize n將當前窗口尺寸調整為N行 關閉窗口 close: 關閉一個窗口 qall: 退出所有窗口 qall!: 放棄修改,退出所有窗口 wqall: 保存並退出所有窗口 wall: 保存所有窗口
附:vim鍵盤命令圖
vim配套的視頻教程,可參考王老師的《Linux三劍客》:git、make、vim視頻教程: