vim,一個純文本(純文本信息,ASCII text)編輯器,Vi(Visual Interface) IMproved,是一個模式化的編輯器。
> vim有自帶的教程,也是linux的一個內置命令
~]# vimtutor
## 一、基本模式分類
1 編輯模式(命令模式)
2 輸入模式(插入模式)
3 末行模式(vim內置的命令行接口)
## 二、模式轉換
1 編輯模式 –> 輸入模式
快捷鍵 | 含義
——— | ——
i | insert,在光標所在處輸入
a | append,在光標所在處后方輸入
o | 在光標所在處下方新建一行并開始輸入
I | 在光標所在行的行首輸入
A | 在光標所在行的行尾輸入
O | 在光標所在行的上方新建一行并開始輸入
2 輸入模式 –> 編輯模式
鍵入ESC鍵即可
3 編輯模式 –> 末行模式(命令行模式)
鍵入:即可
4 末行模式 –> 編輯模式
鍵入ESC鍵即可
## 三、進入文件編輯界面
vim [options] [file ..]
動作 | 含義
—— | ——-
\(什么都不加) | 使用vim打開文件,并且默認將光標放在第一行行首上
+# | 打開文件后,直接讓光標處于第#行的行首
+/PATTERN | 打開文件后,直接將光標處于第一個被PATTERN匹配到的行的行首
例如:
`~]# vim +10 /etc/rc.d/init.d/functions` # vim打開文件,并且將光標自動放在第10行行首
`~]# vim + /etc/rc.d/init.d/functions` # vim打開文件,并且將光標自動放在末行行首
## 四、關閉編輯的文件
快捷鍵 | 含義
——— | ——
ZZ | 保存并退出
:q | 退出,但不保存
:q! | 強制退出,丟棄做出的修改
:wq | 保存并退出
:w /path/to/somefile | 保存至指定文件中
:x | 保存并退出
## 五、光標的跳轉
1 字符間跳轉
快捷鍵 | 含義
——— | ——
h | 光標向左跳轉一個字符
l | 光標向右跳轉一個字符
j | 光標向下跳轉一個字符
k | 光標向上跳轉一個字符
Num | 與字符跳轉快捷鍵一同使用,向指定方向跳轉字符的個數,例如10h,向左跳轉10個字符
2 單詞間跳轉
快捷鍵 | 含義
——— | ——
w | 跳轉到下一個單詞的詞首
e | 跳轉到當前或下一個單詞的詞尾
b | 跳轉到當前或前一個單詞的詞首
Num | 與單詞跳轉快捷鍵一同使用,向指定方向跳轉單詞的個數,例如10w,向后跳轉10個單詞
3 行首行尾跳轉
快捷鍵 | 含義
——— | ——
^ | 跳轉至行首的第一個非空白字符
0 | 跳轉至一行絕對的行首,Tab字符不算,如果行首有Tab鍵,則會跳到Tab鍵之后
$ | 跳轉至一行的絕對的行尾
4 行間跳轉
快捷鍵 | 含義
——— | ——
#G | 跳轉至第#行的行首
1G或gg | 跳轉至第一行行首
G | 跳轉至末行行首
5 句間跳轉
快捷鍵 | 含義
——— | ——
) | 跳轉至下一句
( | 跳轉至前一句
Num | 與句跳轉快捷鍵一同使用,向指定方向跳轉句的個數,例如10),向后跳轉10句
6 段間跳轉
快捷鍵 | 含義
——— | ——
} | 向后跳轉一個段落
{ | 向前跳轉一個段落
Num | 與段落跳轉快捷鍵一同使用,向指定方向跳轉的段落個數,例如2},向后跳轉2個段落
## 六、翻屏操作
快捷鍵 | 含義
——— | ——
Ctrl+f | 向文件尾部翻一屏
Ctrl+b | 向文件首部翻一屏
Ctrl+d | 向文件尾部翻半屏
Ctrl+u | 向文件首部翻半屏
Enter | 向文件尾部逐行移動
##七、編輯命令
1 字符編輯
快捷鍵 | 含義
——— | ——
x | 刪除光標所在處的字符
#x | 刪除光標所在處起始的#個字符
xp | 交換光標所在處及其后面的字符的位置
2 替換命令
快捷鍵 | 含義
——— | ——
r | 替換光標所在處的字符
3 刪除命令
快捷鍵 | 含義
——— | ——
d | 刪除命令,可結合光標跳轉字符,實現范圍刪除
d$ | 刪除當前光標所在處至行尾的全部字符
d^ | 刪除當前光標所在處至行首的全部字符
dw | 刪除當前光標所在處至下一個單詞的詞首的字符,支持加數字
de | 刪除當前光標所在處至下一個單詞的詞尾的字符,支持加數字
db | 刪除當前光標所在處至前一個單詞的詞首的字符,支持加數字
dd | 刪除光標所在行的整行,支持加數字
#dd | 刪除光標所在行開始往下的#行字符
4 粘貼命令
快捷鍵 | 含義
——— | ——
p | 如果緩沖區中緩沖的是整行,則將緩沖區中的內容拷貝至當前光標所在行的下方;如果緩沖區中緩沖的不是整行,則將緩沖區中的內容拷貝至當前光標所在處的后方
P | 如果緩沖區中緩沖的是整行,則將緩沖區中的內容拷貝至當前光標所在行的上方;如果緩沖區中緩沖的不是整行,則將緩沖區中的內容拷貝至當前光標所在處的前方
5 復制命令(yank,y)
快捷鍵 | 含義
——— | ——
y | 復制命令,可結合光標跳轉字符
y$ | 復制當前光標所在處至行尾的全部字符
y^ | 復制當前光標所在處至行首的全部字符
yw | 復制當前光標所在處至下一個單詞的詞首的字符,支持加數字
ye | 復制當前光標所在處至下一個單詞的詞尾的字符,支持加數字
yb | 復制當前光標所在處至前一個單詞的詞首的字符,支持加數字
yy | 復制光標所在行的整行,支持加數字
#yy | 復制光標所在行開始往下的#行字符
6 改變命令(change,c)
功能:編輯模式 –> 輸入模式,實現刪除操作的同時進入輸入模式
快捷鍵 | 含義
——— | ——
c | 刪除并切換至輸入的命令,可結合光標跳轉字符
c$ | 刪除當前光標所在處至行尾的全部字符,并轉成輸入模式
c^ | 刪除當前光標所在處至行首的全部字符,并轉成輸入模式
cw | 刪除當前光標所在處至下一個單詞的詞首的字符,并轉成輸入模式,支持加數字
ce | 刪除當前光標所在處至下一個單詞的詞尾的字符,并轉成輸入模式,支持加數字
cb | 刪除當前光標所在處至前一個單詞的詞首的字符,并轉成輸入模式,支持加數字
cc | 刪除光標所在行的整行,并轉成輸入模式,支持加數字
#cc | 刪除光標所在行開始往下的#行字符,并轉成輸入模式
## 八、其他命令
1 可視化模式
功能:像windows的文本編輯工具一樣,可以通過鼠標進行范圍選定,然后進行操作
快捷鍵 | 含義
——— | ——
v | 從光標所在字符開始,根據鼠標選定的范圍,以字符為單位進行選擇
V | 從光標所在行開始,根據鼠標所選定的范圍,以行尾單位進行選擇
> 注意:
可視化模式經常要結合編輯命令:d(刪除)、c(刪除并進入輸入模式)、 y(復制)。
2 撤銷操作 – undo
功能:對之前進行的操作進行撤銷,默認在沒有進行手動強制保存之前,可以撤銷之前的50個操作。
快捷鍵 | 含義
——— | ——
u | 逐次撤銷之前的操作
#u | 一次撤銷之前操作的#次操作
3 恢復此前的撤銷
快捷鍵 | 含義
——— | ——
Ctrl+r | 恢復此前的撤銷操作
4 重復此前的操作
快捷鍵 | 含義
——— | ——
. | 重復上一次執行的操作動作
## 九、末行模式
### 1 地址定界
:start_pos[,end_pos]
表現形式 | 含義
———— | ——
# | 指定特定的第#行,例如,:5即第5行
. | 則表示光標當前所在行
$ | 表示最后一行,例如,:.,$-1表示從當前行到倒數第2行
% | 表示全文,相當于:1,$
m,n | 指定行范圍,m為起始行,n為結束行,例如,:5,8即從第5行到第8行
m,+n | 指定行范圍,左側為起始行的編號,右側為相對左側行號的偏移量,例如,:5, +3即從第5行到第8行
/PATTERN/ | 從光標所在位置開始向后查找,找到第一個匹配PATTERN的行
/PATTERN/,$ | 從光標所在位置開始向后查找,找到所有匹配PATTERN的行
/PATTERN1/,/PATTERN2/ | 從光標所在位置開始向后查找,范圍是從第一次被PATTERN1所匹配到的行開始,至第一次被PATTERN2所匹配到的行結束之間的內容
注意:
上述各種表現形式均可同編輯命令一同使用,實現編輯操作:
操作 | 含義
—— | ——
d | 將框定范圍內的文本刪除
y | 將框定范圍內的文本復制
c | 將框定范圍內的文本修改,也就是刪除后立即進入輸入模式
w /path/to/somefile | 將框定范圍內的文本保存至某指定文件
r /path/from/somefile | 將指定的文件中的文本讀取并插入至框定位置
### 2 查找功能
表現形式 | 含義
———— | ——
/PATTERN | 從光標當前所在處向文件尾部查找能夠被當前模式匹配到的所有字符串;其中,n(下一個匹配的位置,與命令方向相同)、N(上一個匹配的位置,與命令方向相反)
?PATTERN | 從光標當前所在處向文件首部查找能夠被當前模式匹配到的所有字符串;其中,n(下一
個匹配的位置,與命令方向相同)、N(上一個匹配的位置,與命令方向相反)
### 3 查找并替換
**功能**:查找匹配到的內容,并替換為想替換的內容,默認僅替換每一行中第一次匹配到的內容
**格式**:s/要查找的內容/替換為的內容/修飾符
> 注意:
查找并替換模式使用”/”來做為每個部分的分隔符,但是如果某一部分中的字符中也出現了”/”,可以把分隔符替換為其他非常用字符,比如#、@等,使之變成:
s#要查找的內容#替換為的內容#修飾符
s@要查找的內容@替換為的內容@修飾符
其中,
**要查找的內容**:可使用正則表達式;
**替換為的內容**:不能使用正則表達式,但可以引用,例如: \1, \2的分組引用
> 如果“要查找的內容”部分在模式中使用分組符號,在“替換為的內容”中使用后向引用匹配到的內容;
如果“要查找的內容”部分在模式中沒有使用分組符號,在“替換為的內容”中則直接引用查找模式匹配到的全部文本,要使用&符號;
**修飾符**:
修飾符 | 含義
——— | ——-
i | 查找時忽略大小寫
g | 全局替換,意味著一行中如果匹配到多次,則均替換;
**示例**:
表現形式 | 含義
———— | ——
:%s/this/This/ | 從全局搜索this字串,并把每一行中第一次匹配到的字串替換為This
:%s/this/This/g | 從全局搜索this字串,并把每一個匹配到的字串都替換為This
:%s/this/This/gi | 從全局搜索this字串,并且在查找時忽略字符大小寫,并把每一個匹配到的字串都替換為This
:%s/\\/cgroup\\/systemd/\\/etc\\/sysconfig/g | 從全局查找/cgroup/systemd字串,并把每一個匹配到的字串都替換為/etc/sysconfig,其中的代表路徑的”/”需要加轉義符”\\”
:%s@/cgroup/systemd@/etc/sysconfig@g | 從全局查找/cgroup/systemd字串,并把每一個匹配到的字串都替換為/etc/sysconfig
:%s@\\<t\\([[:alpha:]]\\+\\)\\>@T\\1@g | 從全局搜索以t開頭的單詞,并把所有匹配到的單詞的t全部替換為T
:%s@\\t[[:alpha:]]\\+\\>@&er@g | 從全局搜索以t開頭的單詞,并把所有匹配到的單詞后全部加上er
**練習題**:
(1) 復制/etc/grub2.cfg文件至/tmp目錄中,用查找替換命令刪除/tmp/grub2.cfg文件中以空白字符開頭的行的行首的空白字符;
“`
~]# cp /etc/grub2.cfg /tmp/
~]# vim /tmp/grub2.cfg
末行模式下執行
方法1: :%s@^[[:space:]]\+\([^[:space:]]\+\)@\1@g
方法2: :%s@^[[:space:]]\+@@g
“`
(2) 復制/etc/rc.d/init.d/functions文件至/tmp目錄中,用查找替換命令為/tmp/functions文件的每個以空白字符開頭的行的行首加上#號。
“`
~]# cp /etc/rc.d/init.d/functions /tmp/
~]# vim /tmp/functions
末行模式下執行 :%s@^[[:space:]]@#&@g
“`
(3) 為/tmp/grub2.cfg文件的前三行的行首加#號
“`
~]# vim /tmp/grub2.cfg
在末行模式下執行 :1,3s@.*@#&@
“`
(4) 將/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替換為enabled=1,所有的gpgcheck=0替換為gpgcheck=1
“`
~]# vim /etc/yum.repos.d/CentOS-Base.repo
末行模式下執行
方法1:
:%s/enabled=0/enabled=1/g
:%s/gpgcheck=0/gpgcheck=1/g
方法2:
:%s@\(enabled\|gpgcheck\)=0@\1=1@g
“`
## 十、vim的多文件功能
### 1. 多文件
**格式**:vim FILE1 FILE2 …
**功能**:
(1) 一個vim命令編輯多個文件;
(2) 一次只能編輯一個;
(3) 需要進行向前或向后切換;
(4) 能夠實現跨文件復制;
切換命令 | 含義
———— | ——
prev | 向前切換一個文件
next | 向后切換一個文件
first | 切換至第一個
last | 切換至最后一個
**退出所有文件操作命令**
退出命令 | 含義
———— | —–
:wqall | 保存所有文件并退出
:wall | 保存所有文件
:qall | 退出所有文件
### 2. 多窗口
在使用vim打開文件時,可以通過選項設置同時打開多個窗口。
選項 | 含義
—— | ——
-o | 水平分割窗口
-O | 垂直分割窗口
切換命令(Ctrl+w)
同時按住Ctrl+w后松開,然后按方向鍵進行切換,詳情如下:
命令 | 含義
—— | ——
↑ | 向上切換文件
↓ | 向下切換文件
← | 向左切換文件
→ | 向右切換文件
s | 單個文件再做水平切割,也適用于單文件修改
v | 單個文件再做垂直切割,也適用于單文件修改
## 十一、定制vim的工作特性
在末行模式下做得設定,僅對當前vim進程有效;想要永久有效,要進行配置文件修改。
永久有效的配置文件:
(1) 全局的: /etc/vimrc
(2) 個人的: ~/.vimrc
命令 | 含義
—— | ——
:set number或:set nu | 顯示行號
:set nonumber或:set nonu | 取消顯示行號
:set showmatch或:set sm | 括號匹配高亮顯示,光標移動到括號的一邊,另一邊會高亮顯示
:set noshowmatch或:set nosm | 取消高亮顯示
:set ai | | 啟用自動縮進功能
:set noai | 取消自動縮進功能
:set hlsearch | 啟用高亮搜索
:set nohlsearch | 取消高亮搜索
:syntax on | 啟用語法高亮
:syntax off | 禁用語法高亮
:set ic | 啟用忽略大小寫功能
:set noic | 禁用忽略大小寫功能
獲取幫助:
:help [subject]
設置vim中,Tab鍵縮進空格數:
修改~/.vimrc或/etc/vimrc文件,加入:
set ts=4
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87469