http://blog.sina.com.cn/s/blog_492101c70100o10c.html
最近整理的vi/vim常用命令,有需要的童鞋拿去用吧
(本來是在excel中的,但是沒有地方上傳,所以就直接貼過來了。)
正常模式 | 命令行模式(需回車確認) | 其他 | |||||||||
操作 | 功能 | 同義 | 示例/變種 | 操作 | 功能 | 同義 | 示例/變種 | 操作 | 功能 | ||
移動光標 | 文件操作 | 命令行 | |||||||||
w | 到下一個單詞的第一個字符處,標點符號也算一個單詞 | :q | 不保存並退出 | set -o editor | 按<Esc>後在命令行使用指定的編輯器模式,如set -o vi | ||||||
W | 到下一段單詞的第一個字符處,標點符號不算單詞 | :q! | 並保持並強制退出 | vi file | 打開文件,並定位於第一行 | ||||||
b | 到上一個單詞的第一個字符處,標點符號也算一個單詞 | :w | 保存修改 | vi +n file | 打開文件,並定位於第n行 | ||||||
B | 到上一段單詞的第一個字符處,標點符號不算單詞 | :w! | 保存修改;若有重名則覆蓋 | vi + file | 打開文件,並定位於最後一行 | ||||||
e | 到下一個單詞的最後一個字符處,標點符號也算一個單詞 | :wq | 保存並退出 | ZZ :x |
vi -R file | 以只讀模式打開文件 | |||||
E | 到下一個單詞的最後一個字符處,標點符號不算單詞 | :m,nw file | 把m行到n行寫入一個文件 | :1,10w tmp | vi -r file | 打開上次vi時系統崩潰的文件。 | |||||
h | 向左 | :e file | 讀入文件;若不存在則創建 | vi *.txt | 打開多個文件(多文件編輯) | ||||||
l | 向右 | <SP> | :e! | 丟棄修改,並重新載入文件 | 多文件編輯 | ||||||
j | 向下 | 文本編輯 | :n | 打開下一個文件 | |||||||
k | 向上 | :%!xxd | 以十六進制查看 | :e# | 打開上一個文件 | ||||||
0 | 到行首 | :%!xxd -r | 從十六進制返回 | <C-S-6> | 打開上一個文件 | ||||||
^ | 到行內非空格的第一個字符 | :n1,n2 co n3 | 將n1行到n2行之間的內容拷貝到第n3 行下。 | :argdo %s/pat1/pat2/ge | update | 在所有打開的文件中把str1替換成str2 | ||||||
$ | 到行尾 | :n1,n2 m n3 | 將n1行到n2行之間的內容移動到第n3 行下。 | 列模式 | |||||||
+ | 到下一行的非空白處 | <CR> | :r! cmd | 將cmd的輸出插入到當前行 | :r! date :r! cat tmp |
<C-v> | 切換到列模式 | ||||
- | 到上一行的非空白處 | :nr | <Esc> | 退出列模式 | |||||||
) | 到下一句首 | :set cursorline | 高亮當前行 | nk,nl.. | |||||||
( | 到上一句首 | :set cursorcolumn | 高亮當前列 | c,I,a,d.. | |||||||
} | 到下一段首 | 替換 | 宏操作 | ||||||||
{ | 到上一段首 | :s/pat1/pat2 | 用pat2替換當前行中與pat1匹配的每個內容,需要確認 | 1.使用命令qa(其中的a爲寄存器名,可自由指定),將結果保存至寄存器a中,其中a可爲從a到z的任意字母 2. 輸入需要執行的命令 3. 鍵入q,結束操作的錄製 4. 輸入@a,這裏的a爲第一步中指定的寄存器名,執行先前錄製的操作,我們可以在@a前加數字,例如4@a等。 |
|||||||
]] | 到下一個章節/函數 | :%s/pat1/pat2 | 用pat2替換整個文件中與pat1匹配的每個內容 | ||||||||
[[ | 到上一個章節/函數 | :s/pat1/pat2/g | 用pat2替換當前行中與pat1匹配的每個內容,不需要確認 | ||||||||
nG | 到第n行 | :n | 1G | :%s/pat1/pat2/g | 用pat2替換整個文件中與pat1匹配的每個內容,不需要確認 | ||||||
gg | 到第一行 | 1G :1 |
:m,ns/pat1/pat2/g | 用pat2替換m行到n行中與pat1匹配的每個內容,不需要確認 | 其他 | ||||||
G | 到文檔底部 | :m,ns/^/#/g | 在m行到n行的行首添加字符# | 功能 | 操作 | ||||||
<C-g> | 顯示行號等信息 | :m,ns/^#//g | 刪除m行到n行行首的字符# | 在行首插入行號 | g/^/exec"s/^/".strpart(line(".")."", 0, 4) | ||||||
mx | 用字符x標記當前位置 | mk | :g/^$/d | 刪除所有空行 | 複製m到n行的內容到寄存器a | 1. 定位到第m行並按下mk 2. 定位到第n行並按下"ay'k |
|||||
`x | 定位到字符x標記的位置 | :%s/<C-v><C-CR>//g | 刪除^M | 運行TMS result script進行TMS update | :!tmsrun -S % | ||||||
'x | 定位到字符x標記的位置行首 | :ab str1 str2 | 在鍵入str1並按<Esc>後把str1替換成str2 | 列出當前文件中所有的DNSlog | :!grep ADNS % | ||||||
'' | 定位到上一個標記位置 | 系統 | 列出當前文件中所有的REGISTER | :!cgrep -R "\[REGISTER " % |less | |||||||
·. | 定位到上一次修改點 | :h cmd | 查看cmd的幫助 | ||||||||
‘. | 定位到上一次修改行 | :!cmd | 執行命令cmd | :!sort | |||||||
TAB | :sh | 打開shell並運行命令,exit返回 | |||||||||
<< | 當前行左移一個TAB | n<< | :n | 定位到第n行 | :1 | ||||||
>> | 當前行右移一個TAB | n>> | :reg | 查看所有寄存器 | |||||||
:m,n> | m行到n行右移一個TAB | :1,10> | :set all | 查看set所有子命令 | |||||||
屏幕操作 | :set nu | 顯示行號 | |||||||||
H | 到屏幕的第一行 | :set nonu | 不顯示行號 | ||||||||
M | 到屏幕的中間行 | :set ai | 自動縮進 | ||||||||
L | 到屏幕的最後一行 | :set ic | 忽略大小寫 | ||||||||
z<CR> | 將光標所在的那一行移至屏幕頂部 | :set so=n | 總是保持上下n行 | :set so=4 | |||||||
z- | 將光標所在的那一行移至屏幕底部 | :nmap key1 key2 | 把key1映射成key2 | :nmap <F9><C-w>w | |||||||
z. | 將光標所在的那一行移至屏幕中部 | zn. | :his | 歷史命令 | |||||||
/pat/z- | 將pattern行移至屏幕底部 | /ERROR/z- | 多窗口/文件操作 | ||||||||
<C-f> | 向下滾動一屏 | :sp file | 分割出一個橫向窗口並打開文件 | ||||||||
<C-b> | 向上滾動一屏 | :vsp file | 分割出一個縱向窗口並打開文件 | ||||||||
<C-d> | 向下滾動半屏 | :S | 在另外一個窗口中打開當前文件 | ||||||||
<C-u> | 向上滾動半屏 | <C-w>w | 在所有窗口間切換 | ||||||||
<C-e> | 向下滾屏一行 | <C-w>p | 在最近兩個窗口間切換 | ||||||||
<C-y> | 向上滾屏一行 | <C-w>h | 移到左面的窗口 | ||||||||
<C-R> | 刷新屏幕 | <C-w>l | 移到右面的窗口 | ||||||||
編輯文本-插入 | <C-w>j | 移到下面的窗口 | |||||||||
a | 從當前光標所在的位置的下一個字符開始輸入 | <C-w>k | 移到上面的窗口 | ||||||||
A | 從當前行尾開始輸入 | <C-w>+ | 擴大當前窗口 | ||||||||
i | 從當前光標所在的位置開始輸入 | <C-w>- | 縮小當前窗口 | ||||||||
I | 從當前行首開始輸入 | <C-w>= | 使窗口大小一致 | ||||||||
o | 在當前行的下一行增加一個新行,並定位到新行的行首 | <C-w><C-r> | 交換兩個窗口位置 | ||||||||
O | 在當前行的上一行增加一個新行,並定位到新行的行首 | :ls | 列出vim當前打開的所有文件 | ||||||||
<C-h> | 插入模式下退格 | :b number | 在當前窗口打開ls出的指定文件 | ||||||||
<C-w> | 插入模式下刪除最後一個單詞 | :set diff | 比較用vsp打開的並列的文件 | ||||||||
<C-d> | 插入模式下將當前行向左縮進一個TAB | :q | 關閉當前窗口 | ||||||||
編輯文本-複製,粘貼 | |||||||||||
y | 複製當前字符 | :m,ny :m,y :,ny |
|||||||||
yy | 複製當前行 | nyy | |||||||||
yw | 複製光標所在位置到整個單詞結束的字符 | nyw | |||||||||
"ayy | 把當前行內容複製到a寄存器 | ||||||||||
"Ayy | 把當前行內容追加到a寄存器 | ||||||||||
p | 粘貼(複製或刪除的內容) | ||||||||||
”ap | 粘貼a寄存器中的內容 | ||||||||||
編輯文本-刪除/剪切 | |||||||||||
d | 刪除 | nd d),d(,d},d{ |
|||||||||
d← | 刪除光標前的字符 | ||||||||||
d→ | 刪除光標處的字符 | ||||||||||
d↑ | 刪除當前行以及上一行 | ||||||||||
d↓ | 刪除當前行以及下一行 | ||||||||||
d0 | 刪除至行首 | ||||||||||
d$ | 刪除至行尾 | D | |||||||||
D | 刪除至行尾 | d$ | |||||||||
dG | 刪除至文檔尾 | ||||||||||
dd | 刪除當前行 | ndd | |||||||||
ddp | 交換上下兩行 | ||||||||||
dw | 刪除至當前單詞尾 | ndw | |||||||||
“add | 刪除當前行,並把內容放到a寄存器 | ||||||||||
x | 刪除光標所在位置的字符 | nx | |||||||||
xp | 交換前後兩個字符 | ||||||||||
X | 刪除光標所在位置的前一個字符 | d← | nX | ||||||||
編輯文本-替換 | |||||||||||
r | 更改當前字符,並保持在正常模式 | ||||||||||
R | 連續替換當前光標下的字符,按<Esc>結束 | ||||||||||
c | 替換 | ||||||||||
C | 替換當前行後面的部分 | Da | |||||||||
cc | 替換當前行 | S ddO |
|||||||||
cw | 替換當前單詞 | ||||||||||
s | 替換當前字符並進入插入模式,按<Esc>結束 | ||||||||||
S | 替換當前行 | cc | |||||||||
~ | 更改當前字符的大小寫 | ||||||||||
guw | 單詞小寫 | ||||||||||
gUw | 單詞大寫 | ||||||||||
g~w | 單詞大小寫反轉 | ||||||||||
guu | 把當前行小寫 | ||||||||||
gUU | 把當前行大寫 | ||||||||||
g~~ | 把當前行大小寫反轉 | ||||||||||
J | 將當前行和前一行連接起來,並刪除因此而來的空行 | ||||||||||
編輯文本-查找 | |||||||||||
/pat | 向前查找pattern | /ERROR | |||||||||
/pat/+n | 定位到pattern後的第n行 | /ERROR/+3 | |||||||||
?pat | 向後查找pattern | ||||||||||
?pat?-n | 定位到pattern前的第n行 | ||||||||||
n | 繼續向前查找 | ||||||||||
N | 繼續向後查找 | ||||||||||
* | 向下查找當前的單詞。與n/N搭配使用。 | ||||||||||
# | 向上查找當前的單詞。與n/N搭配使用。 | ||||||||||
g* | 向下查找當前的單詞,不完全匹配。與n/N搭配使用。 | ||||||||||
g# | 向上查找當前的單詞,不完全匹配。與n/N搭配使用。 | ||||||||||
gd | 查找當前的單詞,並定位在非註釋段中第一次出現該單詞的地方 | ||||||||||
fx | 向右定位到字符x | f0 | |||||||||
Fx | 向左定位到字符x | ||||||||||
tx | 向右定位到字符x前 | ||||||||||
Tx | 向左定位到字符x後 | ||||||||||
; | 繼續向下找,與f/F結合使用 | ||||||||||
, | 繼續向上找,與f/F結合使用 | ||||||||||
” | 定位到上一個標記處,與g/*結合使用 | ||||||||||
% | 定位到匹配的括號 | d% | |||||||||
編輯文本-還原 | |||||||||||
u | 還原上次操作 | ||||||||||
U | 還原當前行 | ||||||||||
<C-r> | 恢復被u撤銷的操作 | ||||||||||
補齊 | |||||||||||
<C-n> | 插入模式下向下搜索補齊當前輸入 | ||||||||||
<C-p> | 插入模式下向上搜索補齊當前輸入 | ||||||||||
<C-x><C-l> | 補齊整行,在當前窗口中搜索 | ||||||||||
<C-x><C-f> | 自動補齊,在當前目錄下的文件名中搜索 | ||||||||||
<C-x><C-k> | 使用字典文件進行自動補齊。 前提是在~/.vimrc中進行如下設置: set dictionary+=/usr/share/dict/words |