VIM一般分幾種模式,通過不同模式來區分輸入的到底是文字還是命令:1. Normal mode(common mode,以下簡稱 c-mode):一進入 VIM 就是處於 c-mode,只能輸入指令,不能輸入文字。這些指令可能是游標移動的指令,也可能是編輯指令或尋找替換指令。2. Insert mo ...
VIM一般分幾種模式,通過不同模式來區分輸入的到底是文字還是命令:
1. Normal mode(common mode,以下簡稱 c-mode):
一進入 VIM 就是處於 c-mode,只能輸入指令,不能輸入文字。這些指令可能是游標移動的指令,也可能是編輯指令或尋找替換指令。
2. Insert mode(i-mode):
按 i/a/o 會進入 i-mode,此時可以在編輯區輸入文字,按 Esc 會回到 c-mode。
3. Ed mode(common-line mode,e-mode):
按:進入 e-mode,VIM命令提示區(編輯區最下方)會有一個冒號:出現,可以輸入命令行命令,按 Esc 回 c-mode。
4.replace mode
按R進入替換模式,Esc返回c-mode
tips:在vim中Esc鍵需要經常使用,可以通過修改註冊表將Esc鍵和Caps鍵的功能換一下。
游標在字元間移動
k 上移
h 左移 (Backspace )
l 右移 (空格鍵 )
j 下移
游標在單詞間移動(游標可以跨行,預設一個單詞由字母,數字和下劃線組成)
E e(end) 先移動到當前單詞結尾,若已經在結尾,則移動到下一個單詞結尾
B b(begin) 倒退到當前單詞的開頭,若已經在開頭,則移動到上一個單詞開頭
W w(word) 移動到下一個單詞開頭,標點符號也算一個單詞
註意:大寫的命令僅以空格作為單詞間的分隔符,其他標點符號作為單詞的一部分。
整行移動
0 移動到當前行首
^ 移動到當前行的第一個非blank處
$ 移動到當前行行尾
+ 移動到下一行開頭(主鍵盤區shift + ”=鍵”,Enter也可以)
- 移動到上一行開頭
n| 移動到當前行的第n列
滾屏(游標跟著代碼走)
Ctrl+f(forward) 往前滾動一整屏
Ctrl+b(backward) 往回滾動一整屏
Ctrl+d(down) 往上滾動半屏
Ctrl+u(up) 往下滾動半屏
Ctrl+e 往後滾動一行
Ctrl+y 往前滾動一行
用z調整行
zt(top) 將游標所在行移動到屏幕頂端
zz 將游標所在行移動到屏幕中間
zb(bottom) 將游標所在行移動到屏幕低端
在屏幕範圍移動游標(不會滾屏)
H(hight) 將游標移動到屏幕頂端的行
M(middle) 移動到屏幕中央的行
L(low) 移動到屏幕底端的行
nH 移動到屏幕頂端往下的第n行
nL 移動到屏幕頂端往上的第n行
根據文本移動游標
% : 另一個對應的括弧,包括(, {, [
根據文本塊移動游標(編程時用得不多,編輯時使用)
文本塊也就是句子、段落、小節等
( 移動到當前句子開頭
) 移動到下一個句子開頭
{ 移動到當前這一段開頭
} 移動到下一段開頭
[[ 移動到當前這一節的開頭
]] 移動到下一節的開頭
其中,VIM以? . !等符號來標記一個句子,空白行來標記一個段落。
根據行號來移動
G 移動到文本末尾
gg 移動到文本開頭
nG 移動到第n行(同:n + enter命令一樣)
Ctrl+g VIM顯示區顯示當前行的完整信息(從根盤符一直到當前行)
tips:``兩個單反引號可以返回到使用G之前的位置,只能記住一個
插入
字元位置插入
i 在游標之前插入
I 在一行的開頭處插入
a 在游標之後插入
A 在一行的結尾處追加
o 在游標所在位置的下一行打開新行插入
O 在游標所在位置的上一行打開新行插入
r 替換游標所在處一個字元
合併行
J 將下一行內容合併到當前行,中間空一個空格
字元刪除
x 剪切游標所在處字元,不會自動跨行
X 剪切游標前一個字元
單詞刪除
dw 從游標所在字元開始刪除到下一個單詞開頭
de 刪除到本單詞末尾(標點也算一個單詞)
dE 刪除到本單詞末尾(標點不算單詞)
db 刪除到前一個單詞
dB 刪除到前一個單詞包括標點在內
行刪除
dd 剪切本行所有內容
d$ 剪切本行游標位置(含)之後的所有內容(同shift D)
d0 剪切本行游標位置(不含)之前的所有內容
搜索
fa 在游標所在行搜索下一個字元a,不跨行
* 往後匹配一個游標當前所在的單詞
# 往前匹配一個游標當前所在的單詞
/xyz 往游標下搜索xyz字元串
?xyz 往游標上搜索xyz字元串
gd 跳到該單詞定義的位置
n 下一個搜素目標
N 上一個搜索目標
:set hls 打開高亮
:set nohls 關閉高亮
標記
ma 將游標當前位置標記為a
'a 單引號加標記號,跳到標記處
複製(y)與粘貼
yw 複製從游標開始(含)到詞尾的字元
yb 複製從游標開始(不含)到詞首的字元
yy 將當前行複製到緩存區
nyy 將當前行向下n行複製到緩衝區
nyw 複製從游標開始的n個單詞(標點符號算一個單詞)
y^ 複製從游標到行首的內容(y$到行尾)
p 在游標之後粘貼剪切板里的內容
P 在游標之前粘貼剪切板里的內容
tips:含後不含前(往前不含當前游標所在字元,往後含當前游標所在字元)
另外可以給緩存區做標記,方便以後引用,需要用到雙引號:
"ayy, "byy等,使用時"ap或"bp,粘貼不同的內容。
替換
:s/old/new 用new替換當前行中首次出現的old
:s/old/new/g 用new替換行中所有的old
:n,m s/old/new/g 用new替換從n到m行里所有的old
:%s/old/new/gic 用new替換當前文件里所有的old,c為confirm
修改(c):指先刪除,再進入編輯
通過c指令後面的參數,刪除相應的內容,然後進入編輯模式修改。
C或c$ 對當前行游標後面的內容進行修改
c0或 c^ 對從游標處到當前行行首的內容進行修改
cc 或S 對當前行進行修改
cw 對游標所在字元到該單詞結束部分進行修改(先刪除再進入編輯狀態)
cfx 或cFx 對從游標到下一個字元 x 之間的文本進行修改
cFx 對從游標到上一個字元 x 之間的文本進行修改
cG 表示對當前行至文本末行內容進行修改
tips:c 命令所刪除的數據都存在緩衝區, 可以粘貼使用。
重覆
. 重覆上一次的命令
N<command> 重覆某個命令N次,esc鍵執行該組合命令,enter鍵表示游標換行。
10I*<esc>:在一行開頭輸入十個*
5o###<esc>:在下5行中每一行開頭插入###
5h:左移5次
n+:向下跳n行
n-:向上跳n行
nx:剪切從游標開始的n個字元
3dd:刪除3行
撤銷
u 撤銷上一步操作,可執行多次
U 撤銷對當前行的所有操作
visual模式
在可視化模式下,通過高亮顯示,不但可以看到將要被操作的對象,而且可以對選中的文本塊整體進行操作。
v 進入字元可視化模式,文本選擇是以字元為單位。
V 進入行可視化模式,文本選擇是以行為單位。
ctrl-V或ctrl-Q 進入塊可視化模式
gv 再次選中前一次可視化模式時選擇的文本
可視模式下:
o游標移動到塊區的對角,O移動到水平的另一邊。
vi[或vi’或vi} 選中當前游標所在的整個[]或’’或{}內的內容
va[或va’或va} 同上,而且符號本身也會被選中
viw 選中一個單詞
分屏
:sp 同一個文檔垂直分隔成兩個屏幕,可以顯示不同內容
打開/保存/退出/改變文件
:e <path/to/file> 打開一個文件
:w 保存文件
:saveas <path/to/file> 另存為 <path/to/file>
:wq 保存並退出
:q! 退出不保存
:qa! 強行退出所有的正在編輯的文件,就算別的文件有更改。
:bn 和 :bp 可以同時打開很多文件,使用這兩個命令來切換下一個或上一個文件。