說明:相關命令前面如沒有冒號,則表示該命令是在普通模式下執行的,否則是在命令行模式下執行(通過在普通模式下輸入冒號)
移動操作:
j 向下
k 向上
l 向右
h 向左 (如果在一行中連按兩次以上向左向右鍵,就是在浪費時間,可以用面向單詞的動作命令或是用字符查找動作命令來更快的進行移動)
$ 移動到行末
0 移動到行首
^ 移動到行首
(以上移動操作命令在前面加個g,則是在屏幕行間進行移動,如gj就是向下移動一個屏幕行)
w 移動到下個單詞開頭
W 移動到下個字串開頭(單詞包括標點符號)
b 移動到上個單詞開頭
B 移動到上個字串開頭(單詞包括標點符號)
e 移動到下個單詞末尾
E 移動到下個字串開頭(單詞包括標點符號)
nzz 跳轉到n行,並將該行顯示在屏幕正中
gg 跳到文本第一行
G 跳到文本最後一行
<ctrl+u> 屏幕向上跳轉半屏
<ctrl+d> 屏幕向下跳轉半屏
======================================================
複製刪除
1、字符操作
x 刪除所在光標字符
s 刪除字符後進入插入模式
dl 刪除所在光標字符
2、單詞操作
dw 刪除當前光標到下個單詞開頭 (word)
dW 刪除當前光標到下個單詞開頭包括標點在內
de 刪除當前光標到當前單詞末尾 (end)
dE 刪除當前光標到當前單詞末尾包括標點在內
db 刪除當前光標到前一個單詞 (before)
dB 刪除當前光標到前一個單詞包括標點在內
daw 刪除這個光標所在的單詞包括標點在內 (delete a word)
diw 刪除這個光標所在的單詞 (delete a word)
(這裏的i想成“inside”,把a想成"around"。可以使用到<>,(),{}等地方)
3、行操作
dd 刪除行 (操作符命令連續調用兩次作用於當前行)
D 刪除當前光標位置到行尾
d0 刪除當前光標位置到行首
C 刪除當前光標位置到行尾,並進入插入模式
S 刪除行首到行尾的字符,並進入插入模式
df{char} 刪除到查找的那個字符位置
dt{char} 刪除到查找的那個字符之前
注:學會把d{motion}操作符與查找動作結合在一起使用
J 將當前行與下一行連接在一起
4、段落操作
dap 刪除當前段落
5、文件操作
dgg 刪除當前行上面的所有內容
dG 刪除當前行下面的所有內容
上述命令相應的將d換成c,除完成相同操作外,還會進入插入模式,如
cw 刪除當前光標到一個單詞開頭並進入插入模式
上述命令相應的將d換成y,則是進行相應的複製操作,如
yw 複製當前光標到下一個單詞開頭
6、黏貼操作
p 在當前光標的後面進行黏貼
x、s、d、c、y命令都會覆蓋無名寄存器中的內容,無論哪一種情況,都可以通過加”{register}前綴來指定另外一個寄存器("a-"z),("A-"Z)大寫的寄存器可以進行拼接
y命令還會複製到寄存器0中
<c-r>{register} 在插入模式下,將寄存器的文本拆入到光標之前
外部程序與vim之前進行復制黏貼,可使用"+寄存器(前提是vim已經集成了系統剪貼板)
如果沒有的話,則在命令行模式下,執行:set paste(不這樣操作的話,直接進行黏貼,則黏貼的文本,每行都會增加縮進) ; 在結束黏貼後,在命令行執行:set paste!退出該模式
======================================================
模式切換(默認在普通模式)
1、插入模式
i 進入插入模式
a 在該字符後面插入
o 在該行下面插入
O 在該行上面插入
A 移動到行末並進入插入模式
I 移動到行首進入插入
2、替換模式
r 進入到替換模式,允許替換一個字符,之後回到普通模式
R 進入到替換模式
gr gR 進入到虛擬替換模式,按屏幕顯示的寬度來替換字符,如一個製表符當8個空格處理
如想畫一條橫線分隔,可以快速複製黏貼一行副本,然後再用Vr-進行替換
3、普通模式
<Esc> 切換到普通模式
<c+[> 切換到普通模式
<c+o> 切換到插入-普通模式:能執行一次普通模式命令,隨即返回插入模式,如<c+o>zz
4、可視模式
v 激活面向字符的可視模式 (該命令可跟上述w、e、b、aw、ap等,也可以直接通過hjkl來控制選擇,結束選擇後,可用y、d、c、>、r等進行復制、刪除、修改、縮進、替換操作), 如果已在可視模式了,按v則退出可視模式
V 激活面向行的可視模式
gv 重選上次高亮選區
o 當進行選擇後,發現開頭位置不對,可通過該命令跳到開頭,然後再重新進行選擇操作
<ctrl+v> 激活面向列的可視模式
列模式方便多行在同位置插入、刪除、縮進、替換等操作, 如I、A命令在所選列的首尾插入,按ESC返回後,選中的多列都會進行相應的修改
如要在長短不一的高亮塊後面添加文本,在選中多列後,用$鍵將多列擴大到每行末尾,然後用A命令進行插入即可
======================================================
查找替換
1、行字符查找操作
f{char} 在該行找到這個字符,並跳轉到該行處; F{char} 反向
t{char} 在改行查找這個字符,並跳到該字符前面; T{char} 反向 (該命令也可用於輔助刪除命令d)
; 重複上次的命令查找
, 跳回到上次查找的地方
2、當前文本下查找
/pattern<CR> 從當前位置跳轉到下一處匹配位置;?/pattern<CR>反向
* 正向查找當前光標所在的單詞
# 反向查找當前光標所在的單詞
n 跳至下一處匹配,保持查找方向與偏移不變
N 跳至上一處匹配,保持查找方向與偏移不變
小寫字母\c會讓查找模式忽略大小寫
大寫字母\C會強制區分大小寫
如果你想按正則表達式查找,就用模式開關\v,而如果想按原義查找文本,就用模式開關\V
用<與>符號表示單詞定界符
用字符\zs標誌着一個匹配的起始,用字符\ze界定一個匹配的結束
使查找高亮:set hls; 禁止顯示則是:set nohls
3、替換操作
s/target/replacement
:[range]s[ubstitute]/{pattern}/{string}/[flags]
pattern爲被替換的文本,string爲替換文本
flags標記如下
g:在全局範圍內執行,即可修改一行內的所有匹配,而不是第一處匹配
c:在進行替換前進行確認
n:不進行替換,只計算匹配的個數
& 重複上次操作
u 回退上次操作
如把查找域留空,將使用上次的查找模式
4、多個文件中查找和替換
vimgrep的語法如下:
:vim[grep][!] /{pattern}/[g][j]{file}...
選項g爲每處匹配創建一條記錄
選項j只更新quickfix列表,而不跳到第一處匹配
例子:
:/target
:vimgrep /<C-r>// **./* (這裏一定要用<C-r>/來黏貼查找域)
:Qargs | argdo %s//replacement/g | update
(Qargs部分見vimrc部分)
======================================================
窗口操作
:sp/sp {file} 水平分割窗口,並在新窗口中載入{file}
:vsp {file} 垂直切分當前窗口,並在新窗口中載入{file}
在窗口間切換
:<c+w>w 在窗口間循環切換
:<c+w>h/j/k/l 切換到上/下/左/右窗口
關閉窗口
:clo[se] 關閉活動窗口
:on[ly] 只保留活動窗口
調整窗口大小
//最好就讓終端支持鼠標操作,此次比較方便
:bn 遍歷緩衝區正向移動
:bp 遍歷緩衝區反向移動
======================================================
標籤頁操作
:tabnew 創建新標籤頁
:tabc[lose] 關閉當前標籤頁及其中的所有窗口
:tabo[only] 只保留活動標籤頁
{n}gt 切換到編號爲{n}的標籤頁
gt 切換到下一標籤頁
gT 切換到上一標籤頁
======================================================
補全
<c+n> 使用來自補全列表的下一個匹配項
<c+p> 使用來自補全列表的前一個匹配項
<c+x>+<c+l> 整行補全
得到所要的匹配項後,繼續輸入字符即可。
======================================================
命令行操作
命令 用途
:[range]delete/d [x] 刪除指定範圍內的行[到寄存器x中]
:[range]yank/y [x] 複製
:[line]put [x] 在指定行後黏貼寄存器的內容
:[range]cope/t {address} 把範圍內的行拷貝到指定行執行
:[range]move/m {address} 移動
:[range]join 連接
:[range]normal {commands}
:[range]global/{pattern}/[cmd]
rang: {start},{end} // 默認起始行是當前光標所在行
符號 地址
1 文件的第一行;
$ 文件的最後一行
0 虛擬行,位於文件第一行上方
. 光標所在行
'm 包含位置標記m的行
'< 高亮選區的起始行
'> 高亮選區的結束行
% 整個文件
copy的簡寫是 t
如爲當前行創建一個副本,使用:t.相比較yyp是其不會使用到寄存器
normal 與.命令或宏結合時,可以花費很少的努力完成大量的重複性工作
如在所有行的後面加入;字符
1、先A; 然後 :[range]normal .
2、:[range]normal A;
如註釋多行
:[range]normal i//
global命令
:[range] g/{pattern}/[cmd]
range默認是當前文本
默認cmd命令時print打印
:g//d (將所查找的匹配行刪除)
:g/re/y a (將匹配的行保存到寄存器a)
:v/re/d (只保留匹配行,re表示表達式)
@:執行上一條命令行命令
在運行過一次@:後,就可以用@@命令來重複它
在命令行可使用tab鍵進行補全
總結:普通模式的命令適合在本地進行操作,而命令模式下的命令適合遠距離操作。
============================================
多文件工程
通過文件名打開一個文件
首先配置path選項
:set path+=./** " **通配符會匹配當前目錄下的所有子目錄
設置好路徑後使用如下命令
:find filename
============================================
跳轉操作
設置位置標記
m{a-zA-Z}命令會用選定的字母標記當前光標所在位置,小寫位置標記只在每個緩衝區裏局部可見,
而大寫位置標記則全局(多個文件間)可見;之後可通過`{a-zA-Z}跳回到所作的標記處
(一般來說,要養成在使用quickfix列表有關的命令前,如:grep、:vimgrep、及:make,設置全局標記的習慣;另外,在執行與緩衝區列表或參數列表有關的命令前,也要設置全局標記。)
`` 跳轉到當前文件中上次跳轉之前的位置
`. 跳轉到上次修改的地方
`^ 跳轉到上次退出插入模式時的位置
% 在一組開、閉括號間跳轉
(/) 跳轉到上一句/下一句開頭
{/} 跳轉到上一段/下一段開頭
H/M/L 跳轉到屏幕上方/正中間/最下方
g; 反向跳轉到上次文檔被更改的地方
g, 正向跳轉到上次文檔被更改的地方
gi 跳轉到上次退出插入模式的位置並進入插入模式
gf 跳轉到光標下的文件 ; suffixesadd選項可用於所要打開文件的擴展項
以下命令結合ctags插件
<C-]> 跳轉到光標下關鍵字的定義處
g<c-]> 如果有多處匹配,顯示各標籤供用戶選擇跳轉
:tag <keyword> 與 :tjump <keyword> 與上面兩個功能等同
<c+o> 回到跳轉列表的上一條記錄
<c+i> 前進到跳轉列表的上一條記錄
quickfix
:copen/cw 打開quickfix窗口
:cclose 關閉quickfix窗口
:cn 跳轉到下一項 (設置下快捷鍵更好)
:cp 跳轉到上一項
:cfirst 跳轉到第一個
:clast 跳轉到最後一個
:cc N 跳轉到第n項
============================================
退出保存操作
:w 把緩衝區內容寫入磁盤
:e! 把磁盤文件內容讀入緩衝區(即回滾所做修過)
:qa! 關閉所有窗口,放棄所有修改
:wa! 把所有修改保存到磁盤
:saveas <path/file> 將文件另保存
:mksession <path/project.vim> 保存工程當前的回話狀態,下車在shell下可通過命令"vim -S path/project.vim"打開工程
======================================================
其它
縮進操作
> 增大縮進
如 >G 將該行後的所有行增加縮進
< 減小縮進
= 自動縮進
大小寫
g~ 反轉大小寫
gu 轉換爲小寫
如gUaw:把當前單詞轉換成大寫
gU 轉換爲大寫
對數字進行操作
num<ctrl+a> 在數字上加num或當前不是數字會自動跳到後面的數字並進行操作
num<ctrl+x> 在數字上減num
<ctrl+r>={算術表達式}<CR> 在插入模式中計算表達式的結果
======================================================
. 重複上次操作 (如果要在幾個地方做同樣的修改,構思能被.命令重複執行的命令)
u 進行撤銷
<ctrl+r>繼續執行上次撤銷的命令
1、控制ESC鍵的使用,就可使撤銷命令作用與單詞、句子和段落
比如另起一行最快的方式是按<CR>,也可以更換用<ESC>o
2、能夠重複就別用次數 (執行、重複、回退)
3、將大小寫鍵重新映射成ctrl鍵
ga 查看字符編碼
======================================================
推薦鏈接:
http://coolshell.cn/articles/5426.html