VIM的簡介
VIM是一款功能強大、高度可定製的文本編輯工具。可以使用命令apt install vim(Ubuntu環境,在安裝有apt工具的情況下)安裝,相比起vi來說,vim做的一些變化
- vi是visual interface的縮寫,而vim是Vi IMproved的縮寫
- EX的可視化接口
- 增加了多級撤銷、多窗口操作
- 穩定性提高、減少崩潰以及崩潰後也可以恢復
- 關鍵字自動補全自己上下文相關的補全
vim工作模式
VIM一共分爲五種模式,分別爲
- 普通模式:vim打開一個文件時默認模式(命令模式)
- 插入模式:i 進入插入模式之外,還有o,a都進入插入模式
- 命令行模式:可以輸入命令執行,例如:set number可以設置行號,如果想一直有效,可以將命令寫入到 /etc/vim/vimrc 配置文件。
- 可視化模式:按v進入到可視化模式,然後移動光標就可以選中一塊文本了,可以進行後續的粘貼、刪除、複製等操作
- 替換模式:按R就可以進入到替換模式
細節操作
光標移動
單個字符移動:
- 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設置三個位置,以m開頭,後可接任意字母
- `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行
複製文本塊
- 首先進入visual模式:v
- 移動光標選擇文本
- 複製與粘貼的操作
文本修改與替換
- 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 將90到93行的所有字符串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時候的所有做的筆記。