Vim 指令

記錄一下

顯示行數
set number

隱藏行數
set nonumber

刪除一行:dd

刪除一個單詞 / 游標之後的單詞剩餘部分:dw

刪除當前字符:x

游標之後的該行部分:d$

文本刪除

dd 刪除一行

d$ 刪除以當前字符開始的一行字符

ndd 刪除以當前行開始的 n 行

dw 刪除以當前字符開始的一個字

ndw 刪除以當前字符開始的 n 個字

D 與 d$ 同義

d) 刪除到下一句的開始

d} 刪除到下一段的開始

d 回車 刪除 2 行

ndw 或 ndW 刪除游標處開始及其後的 n-1 個字符。
d0 刪至行首。
d$ 刪至行尾。
ndd 刪除當前行及其後 n-1 行。
x 或 X 刪除一個字符。
Ctrl+u 刪除輸入方式下所輸入的文本。
^R 恢復 u 的操作
J 把下一行合併到當前行尾
V 選擇一行
^V 按下 ^V 後即可進行矩形的選擇了
aw 選擇單詞
iw 內部單詞 (無空格)
as 選擇句子
is 選擇句子 (無空格)
ap 選擇段落
ip 選擇段落 (無空格)
D 刪除到行尾
x,y 刪除與複製包含高亮區

