vim編輯器作爲Linux系統上的文本處理工具三劍客之一,被廣大運維小夥伴所喜愛,馬哥稱之爲“尤物”的編輯器。下面簡單介紹一下vim編輯器。
文本編輯器:
文本:純文本,ASCII text;
文本編輯種類:
行編輯器:所謂行編輯器是指一行一行來處理的工具,如sed
全屏編輯器:編輯空間佔據整個屏幕,如nano,vi
vi:Visual Interface
vim:Vi IMproved,是vi的增強版,vim是模塊化的編輯
其他編輯器:
gedit:一個簡單的圖片編輯器
gvim:一個vim編輯器的圖形版本
vim:
模式化的編輯器
基本模式:
命令模式(默認):移動光標,剪切/粘貼文本
插入(編輯)模式;修改文本
擴展命令模式:保存,退出,vim內置的命令行接口,執行vim的內置命令
Esc鍵:退出當前模式,Esc鍵總是返回到命令模式
打開文件:
#vim [options] [file...]
+#: 打開文件後,直接讓光標處於第#行的行首;
+/PATTERN:打開文件後,直接讓光標處於第一個被PATTERN匹配到的行的行首;
vim + file直接打開file,光標在最後一行
vim -b file 二進制方式打開文件
vim -d file1 file2...比較多個文件
vim -m file 只讀打開文件
ex file 或 vim -e 直接進入ex模式
如果該文件存在,文件被打開並顯示內容
如果文件不存在,當編輯後第一次存盤時創建它
模式轉換:
編輯模式:默認模式;
編輯模式-->輸入模式;
i:insert,在光標所在處輸入;
a:append,在光標所在處後方輸入;
o:在光標所在處的下方開一個新行;
I:在光標所在處的行首輸入;
A:在光標所在行的行尾輸入;
O:在光標所在處的上方打開一個新行;
輸入模式-->編輯模式
ESC
編輯模式-->末行模式
:
末行模式-->編輯模式
ESC
鎖定和解鎖:Ctrl+s,Ctrl+q
關閉文件:
命令模式:
ZZ:保存並退出;
ZQ:不保存退出;
擴展模式:
:q 退出
:q! 強制退出,不保存此前的編輯操作
:wq 保存並退出
:x 保存並退出
:w /PATH/TO/SOMEFILE
r filename:讀文件內容到當前文件中
w filename:將當前文件內容寫入另一個文件
!command 執行命令
r!command:讀取命令執行結果到當前文件中
光標跳轉:
字符間跳轉
h:左
j:下
k:上
l:右
#COMMAND:跳轉由#指定的個數的字符;
單詞間跳轉:
w:下一個單詞的詞首
e:當前或後一個單詞的詞尾
b:當前或前一個單詞的詞首
#COMMAND:跳轉由#指定的個數的字符;
當前頁跳轉:
H:頁首 M:頁中間行 L:頁底
行首行尾跳轉
^:跳轉至行首的第一個非空白字符
0:跳轉至行首
$:跳轉至行尾
行間跳轉
#G:跳轉至由#指定的行;
1G,gg:第一行;
G:最後一行
句間跳轉
):下一句
(:上一句
段間跳轉
}:下一段
{:上一段
翻屏:
ctrl+f:向文件尾翻一屏
ctrl+b:向文件首部翻一屏
ctrl+d:向文件尾部翻半屏
ctrl+u:向文件首部翻半屏
enter:按行向後翻
vim的編輯命令:
字符編輯
x:刪除光標所在處的字符;
#x:刪除光標所在從起始的#個字符;
xp:交換光標所在處的字符與其後面的字符的位置
~:轉換大小寫
gU:變大寫
gu:變小寫
替換命令(replace):
r:替換光標所在處的字符
rCHAR
R:切換成REPLACE模式
刪除命令
d:刪除命令,可結合光標跳轉字符,實現範圍刪除;
d$:刪除光標處至行尾的內容;
d^:刪除光標處至行首的內容;
d0:刪除到行首
dw:刪除光標處至下一個單詞詞首的內容;
de:
db:
#COMMAND;
dd:刪除光標所在處的行;
#dd:刪除光標所處的行起始的共#行;
D:從當前光標位置一直刪除到行尾,留空行,等同於d$
粘貼命令(p,put,paste):
P:緩衝區中的內容如果爲整行,則粘貼在當前光標所在行的下方;否則,則粘貼至當前光標所在處的後方;
p:緩衝區中的內容如果爲整行,則粘貼在當前光標所在行的上方;否則,則粘貼至當前光標所在處的前方;
100iwang[ESC] 粘貼 “wang” 100次
複製命令(yank,y):
y:複製,工作行爲相似於d命令;
y$:從光標處拷貝紙本行最後一個字符
y0:
y^:
ye:從當前位置拷貝到本單詞的最後一個字符
yw:
yb:
#COMMAND
yy:複製行
#yy:複製多行
y:複製整行
改變命令(c,change)
c:修改後切換成插入模式
命令模式-->插入模式
c$:
c^:
c0:
cb:
ce:
cw:
#COMMAND
cc:刪除當前行並輸入新內容
#cc:
C:刪除當前光標到行尾,並切換成插入模式
擴展模式
地址定界
:start_pos,end_pos
#:具體到第#行,2表示第2行
#,#:從左側#表示行起始,到右側#表示行結尾
#,+#:從左側#表示的行起始,加上右側#表示的行數
2,+3 表示2-5行
.:當前行
$:最後一行
.,$-1 當前行到倒數第二行
%:全文,相當於1,$
/pat1/,/pat2/
從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配的行結束
#,/pat/ 從第#行到被pat匹配到的字符
/pat/,$ 從被pat匹配到的字符到行尾
查找
/PATTERN:從當前光標所在處向文件尾部查找;
?PATTERN:從當前光標所在處向文件首部查找;
n:與命令相同方向翻頁
N:與命令相反方向翻頁
查找並替換
s:在擴展模式下完成查找替換操作
格式:s/要查找的內容/替換爲的內容/修飾符
要查找的內容:可使用正則表達式編寫的模式
替換爲的內容:不能使用模式,但可以使用\1,\2...等後向引用符號;還可以使用"&"引用前面查找時查找到的整個內容
修飾符:
i:忽略大小寫;
g:全局替換;默認情況下,每一行只替換第一次出現
gc:全局替換,每次替換前詢問
查找替換中的分隔符/可替換爲其他字符,例如
s@/etc@/var@g
s#/boot#/#i
撤銷更改
u:撤銷最近的更改
#u撤銷之前多次更改
U撤銷光標落在這行後所有此行的更改
按Ctrl-r重做最後的“撤銷”更改
.重複前一個操作
n.重複前一個操作n次
vim的寄存器
有26個命名寄存器和1個無命名寄存器,常存放不同的剪貼板內容,可以不同會話間共享
用a,b,...z表示,用"寄存器表示,放在數字和命令之間
如:3"tyy 表示複製3行到t寄存器中
"tp 表示將t寄存器內容粘貼
未指定,將使用無命名寄存器
有10個數字寄存器,用0,1,...,表示。0存放最近複製內容,1存放最近刪除內容。當新的文本變更和刪除時,1轉存到2,2轉存到3,一次類推。數字寄存器不能在不同會話間共享。
編輯二進制文件
以二進制方式打開文件
vim -b binaryfile
擴展命令模式下,利用xxd命令轉換爲可讀的十六進制
:%!xxd
編輯二進制文件
擴展命令模式下,利用xxd命令轉換回二進制
:%!xxd -r
可視化模式
允許選擇的文本塊
v面向字符
V面向行
ctrl -v 面向塊
可視化鍵可用於與移動鍵結合使用:
突出顯示的文字可以被刪除,複製,變更,過濾,搜索/替換等
多文件模式
vim file1 file2 file3...
:next下一個
:prev前一個
:first第一個
:last最後一個
:wall保存所有
:qall退出所有
:wqall保存所有並退出
使用多個“窗口”
多文件分割
vim -o |-O file1 file2 ...
-o:水平分割
-O:垂直分割
在窗口間切換:Ctrl+w,arrow
單文件窗口分割:
Ctrl+w,s:split,水平分割
Ctrl+w,v:vertical,垂直分割
Ctrl+w,q:取消相鄰窗口
Ctrl+w,o:取消全部窗口
:wqall 保存所有並退出
定製vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
個人:~/.vimrc
擴展模式:當前vim進程有效
1)行號
顯示:set number ,簡寫爲set nu
取消顯示:set nonumber,簡寫爲set nonu
2)括號成對匹配
匹配:set showmatch ,簡寫爲set sm
取消:set nosm
3)自動縮進
啓用:set ai
禁用:set noai
4)高亮搜索
啓用:set hlsearch
禁用:set nohlsearch
5)語法高亮
啓用:syntax on
禁用:syntax off
6)忽略字符的大小寫
啓用:set ic
不忽略:set noic
7)文件格式
啓用:fileformat=unix
不忽略:fileformat=dos
8)設置文本寬度
:set textwidth=65(vim only)
:set wrapmargin=15