下文出現的所有類似Ctrl+a或者n>>這種形式的命令都代表快捷鍵操作;如果是底線命令都加了:
移動光標
- 基本操作
h j k l
左 下 上 右
- 高級操作
按鍵 | 含義 |
---|---|
0 |
將光標定位到行首的位置 |
^ | 將光標定位到本行第一個不是blank字符的位置(所謂blank字符就是空格,tab,換行,回車等) |
$ |
將光標定位到行尾的位置 |
g_ | 將光標定位到本行最後一個不是blank字符的位置 |
b | 將光標定位到光標所在單詞的起始處 |
e | 將光標定位到光標所在單詞的結尾處 |
w | 將光標定位到下一個單詞的起始處(注意,是光標所在單詞的下一個單詞) |
gg |
將光標定位到文件的開頭 |
G |
將光標定位到文件的末尾 |
這裏幾乎所有的移動光標的前面都可以加數字,代表重複多少次,還有很多命令都可以這麼做,自行探索哈哈
模式分類
VIM 具有6種基本模式和5種派生模式。
基本模式:
普通模式
插入模式
可視模式
底線命令行模式
- 選擇模式
- Ex 模式
派生模式:
- 操作符等待模式
- 插入普通模式
- 插入可視模式
- 插入選擇模式
- 替換模式
常用模式
- 進入插入模式
按鍵 | 含義 |
---|---|
i |
在光標的前邊進入插入模式 |
I | 在光標所在行的行首進入插入模式 |
a | 在光標的後邊進入插入模式 |
A | 在光標所在行的行尾進入插入模式 |
o |
在光標所在行的下方插入空行並進入插入模式 |
O | 在光標所在行的上方插入空行並進入插入模式 |
s | 刪除光標指定的字符並進入插入模式 |
S | 將光標所在行清除並進入插入模式 |
- 退出插入模式(按鍵)
Esc
- 進去底線命令模式(插入模式不可進入)
:
保存退出文件
# 方式1(底線命令模式)
:wq
# 方式2(快捷鍵)
Shift+Z+Z
刪除命令
- 刪除當前光標下的字符用x
x
- 刪除更多字符
# d 操作次數 操作範圍的指令
d [n] motion
按鍵 | 含義 |
---|---|
d0 |
刪除光標從當前位置(不包含)到該行行首的所有字符 |
d^ | 刪除光標從當前位置(不包含)到本行第一個不是blank字符位置處的字符 |
d$ |
刪除從光標當前位置(包含)到該行行尾的所有字符 |
dg_ | 刪除從光標當前位置(包含)到該行行尾最後一個不是blank字符位置處的所有字符 |
db | 刪除從光標當前位置(不包含)到單詞起始處的所有字符 |
de | 刪除從光標當前位置(包含)到單詞結尾處的所有字符 |
dw | 刪除從光標當前位置(包含)到下個單詞起始處的所有字符 |
dh | 刪除光標前面一個字符 |
dl | 刪除光標指定的字符 |
dj | 刪除光標所在行以及下一行的所有字符 |
dk | 刪除光標所在行以及上一行的所有字符 |
dd |
刪除光標所在行的所有字符 |
dgg | 刪除光標所在行(包含)到文件開頭的所有字符 |
dG | 刪除光標所在行(包含)到文件末尾的所有字符 |
這上面所有的“刪除”操作並不是真的刪除,它們事實上是存放在 VIM 的一個緩衝區(VIM 把它稱之爲寄存器)中,相當於 Windows 的剪切功能。
修改命令
跟刪除完全相同,只是把d換成c,並且修改會自動進入插入模式,我們可以理解成修改 = 刪除 + 進入插入模式
。
- 例如:刪除本行並進入插入模式
cc
複製和粘貼
- 複製多個字符
# y 操作次數 操作範圍的指令
y [n] motion
- 複製當前行字符
yy
其他motion其實跟之前刪除是一樣的
- 粘貼到光標之後
p
- 粘貼到光標之前
P
注意:如果你需要粘貼的是整行爲單位,那麼 p 命令將在光標的下一行開始粘貼;如果你拷貝的是非整行的局部字符串,那麼 p 命令將在光標後開始粘貼。
撤銷與恢復
- 撤銷最後一次修改
u
- 撤銷對當前行的修改
U
- 恢復上次撤銷的內容
Ctrl+r
文件信息
- 查看文件信息,在最下面顯示當前文件和光標的信息
Ctrl+g
- 跳轉到第n行
# 方式1
nG
# 方式2
:n
- 跳轉括號
# 將光標定位到括號的其中一半上,按下光標會跳轉到另一半括號上
%
縮進
- 縮進n行
n>>
- 反縮進n行
n<<
- 反縮進n行
n<<
- 結合可視模式進行縮進
# step1:進入可視模式通過移動光標選擇
v
# step2:縮進
>
<
搜索命令
- 向後搜索(默認從當前光標開始向後搜索)
# 開啓搜索
/關鍵字
# 向後搜索
n
# 向前搜索
N
- 向前搜索(默認從當前光標開始向前搜索)
# 開啓搜索
?關鍵字
# 向前搜索
n
# 向後搜索
N
- 去除高亮
:nohl
- 十個特殊字符有特殊含義,需要先轉義再搜索
.
*
[
]
^
%
/
?
~
$
# 轉義(前面加\)
\特殊字符
替換命令
方式1:替換模式
- 替換當前光標下字符
r+替換字符
- 替換多個字符
# step1:進入替換模式,左下角出現 replace
R
# step2:替換
輸入替換字符
方式2:底線命令行模式
一般在搜索後進行替換
- 把光標所在行的第一個符合條件的字符替換
:s/被替換字符/替換字符
- 把光標所在行的所有符合條件的字符替換
:s/被替換字符/替換字符/g
- 把整個文件的所有符合條件的字符替換
:%s/被替換字符/替換字符/g
- 把文件局部(2-10行)的所有符合條件的字符替換
:2,10s/被替換字符/替換字符/g
- 把整個文件的所有符合條件的字符替換,逐步詢問替換
:%s/被替換字符/替換字符/gc
# 會逐步詢問
替換爲 替換字符 (y/n/a/q/l/^E/^Y)?
y -- 替換
n -- 不替換
a -- 替換所有
q -- 放棄替換
l -- 替換一個並進入插入模式
^E -- Ctrl + E 滾動屏幕
^Y -- Ctrl + Y 滾動屏幕
文件命令
- 文件另存爲
:w 文件名
- 強制另存爲(已經存在同名文件,覆蓋)
:w! 文件名
- 局部內容另存爲
# step1:進入可視模式通過移動光標選擇
v
# step2:另存
:w 文件名
- 合併文件(讀取文件並植入到光標的下一行位置)
:r 文件名
- 同時打開多個文件(打開文件時操作)
# 垂直並排
vi -o 文件名1 文件名2 ...
# 水平並排
vi -O 文件名1 文件名2 ...
# 切換文件
Ctrl + w + w
# 垂直並排切換
Ctrl + w + 上/下
# 水平並排切換
Ctrl + w + 左/右
# 退出保存全部,在之前的基礎上加 a
:qa
:wa
:q!a
:w!a
:wqa
執行shell命令
:! shell命令