dl 刪除當前字符(與 x 命令功能相同)
d0 刪除到某一行的開始位置
d^ 刪除到某一行的第一個字符位置(不包括空格或 TAB 字符)
dw 刪除到某個單詞的結尾位置
d3w 刪除到第三個單詞的結尾位置
db 刪除到某個單詞的開始位置
dW 刪除到某個以空格作為分隔符的單詞的結尾位置
dB 刪除到某個以空格作為分隔符的單詞的開始位置
d7B 刪除到前面 7 個以空格作為分隔符的單詞的開始位置
d) 刪除到某個語句的結尾位置
d4) 刪除到第四個語句的結尾位置
d( 刪除到某個語句的開始位置
d) 刪除到某個段落的結尾位置
d{ 刪除到某個段落的開始位置
d7{ 刪除到當前段落起始位置之前的第 7 個段落位置
dd 刪除當前行
d/text 刪除從文本中出現 “text” 中所指定字樣的位置,
一直向前直到下一個該字樣所出現的位置(但不包括該字樣)之間的內容
dfc 刪除從文本中出現字符 “c” 的位置,一直向前直到下一個該字符所出現的位置(包括該字符)之間的內容
dtc 刪除當前行直到下一個字符 “c” 所出現位置之間的內容
D 刪除到某一行的結尾
d$ 刪除到某一行的結尾
5dd 刪除從當前行所開始的 5 行內容
dL 刪除直到螢幕上最後一行的內容
dH 刪除直到螢幕上第一行的內容
dG 刪除直到工作緩存區結尾的內容
d1G 刪除直到工作緩存區開始的內容

在 Vi 中移動游標
k 上
h l 左 右
j 下

^ 移動到該行第一個非空格的字符處
w 向前移動一個單詞,將符號或標點當作單詞處理
W 向前移動一個單詞,不把符號或標點當作單詞處理
b 向後移動一個單詞,把符號或標點當作單詞處理
B 向後移動一個單詞,不把符號或標點當作單詞處理
( 游標移至句首
) 游標移至句尾
{ 游標移至段落開頭
} 游標移至段落結尾
H 游標移至螢幕頂行
M 游標移至螢幕中間行
L 游標移至螢幕最後行
0 到行首
$ 到行尾
gg 到頁首
G 到頁末
行號+G 跳轉到指定行
n+ 游標下移n行
n- 游標上移n行
Ctrl+g 查詢當前行資訊和當前文件資訊

fx 向右跳到本行字符x處(x可以是任何字符)
Fx 向左跳到本行字符x處(x可以是任何字符)

tx 和fx相同,區別是跳到字符x前
Tx 和Fx相同,區別是跳到字符x後

C-b 向上滾動一屏
C-f 向下滾動一屏
C-u 向上滾動半屏
C-d 向下滾動半屏
C-y 向上滾動一行
C-e 向下滾動一行

nz 將第n行滾至螢幕頂部,不指定n時將當前行滾至螢幕頂部。
進入和退出 Vi 命令
vi filename 打開或新建文件,並將游標置於第一行首
vi +n filename 打開文件,並將游標置於第n行首
vi + filename 打開文件,並將游標置於最後一行首
vi +/pattern filename 打開文件,並將游標置於第一個與pattern匹配的串處
vi -r filename 在上次正用vi編輯時發生系統崩潰,恢復filename
vi filename … filename 打開多個文件,依次進行編輯

ZZ 退出vi並保存
:q! 退出vi,不保存
:wq 退出vi並保存
重複操作
. 重複上一次操作
自動補齊
C-n 匹配下一個關鍵字
C-p 匹配上一個關鍵字
插入
o 在游標下方新開一行並將游標置於新行行首,進入插入模式。
O 同上,在游標上方。

a 在游標之後進入插入模式。
A 同上,在游標之前。

R 進入替換模式,直到按下Esc
set xxx 設置XXX選項。
行合併
J 把下面一行合併到本行後面
Vi 中查找及替換命令
/pattern 從游標開始處向文件尾搜索pattern
?pattern 從游標開始處向文件首搜索pattern
n 在同一方向重複上一次搜索命令
N 在反方向上重複上一次搜索命令
% 查找配對的括弧
:s/p1/p2/g 將當前行中所有p1均用p2替代,若要每個替換都向用戶詢問則應該用gc選項
:n1,n2s/p1/p2/g 將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g 將文件中所有p1均用p2替換

.*[]^%~$ 在Vi中具有特殊含義,若需要查找則應該加上轉義字符”\”
查找的一些選項
設置高亮
:set hlsearch 設置高亮
:set nohlsearch 關閉高亮
:nohlsearch 關閉當前已經設置的高亮
增量查找
:set incsearch 設置增量查找
:set noincsearch 關閉增量查找
在 Vi 中刪除
x 刪除當前游標下的字符
dw 刪除游標之後的單詞剩餘部分。
d$ 刪除游標之後的該行剩餘部分。
dd 刪除當前行。

c 功能和d相同,區別在於完成刪除操作後進入INSERT MODE
cc 也是刪除當前行,然後進入INSERT MODE

更改字符
rx 將當前游標下的字符更改為x(x為任意字符)
~ 更改當前游標下的字符的大小寫

鍵盤宏操作
qcharacter 開始錄製宏,character為a到z的任意字符
q 終止錄製宏
@character 調用先前錄製的宏

恢復誤操作
u 撤銷最後執行的命令
U 修正之前對該行的操作
Ctrl+R Redo
在 Vi 中操作 Frame
c-w c-n 增加frame
c-w c-c 減少frame
c-w c-w 切換frame
c-w c-r 交換兩個frame
VIM 中的塊操作
Vim 支援多達 26 個剪貼板

選塊 先用v,C-v,V選擇一塊,然後用y複製,再用p粘貼。
yy 複製當前整行
nyy 複製當前行開始的n行內容
?nyy 將游標當前行及其下n行的內容保存到寄存器?中,其中?為一個字母,n為一個數字
?nyw 將游標當前行及其下n個詞保存到寄存器?中,其中?為一個字母,n為一個數字
?nyl 將游標當前行及其下n個字符保存到寄存器?中,其中?為一個字母,n為一個數字
?p 將寄存器?中的內容粘貼到游標位置之後。如果?是用yy複製的完整行,
則粘貼在游標所在行下面。這裡?可以是一個字母,也可以是一個數字
?P 將寄存器a中的內容粘貼到游標位置之前。如果?是用yy複製的完整行,
則粘貼在游標所在行上面。這裡?可以是一個字母,也可以是一個數字
ay[motion]
ay$ 複製游標位置到行末並保存在寄存器a中
ayft 複製游標位置到當前行第一個字母t並保存在寄存器a中
以上指令皆可去掉 a 工作,則 y,p 對未命名寄存器工作(所有 d,c,x,y 的對象都被保存在這裡)。

剪切 / 複製 / 粘貼
所有刪除的內容自動被保存,可以用 p 鍵粘貼

Vi 的選項設置
all 列出所有選項設置情況
term 設置終端類型
ignorance 在搜索中忽略大小寫
list 顯示製表位(Ctrl+I)和行尾標誌($)
number 顯示行號
report 顯示由面向行的命令修改過的數目
terse 顯示簡短的警告資訊
warn 在轉到別的文件時若沒保存當前文件則顯示NO write資訊
nomagic 允許在搜索模式中,使用前面不帶“\”的特殊字符
nowrapscan 禁止vi在搜索到達文件兩端時,又從另一端開始
mesg 允許vi顯示其他用戶用write寫到自己終端上的資訊
tips
對代碼自動格式化 gg=G

在 vi/vim 中,跳到文件首尾快捷鍵:

文件開始: shift + g

文件結束: g g

from:http://lxs647.iteye.com/blog/1245948

from:http://dsec.pku.edu.cn/~jinlong/vi/Vi.html

from:http://www.caole.net/diary/vim.html#sec-1

------ THE END ------