Vim是什么
Vim是從vi發(fā)展出來的一個(gè)文本編輯器篡帕,其代碼補(bǔ)充屑迂,編譯及錯(cuò)誤跳轉(zhuǎn)方便編程的功能特別豐富,在程序員中被廣泛使用竿音。和Emacs并列成為類Unix系統(tǒng)用戶最喜歡的編輯器。并且在vi的基礎(chǔ)上也做了很多改進(jìn)拴驮,增加了多級(jí)撤銷春瞬、多窗口操作、崩潰后也可以恢復(fù)套啤、增加了穩(wěn)定性宽气、關(guān)鍵字自動(dòng)補(bǔ)全、上下文自動(dòng)補(bǔ)全等功能潜沦。
Vim的工作模式
Vim一共有6種工作模式
- 普通模式:使用vim打開一個(gè)文件時(shí)默認(rèn)模式萄涯,也叫命令模式,允許用戶通過各種命令瀏覽代碼唆鸡、滾屏等操作涝影。
- 插入模式:也可以叫做編輯模式,在普通模式下敲擊 i 就進(jìn)入插入模式争占,允許用戶通過鍵盤輸入燃逻、編輯。
- 命令行模式:在普通模式下臂痕,先輸入冒號(hào):伯襟,接著輸入命令,就可以通過配置命令對vim進(jìn)行配置了握童,如改變顏色主題姆怪、顯示行號(hào)等,這些配置命令也可以保存到/etc/vim/vimrc配置文件中舆瘪,每次打開默認(rèn)配置執(zhí)行片效。
- 可視化模式:在普通模式下敲擊前盤上的 v 鍵红伦,就進(jìn)入可視化模式英古,然后移動(dòng)光標(biāo)就可以選中一塊文本,常用來完成文本的賦值昙读、粘貼召调、刪除等操作。
- 替換模式:如果我們想修改某個(gè)字符蛮浑,不需要先進(jìn)入插入模式唠叛,刪除,然后再輸入新的字符沮稚,直接在普通模式下艺沼,敲擊R鍵就可以直接替換。
- EX模式:類似于命令行模式蕴掏,可以一次運(yùn)行多個(gè)命令
vim的各種工作模式可以通過不同的鍵進(jìn)行切換障般,用戶統(tǒng)一使用ESC鍵返回到普通模式调鲸。
- 光標(biāo)移動(dòng)命令
單個(gè)字符移動(dòng):
h: 向左移動(dòng)
l: 向右移動(dòng)
j: 向下移動(dòng)
k: 向上移動(dòng)
xh: 向左移動(dòng)x個(gè)字符距離
單詞移動(dòng):
w: 將光標(biāo)移動(dòng)到下一個(gè)單詞的開頭
b: 將光標(biāo)移動(dòng)到前一個(gè)單詞的開頭
e: 將光標(biāo)移動(dòng)到下一個(gè)單詞的詞末
E: 移動(dòng)到單詞的結(jié)尾(忽略標(biāo)點(diǎn)符號(hào))
ge: 將光標(biāo)移動(dòng)到上一個(gè)單詞的詞末
2w: 指定移動(dòng)的次數(shù)
行移動(dòng):
$: 將光標(biāo)移動(dòng)到當(dāng)前行的行尾
0: 將光標(biāo)移動(dòng)到當(dāng)前行的行首
^: 將光標(biāo)移動(dòng)到當(dāng)前行的第一個(gè)非空字符(行首和當(dāng)前行非空字符不是一個(gè)位置)
2|: 移到當(dāng)前行的第2列
fx: 將光標(biāo)移動(dòng)到當(dāng)前行的第一個(gè)字符x上
3fx: 將光標(biāo)移動(dòng)到航前行的第3個(gè)字符x上
tx: 將光標(biāo)移動(dòng)到目標(biāo)字符x的前一個(gè)字符上
fx和tx可以通過;和,進(jìn)行重復(fù)移動(dòng),一個(gè)是正向重復(fù)挽荡,一個(gè)是反向重復(fù)
%: 用于符號(hào)間的移動(dòng)藐石,它會(huì)在一對()、[]定拟、{}之間跳躍
文本塊移動(dòng):
(: 移到當(dāng)前句子的開頭
): 移到下一個(gè)句子的開頭
{: 移到當(dāng)前一段的開頭
}: 移到下一段的開頭
[[: 移到當(dāng)前這一節(jié)的開頭
]]: 移到下一節(jié)的開頭
在屏幕中移動(dòng)
xG: 跳轉(zhuǎn)到指定的第x行于微,G移動(dòng)到文件按末尾,``(2次單引號(hào))返回到跳轉(zhuǎn)前的位置
gg: 移動(dòng)到文件開頭
x%: 移動(dòng)到文件中間青自,就使用50%
H: 移動(dòng)到home
M: 移動(dòng)到屏幕中間
L: 移動(dòng)到一屏末尾
ctrl+G: 查看當(dāng)前的位置狀態(tài)
- 滾屏與跳轉(zhuǎn)
半屏滾動(dòng): ctrl+u/ctrl+d
全屏滾動(dòng): ctrl+f/ctrl+b
定位光標(biāo)的位置
zz: 將光標(biāo)置于屏幕的中間
zt: 將光標(biāo)移動(dòng)到屏幕的頂部
zb: 將光標(biāo)移動(dòng)到屏幕的底部
設(shè)置跳轉(zhuǎn)標(biāo)記
mx,my,mz設(shè)置三個(gè)位置
`x,`y,`z跳轉(zhuǎn)到設(shè)置
- 文本插入操作
i: 在當(dāng)前光標(biāo)的前面插入字符
a: 在當(dāng)前光標(biāo)的后面追加字符
o: 在當(dāng)前光標(biāo)的下一行行首插入字符
I: 在一行的開頭添加文本
A: 在一行的結(jié)尾處添加文本
O: 在光標(biāo)當(dāng)前行的上一行插入文本
s: 刪除當(dāng)前光標(biāo)處的字符并進(jìn)入到插入模式
S: 刪除光標(biāo)所在處的行株依,并進(jìn)入到插入模式
u: 撤銷修改
- 文本刪除操作
字符刪除
x: 刪除當(dāng)前光標(biāo)所在處的字符
X: 刪除當(dāng)前光標(biāo)左邊的字符
單詞刪除
dw: 刪除一個(gè)單詞(從光標(biāo)處到空格)
daw: 無論光標(biāo)在什么位置,刪除光標(biāo)所在的整個(gè)單詞(包括空白字符)
diw: 刪除整個(gè)單詞文本延窜,但是保留空格字符不刪除
d2w: 刪除從當(dāng)前光標(biāo)開始處的2個(gè)單詞
d$: 刪除從光標(biāo)到一行末尾的整個(gè)文本
d0: 刪除從光標(biāo)到一行開頭的所有單詞
dl: 刪除當(dāng)前光標(biāo)處的字符=x
dh: 刪除當(dāng)前光標(biāo)左邊的字符=X
行刪除
dd: 刪除當(dāng)前光標(biāo)處的一整行=D
5dd: 刪除從光標(biāo)開始處的5行代碼
dgg: 刪除從光標(biāo)到文本開頭
dG: 刪除從光標(biāo)到文本結(jié)尾
行合并
J: 刪除一個(gè)分行符勺三,將當(dāng)前行與下一行合并
- 文本復(fù)制,剪切與粘貼
y: 復(fù)制需曾,p:粘貼
yw: 復(fù)制一個(gè)單詞
y2w: 復(fù)制2個(gè)單詞
y$: 復(fù)制從當(dāng)前光標(biāo)到行結(jié)尾的所有單詞
y0: 復(fù)制從當(dāng)前光標(biāo)到行首的所有單詞
yy: 復(fù)制一整行
2yy: 復(fù)制從當(dāng)前光標(biāo)所在行開始的2行
復(fù)制文本塊
1.首先進(jìn)入visual模式:v
2.移動(dòng)光標(biāo)選擇文本
3.復(fù)制與粘貼的操作
- 文本的修改與替換
cw: 刪除從光標(biāo)處到單詞結(jié)尾的文本并進(jìn)入到插入模式
cb: 刪除從光標(biāo)處到單詞開頭的文本并進(jìn)入到插入模式
cc: 刪除一整行并進(jìn)入到插入模式
~: 修改光標(biāo)下字符的大小寫
r: 替換當(dāng)前光標(biāo)下的字符
R: 進(jìn)入到替換模式
xp: 交換光標(biāo)和下一個(gè)字符
- 文本的查找與替換
/string 正向查找
?string 反向查找
設(shè)置高亮顯示
:set hls
*按鍵將當(dāng)前光標(biāo)處的單詞高亮顯示吗坚,使用n瀏覽下一個(gè)查找高亮的結(jié)果
:s/old/new 將當(dāng)前行的第一個(gè)字符串old替換為new
:s/old/new/g 將當(dāng)前行的所有字符串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 依次替換每個(gè)字符串關(guān)鍵字
:%s/^struct/int/g 將所有以struct開頭的字符串替換為int
- 撤銷修改、重做與保存
u: 撤銷上一步的操作呆万。
Ctrl+r: 將原來的插銷重做一遍
U: 恢復(fù)一整行原來的面貌(文件打開時(shí)的文本狀態(tài))
q: 若文件沒有修改商源,直接退出
q!: 文件已經(jīng)被修改,放棄修改退出
wq: 文件已經(jīng)被修改谋减,保存修改并退出
e!: 放棄修改牡彻,重新回到文件打開時(shí)的狀態(tài)
- 編輯多個(gè)文件
文件和緩沖區(qū)的區(qū)別
文件是保存在磁盤上的,而打開的文件的文件是在內(nèi)存中出爹,在內(nèi)存中有一個(gè)緩沖區(qū)庄吼,用來存放打開的文件。vim每次打開文件時(shí)都會(huì)創(chuàng)建一個(gè)緩沖區(qū)严就,vim支持打開多個(gè)文件
:buffers 查看緩沖區(qū)列表==ls
:buffer N 根據(jù)緩沖區(qū)列表的編號(hào)跳轉(zhuǎn)到指定緩沖區(qū)
:bnext/bprev 遍歷緩沖區(qū)列表
:bfirst/blast 分別調(diào)到緩沖區(qū)列表的開頭和結(jié)尾
:write 將緩沖區(qū)的修改保存到磁盤上
:edit! e! 放棄緩沖區(qū)的修改总寻,恢復(fù)到文件打開時(shí)的狀態(tài)
:edit file 編輯另一個(gè)文件
:wnext 保存當(dāng)前緩沖區(qū)的修改并跳轉(zhuǎn)到緩沖區(qū)列表中的下一個(gè)文件
:set autowrite
- 標(biāo)簽頁與折疊欄
標(biāo)簽頁的新建:tabedit file/tab split
標(biāo)簽頁的切換: tabn/tabp
按鍵:gt/gT
標(biāo)簽頁的關(guān)閉
tabclose
關(guān)閉當(dāng)前的標(biāo)簽頁: tabonly
創(chuàng)建一個(gè)折疊
zf200G:將光標(biāo)和200行之間的代碼折疊起來
折疊的打開與關(guān)閉
za: 打開和關(guān)閉折疊
zr/zm: 一層一層地打開和關(guān)閉折疊
zR/zM: 分別打開和關(guān)閉所有的折疊
折疊鍵的光標(biāo)移動(dòng)
zj: 跳轉(zhuǎn)到下一個(gè)折疊處
zk: 跳轉(zhuǎn)到上一個(gè)折疊處
刪除折疊
zd: 刪除光標(biāo)下的折疊
zD: 刪除光標(biāo)下的折疊以及嵌套的折疊
zE: 刪除所有的折疊標(biāo)簽
創(chuàng)建的折疊當(dāng)退出vim之后就失效了。
- 多窗口操作
分割窗口
split/vsplit filename
窗口間跳轉(zhuǎn)
ctrl+w hjkl
ctrl+w w
移動(dòng)窗口
ctrl+w HJKL
調(diào)整窗口尺寸
ctrl+w +/- 調(diào)整窗口的高度
ctrl+w </> 調(diào)整窗口的寬度
ctrl+w = 所有的窗口設(shè)置相同的尺寸
:resize n將當(dāng)前窗口尺寸調(diào)整為N行
關(guān)閉窗口
close: 關(guān)閉一個(gè)窗口
qall: 退出所有窗口
qall!: 放棄修改梢为,退出所有窗口
wqall: 保存并退出所有窗口
wall: 保存所有窗口
附上Vim鍵盤命令圖