vim是vi的增強版本,具有比vimi更加強大的功能,對于尤其適合編寫腳本,下面總結一下vim的常用方法。
vim三種工作模式。
1. 編輯模式:
以vim打開文件就直接進入此模式,可以在此模式中刪除、復制、粘貼等操作。
如上圖所示,使用vim打開/etc/inittab文件,直接進入編輯模式。
2. 輸入模式:
在此模式下進行文件內容的輸入和編輯。
看到“INSERT”即進入了輸入模式
3. 末行模式:
可以提供查找數據、替換字符、設置vim環境、保存文件等功能。
看到“:”即進入了末行模式。
打開文件:
vim [option]…[FILE]
當指定的文件存在則打開文件,如果不存在則可以保存為新的文件。
編輯模式 –> 輸入模式
當使用vim打開文件時默認進入的是編輯模式,如果想要切換到輸入模式,可以使用以上方法
i:在光標所在處切換為輸入模式。
I:光標移至行首切換為輸入模式。
a:在光標所在處的后方切換為輸入模式。
A:光標移至行尾切換為輸入模式。
o:在光標所在處的下方新建一個空行并切換為輸入模式。
O:在光標所在處的上方新建一個空行并切換為輸入模式。
輸入模式 –> 編輯模式
按 ESC 鍵即可由輸入模式回到編輯模式
編輯模式 –> 末行模式
直接輸入“:”即可進入末行模式
末行模式 –> 編輯模式
按 ESC 鍵可以回到編輯模式
注:從輸入模式不能直接進入末行模式,必須經由編輯模式方可切換,輸入模式 –> 編輯模式 –> 末行模式
vim +# file:打開文件時光標直接處于第#行行首。
退出文件:
末行模式下
不保存強制退出
保存退出
兩種方法效果相同
強制保存
強制保存退出
編輯模式下
輸入ZZ也可以保存退出。
編輯模式
光標移動
字符間移動
h或左箭頭:光標向左移動一個字符
j或下箭頭:光標向下移動一個字符
k或上箭頭:光標向上移動一個字符
l或右箭頭:光標向右移動一個字符
一次移動多個字符 #{h|j|k|l}
eg:輸出3j即可向下移動3行
單詞間跳轉:
w:光標移至下一個單詞的詞首
b:光標移至當前單詞或前一個單詞的詞首
e:光標移至當前單詞或下一個單詞的詞尾
一次移動多個單詞 #{w|b|e}
行內移動:
^:光標移至行首(第一個非空字符)
0:光標移至行首(絕對行首)
$:光標移至行尾(絕對行尾)
句子間移動:
):下一句的句首
(:上一句的句首
段落間移動:
}:下一段
{:上一段
行間移動:
G:最后一行
#G:直接跳轉至第#行
gg:直接跳轉至首行
#[Enter]:光標向下移動#行
翻屏操作:
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件乎部翻半屏
編輯命令
刪除操作:
x:刪除光標所在處的字符(相當于[Del]鍵)
X:刪除光標前面的一個字符(相當于[Backspace]鍵)
#x:刪除后面的#個字符
d:刪除命令
結合光標跳轉字符使用,刪除跳轉范圍內的字符
#d+光標跳轉符(w,b,e,$,0,^)
dd:刪除光標所在行
dG:刪除從光標所在到最后一行的所有數據
d1G:刪除光標所在到第一行的所有數據
D:刪除從光標所在處至行尾的內容,與d$相同
注意:最后一次刪除的內容會被保存到緩沖區
復制操作:
y:復制命令
結合光標跳轉字符使用,復制跳轉范圍內的字符
#y+光標跳轉符(w,b,e,$,0,^)
yy:復制光標所在的那一行
#yy:復制光標所在的向下n行
y1G:復制光標所在行到第一行的所有數據
yG:復制光標所在行到最后一行的所有數據
Y:復制光標所在處至行尾的內容,與y$相同
粘貼操作
粘貼的位置取決于最后一次刪除、復制操作的內容,如果刪除或復制的操作為行則:
p:粘貼至光標所在行的下方
P:粘貼至光標所在行的上方
如果刪除或復制操作為字符或單詞則:
p:粘貼于當前光標所在處后方
P:粘貼于當前光標所在處前方
修改操作
修改操作可以在進行刪除操作后直接切換為輸入模式
c:刪除命令
結合光標跳轉字符使用,刪除跳轉范圍內的字符
#c+光標跳轉符(w,b,e,$,0,^)
cc:刪除光標所在行并切換至輸入模式
cG:刪除從光標所在到最后一行的所有數據并切換至輸入模式
c1G:刪除光標所在到第一行的所有數據并切換至輸入模式
C:刪除從光標所在處至行尾的內容并切換到輸入模式,與c$相同
撤消編輯
u:撤消最近一次的操作
#u:撤消最近的#次操作,最多可撤消50次的內容
撤消此前的撤消操作
Ctrl+r
重復前一條命令
.
查找與替換
/pattern:向下查找與pattern匹配的字符串
?pattern:向上查找與pattern匹配的字符串
n:重復前一個查找的操作。如果使用/進行查找,則n表示向下查找,如果使用?進行查找,則n表示向上查找
N:與n相反,表示與前一個查找進行反向操作
末行模式
行間跳轉
:#[Enter]:光標直接跳轉至第#行
$:可跳轉至最后一行
內容定界
指定起始位置和結束位置來定義內容的范圍
eg: :20 +3 表示從20行開始的4行
#:第#行
.:當前行
$:最后一行
%:全文,相當于1,$
:10,$-1 表示從第10行到倒數第2行
c,d,y等命令可直接附加在指定的范圍后使用
:10,$-1 d:表示刪除從第10行到倒數第2行的內容
w:將指定范圍的內容另存至其它文件
:.$w /root/test:將從當前行至最后一行的內容另存為/root/test
如不指定范圍,直接使用w命令,則可將整個文件另存為一個新的文件
r:在指定位置讀入其它文件的內容
:.r /root/test:在當前位置讀入/root/test文件內容
查找與替換
s/查找模式/要替換成的內容/gic
查找模式:可以使用正則表達式
要替換成的內容:不能使用模式,僅能使用引用
引用模式匹配到的所有內容可以使用&符號來替代\1等字符
g:global,全行替換
如果不使用g,查找的字符所在行中存在不止一個匹配項時,只替換第一個
i:不區分字符大小寫
:%s/\<file\>/FILE/gi:只替換file單詞,忽略包含在單詞中的file字符,且不區分大小寫
c:替換前提示用戶確認是否替換,常與g同時使用
可視化模式:
用于選取整塊范圍的模式
在編輯模式下輸入以下命令:
v:光標走過的字符都被選中
V:光標走過的行都被選中
Ctrl+v:以長方形的方式進行選擇
以上圖為例,將光標移到Default的詞首,按下Ctrl+v鍵,可以看到模式切換為塊選擇,此時選中Default單詞并向下移動光標,與Default字符相對齊的字符都被選中。
y:將選中的數據復制
d:將選中的數據刪除
多文件模式
可以同時打開多個文件,并在各個文件中進行切換
vim file1,file2……
:file:列出目前這個vim打開的所有文件
:n:下一個文件
:N:上一個文件
:next:與:n相同
:previous:與:N相同
:last:最后一個文件
:first:第一個文件
:wqa:保存并退出所有文件
:wqall:與:wqa相同
多窗口模式
多文件操作
vim [option] file1,file2 ……
[option]:
-o:水平分割多個文件
-O:垂直分割多個文件
在已打開的文件中再次的打開一個文件并且以水平分割的方式放置: :sp [filename]
文件默認以水平分割的方式打開
在多個窗口中進行切換: Ctrl+w,方向鍵
單文件操作
Ctrl+w,s:水平分割單個文件
Ctrl+w,v:垂直分割單個文件
首先以將文件水平分割成上面兩個窗口,再把上面的窗口以垂直方式分割成兩個窗口
:sp:水平分割單個文件
窗口屬性定義
以下操作均在末行模式下進行:
:set nu:顯示行號
:set nonu:取消顯示行號
:set ai:自動縮進
:set noai:取消自動縮進
設置了自動縮進后,換行時光標會自動對齊上面行的行首位置,而不會回到絕對行首
:set ic:忽略字符大小寫
:set noic:取消忽略字符大小寫
設置此項后在查找字符時會忽略大小,默認關閉
:set sm:顯示與之匹配的括號的另外半邊
:set nosm:取消顯示與之匹配的辭呈的另外半邊
上圖中將光標移至左中括號時,自動高亮顯示與之匹配的右中括號
:set hlsearch:開啟搜索高亮顯示
:set nohlsearch:關閉搜索高亮顯示
上圖中搜索f,會自動高亮標識所有的f,此選項會默認開啟,并且即使關閉了當前文件,再次打開其它文件時也會高亮標識之前的搜索結果。
:set syntax= [on|off]:語法高亮顯示控制
上圖中帶顏色的字符即為開啟語法高亮顯示的結果,可以幫忙用戶標識語法結構,查找語法錯誤,如果關閉此功能則如下圖所示
:set all:顯示目前所有環境參數設置值
:set:顯示與系統默認值不同的設置參數,一般就是用戶改動過的設置
配置文件
可將屬性命令寫在配置文件中設置vim默認屬性,注釋使用雙引號。
全局配置文件:/etc/vimrc
用戶配置文件:~/vimrc
原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/1025
mark