vi常用命令集锦
轉載,原文地址:http://blog.csdn.net/hackbuteer1/article/details/6575232
?
vi編輯器有3種模式:命令模式、輸入模式、末行模式。掌握這三種模式十分重要:
命令模式:vi啟動后默認進入的是命令模式,從這個模式使用命令可以切換到另外兩種模式,同時無論在任何模式下只要按一下[Esc]鍵都可以返回命令模式。在命令模式中輸入字幕“i”就可以進入vi的輸入模式編輯文件。
輸入模式:在這個模式中我們可以編輯、修改、輸入等編輯工作,在編輯器最后一行顯示一個“--INSERT--”標志著vi進入了輸入模式。當我們完成修改輸入等操作的時候我們需要保存文件,這時我們需要先返回命令模式,在進入末行模式保存。
末行模式:在命令模式輸入“:”即可進入該模式,在末行模式中有好多好用的命令。
vim整理
alias vi='vim'
1)文件的打開與關閉
vi filename ? ? ? ? ?: 打開或新建文件,并將光標置于第一行行首?
vi +n filename ? ? ? : 打開文件,并將光標置于第n行行首?
vi + filename ? ? ? ?: 打開文件,并將光標置于最后一行行首?
vi +/pattern filename: 打開文件,并將光標置于第一個與pattern匹配的串處?
vi -r filename ? ? ? : 在上次正用vi編輯時發生系統崩潰,恢復filename?
vi filename...filename :打開多個文件,依次進行編輯
:e filename ? ? ? ? ?: 打開filename編輯,編輯完后可用:hide退回 之前編輯的文件
:sav filename ? ? ? ?: 將當前文件另存為filename
:w ? ? ? ? ? ? ? ? ? : 保存文件但不退出vi
:w file ? ? ? ? ? ? ?: 將文件另存為file但不退出vi
:wq或ZZ或:x ? ? ? ? ? : 保存文件并退出vi
:q! ? ? ? ? ? ? ? ? ?: 不保存文件,退出vi
:e ? ? ? ? ? ? ? ? ? : 放棄所有修改,從上次保存文件開始再編輯(重新載入文件,包含被其它編輯器修改過的)
:e! ? ? : 放棄所有修改,從上次保存文件開始再編輯
:hide ? ? ? ? ? ? ? ?: 隱藏當前編輯的文件,回到上一次編輯的文件(在打開多文件時有效)
:b 2 ? ? ? ? ? ? ? ? : 在當前窗口切換到第二個打開的文件
^w^w ? ? ? ? ? ? ? ? : 多窗口切換
2)光標控制與屏幕調整
h或^h ? ? ? ? ?: 將光標向左移一個字符
j或^j或^n ? ? ?: 將光標向下移一行
k或^p ? ? ? ? ?: 將光標向上移一行
l或空格 ? ? ? ?: 將光標向右移一個字符
0或| ? ? ? ? ? : 將光標移到當前行的第一列
n| ? ? ? ? ? ? : 將光標移到當前行的第n列
^ ? ? ? ? ? ? ?: 將光標移到當前行的第一個非空字符
$ ? ? ? ? ? ? ?: 將光標移到當前行的最后一個字符
n$ ? ? ? ? ? ? : 將光標移到當前行下第n-1行的最后一個字符
+或return ? ? ?: 將光標移到下一行的第一個字符
- ? ? ? ? ? ? ?: 將光標移到前一行的第一個非空字符
gg ? ? ? ? ? ? : 將光標移動到文件第一行
G ? ? ? ? ? ? ?: 將光標移到文件的最后一行
nG或ngg或:n ? ?: 將光標移到文件的第n行
w ? ? ? ? ? ? ?: 將光標移到下一個字的開頭
W ? ? ? ? ? ? ?: 將光標移到下一個字的開頭,忽略標點符號
b ? ? ? ? ? ? ?: 將光標移到前一個字的開頭
B ? ? ? ? ? ? ?: 將光標移到前一個字的開頭,忽略標點符號
e ? ? ? ? ? ? ?: 將光標移到下一個字的結尾
E ? ? ? ? ? ? ?: 將光標移到下一個字的結尾,忽略標點符號
L ? ? ? ? ? ? ?: 將光標移到屏幕的最后一行
M ? ? ? ? ? ? ?: 將光標移到屏幕的中間一行
H ? ? ? ? ? ? ?: 將光標移到屏幕的第一行
H ? ? ? ? ? ? ?: 將光標移動到屏幕的頂行
nH ? ? ? ? ? ? : 將光標移動到屏幕頂行下的第n行
M ? ? ? ? ? ? ?: 將光標移動到屏幕的中間
L ? ? ? ? ? ? ?: 將光標移動到屏幕的底行
nL ? ? ? ? ? ? : 將光標移動到屏幕底行上的第n行
( ? ? ? ? ? ? ?: 將光標移動到句子的開頭
) ? ? ? ? ? ? ?: 將光標移動到句子的結尾
{ ? ? ? ? ? ? ?: 將光標移動到段落的開頭
} ? ? ? ? ? ? ?: 將光標移動到段落的結尾
[[ ? ? ? ? ? ? : 將光標移動到函數(段落)開始處
]] ? ? ? ? ? ? : 將光標移動到函數(段落)結尾處
[{ ? ? ? ? ? ? : 將光標移動到塊開始處
}] ? ? ? ? ? ? : 將光標移動到塊結束處
m(a-z) ? ? ? ? : 用一個字母來標記當前位置,如用mz表示標記z
'(a-z) ? ? ? ? : 將光標移動到指定的標記,如用'z表示移動到標記z處
'' ? ? ? ? ? ? : 兩個單引號,將光標移動到最近標記的位置
`` ? ? ? ? ? ? : 兩個反引號(Tab鍵上面那個),將光標移動到光標前一次停留的位置
^e ? ? ? ? ? ? : 將屏幕上滾一行
^y ? ? ? ? ? ? : 將屏幕下滾一行
^u ? ? ? ? ? ? : 將屏幕上滾半頁
^d ? ? ? ? ? ? : 將屏幕下滾半頁
^b ? ? ? ? ? ? : 將屏幕上滾一頁
^f ? ? ? ? ? ? : 將屏幕下滾一頁
^l ? ? ? ? ? ? : 重繪屏幕
z-return ? ? ? : 將當前行置為屏幕的頂行
nz-return ? ? ?: 將當前行下的第n行置為屏幕的頂行
z. ? ? ? ? ? ? : 將當前行置為屏幕的中央
nz. ? ? ? ? ? ?: 將當前行上的第n行置為屏幕的中央
z- ? ? ? ? ? ? : 將當前行置為屏幕的底行
nz- ? ? ? ? ? ?: 將當前行上的第n行置為屏幕的底行
3)插入文本
a ? ? ? ? ? ? ?: 在光標后插入文本
A ? ? ? ? ? ? ?: 在當前行尾插入文本
i ? ? ? ? ? ? ?: 在光標前插入文本
I ? ? ? ? ? ? ?: 在當前行前插入文本
o ? ? ? ? ? ? ?: 在當前行的下邊插入新行
O ? ? ? ? ? ? ?: 在當前行的上邊插入新行
escape(Esc) ? ?: 回到命令模式
^v : 切換到visual block模式,此時通過方向鍵選中block, 再按I,然后輸入需要
? ?插入的字符,可以在選中塊行首插入字符(同理可以將I換為X刪除字符).
4)修改文本
rchar ? ? ? ? ? ? ? : 用char替換當前字符(r,即replace當前光標選中字符)
Rtext escape ? ? ? ?: 用text替換當前字符直到換下Esc鍵(R,即進入Replace模式)
stext escape ? ? ? ?: 用text代替當前字符(s,即刪除當前光標選中字符,并進入插入狀態)
S或cctext escape ? ?: 用text代替整行(S,即刪除當前光標選中行,并進入插入狀態)
cwtext escape ? ? ? : 將當前字改為text(cw,即刪除當前光標后一個字,并進入插入狀態)
Ctext escape ? ? ? ?: 將當前行余下的改為text(C,即刪除當前光標后字符直到行尾,并進入插入狀態)
cG escape ? ? ? ? ? : 修改至文件的末尾(cG,即刪除當前光標后字符直到文件結束,并進入插入狀態)
ncw或cnw ? ? ? ? ? ?: 修改指定數目的字 (cnw,即刪除當前光標后n個字符,并進入插入狀態)
nC ? ? ? ? ? ? ? ? ?: 修改指定數目的行 (nC,即刪除當前光標后字符直到行尾,并刪除之后的n-1行,并進入插入狀態)
ccursor_cmd text escape ? : 從當前位置處到光標命令位置處都改為text,如假設光標停留在u第10行,c5G text escape,
? ? ? ? ? ? ? ?即刪除第5行到第10行,并進入插入狀態,輸入text,直到escape
底行命令?
:n1,n2 co n3 ? ? ? : 將n1行到n2行之間的內容拷貝到第n3行下?
:n1,n2 m n3 ? ? ? ?: 將n1行到n2行之間的內容移至到第n3行下?
:n1,n2 d ? ? ? ? ? : 將n1行到n2行之間的內容刪除?
:!command ? ? ? ? ?: 執行shell命令command
:n1,n2 w!command ? : 將文件中n1行至n2行的內容作為command的輸入并執行command
:w!command ? ? ? ? : 將文件中的內容作為command的輸入并執行之
:r!command ? ? ? ? : 將命令command的輸出結果放到當前行
:1,10 w outfile ? ?: 保存文件第1行到第10行到outfile
:1,10 w >> outfile : 將文件第1行到第10行追加到outfile文件結尾
:r infile ? ? ? ? ?: 讀取infile到當前光標下一行
:nr infile ? ? ? ? : 讀取infile到當前光標第n行的下一行
J ? ? ? ? ?: 將下一行連接到當前行的末尾
nJ ? ? ? ? : 連接后面n行
5)刪除文本
x ? ? ? ? : 刪除光標處的字符,可以在x前加上需要刪除的字符數目
nx ? ? ? ?: 從當前光標處往后刪除n個字符
X ? ? ? ? : 刪除光標前的字符,可以在X前加上需要刪除的字符數目
nX ? ? ? ?: 從當前光標處往前刪除n個字符
dw ? ? ? ?: 刪至下一個字的開頭
ndw ? ? ? : 從當前光標處往后刪除n個字
dG ? ? ? ?: 刪除字符直到文件結束
dd ? ? ? ?: 刪除當前行
ndd ? ? ? : 從當前行開始往后刪除n行
db ? ? ? ?: 刪除光標前面的字
ndb ? ? ? : 從當前行開始往前刪除n字
:n,md ? ? : 從第n行開始刪除到第m行
d$ ? ? ? ?: 從光標處刪除到行尾
dcursor_command ? ? : 刪除至光標命令處,如dG將從當產膽行刪除至文件的末尾
dh ? ? ? ? ? ? ? ? ?: 刪除光標前一個字符
dl ? ? ? ? ? ? ? ? ?: 刪除光標選中的那個字符
dj ? ? ? ? ? ? ? ? ?: 刪除光標選中行及下一行
dk ? ? ? ? ? ? ? ? ?: 刪除光標選中行及上一行
dH ? ? ? ? ? ? ? ? ?: 從屏幕頂端刪除至光標處
dM ? ? ? ? ? ? ? ? ?: 刪除屏幕中央行于光標之間的內容
dL ? ? ? ? ? ? ? ? ?: 從光標處刪除至屏幕末尾
dk ? ? ? ? ? ? ? ? ?: 刪除光標選中行及上一行
dH ? ? ? ? ? ? ? ? ?: 從屏幕頂端刪除至光標處
^h或backspace ? ? ? : 刪除前面的字符(插入狀態下)
^w ? ? ? ? ? ? ? ? ?: 刪除前面的字(插入狀態下)
6)查找與替換
:set ic ? ? ?: 查找時忽略大小寫(ignorecase)
:set noic ? ?: 查找時對大小寫敏感
/text ? ? ? ?: 在文件中向前查找text
?text ? ? ? ?: 在文件中向后查找text
* ? ? ? ? ? ?: 在文件中向前查找當前光標選中的字
n ? ? ? ? ? ?: 在同一方向重復查找
N ? ? ? ? ? ?: 在相反方向重復查找
fchar ? ? ? ?: 在當前行向前查找char
Fchar ? ? ? ?: 在當前行向后查找char
tchar ? ? ? ?: 在當前行向前查找char,并將光標定位在text的第一個字符
Tchar ? ? ? ?: 在當前行向后查找char,并將光標定位在text的第一個字符
/\cstring ? ? ? ?: 查找STRING或string,大小寫不敏感
/jo[ha]n ? ? ? ? : 查找john或joan
/\< the ? ? ? ? ?: 查找the,theatre或then等the開頭的單詞
/the\> ? ? ? ? ? : 查找the或breathe等the結尾的單詞
/\< the\> ? ? ? ?: 查找 the(空格后緊跟the)
/fred\|joe ? ? ? : 查找fred或joe
/\<\d\d\d\d\> ? ?: 查找4個字符的單詞
/^\n\{3} ? ? ? ? : 查找連續3個空行?
:bufdo /searchstr/ ? ? ? ?: 在所有打開文件中查找
bufdo %s/some/someelse/g ?: 在所有打開文件中查找some并用someelse代替
& 重復最后的:s命令
:g/text/command ? ? ? ?: 在所有包含text的行運行command所表示的命令
:v/text/command ? ? ? ?: 在所有不包含text的行運行command所表示的命令
:g/string/d ? ? ? ? ? ?: 刪除所有包含string的行
:v/string/d ? ? ? ? ? ?: 刪除所有不包含string的行
:g/text1/s/text2/text3 ? ? ? ?: 查找包含text1的行,用text3替換text2
:v/text1/s/text2/text3 ? ? ? ?: 查找不包含text1的行,用text3替換text2
:%s/old/new/g ? ? ? ? ?: 將文件中所有old替換為new(大小寫敏感)
:%s/onward/forward/gi ?: 將文件中所有onward替換為forward(忽略大小寫)
:%s/old/new/gc ? ? ? ? : 將文件中所有old替換為new,替換前需確認
:%s/^/hello/g ? ? ? ? ?: 將文件中所有開頭替換為hello
:%s/$/Harry/g ? ? ? ? ?: 將文件中所有結尾替換為Harry
:%s/ *$//g ? ? ? ? ? ? : 刪除所有空格
:%s/Bill/Steve/g ? ? ? : 將當前文件的所有Bill替換為Steve
:%s/^M//g ? ? ? ? ? ? ?: 刪除所有Dos回車符 (^M)
:%s/^M/\r/g ? ? ? ? ? ?: 刪除所有Dos回車符轉化成標準回車符
:%s#<[^>]\+>##g ? ? ? ?: 刪除所有HTML標記只留下內容
:%s/^.?\n\1$/\1/ ? : 刪除重復行
:s/Bill/Steve/ ? ? ? ? : 將當前行第一個Bill替換為Steve
:s/Bill/Steve/g ? ? ? ?: 將當前行所有Bill替換為Steve
:m,n s/Bill/Steve/ ? ? : 在m行和n行之間,將第一個Bill替換為Steve
:m,n s/Bill/Steve/g ? ?: 在m行和n行之間,將所有Bill替換為Steve
:2,35s/old/new/g ? ? ? : 將第2行到第35行之間所有old替換為new
:5,$s/old/new/g ? ? ? : 將第5行到文件結尾之間所有old替換為new
Ctrl+a ? ? ? ? ? ? ? ? : 將光標選中的數字加1
Ctrl+x ? ? ? ? ? ? ? ? : 將光標選中的數字減1
ggVGg? ? ? ? ? ? ? ? ? : 將全文替換為回轉13位文,變換2次可以回到原文.
7)復制文本
yw ? ? ? ?: 將光標后一個字放入臨時緩沖區
nyw或ynw ?: 將光標后n個字放入臨時緩沖區
y ? ? ? ? : 將當前行及下一行的內容放入臨時緩沖區(命令模式下)
y ? ? ? ? : 將當前光標選中的內容放入臨時緩沖區(選擇模式下)
yy ? ? ? ?: 將當前行的內容放入臨時緩沖區
y$ ? ? ? ?: 將當前行光標之后的內容放入臨時緩沖區
D ? ? ? ? : 將當前行光標之后的內容剪切后放入臨時緩沖區
nyy ? ? ? : 將n行的內容放入臨時緩沖區
p ? ? ? ? : 將臨時緩沖區中的文本粘貼在當前光標所在行下
P ? ? ? ? : 將臨時緩沖區中的文本粘貼在當前光標所在行上
gh ? ? ? ?: 進入選擇模式,通過光標選擇內容,選擇完畢后按y將選擇內容刪除并放入緩沖區,并插入y,進入插入模式
gH ? ? ? ?: 進入選擇模式,通過光標選擇內容,選擇完畢后按y將選擇內容所在行刪除并放入緩沖區,并插入y,進入插入模式
gv ? ? ? ?: 進入選擇模式,通過光標選擇內容,選擇完畢后按y將選擇內容并放入緩沖區,不刪除選擇內容
寄存器操作
"(a-z)nyy ? ? ?: 復制n行放入名字為圓括號內的可命名緩沖區,省略n表示當前行
"(a-z)ndd ? ? ?: 刪除n行放入名字為圓括號內的可命名緩沖區,省略n表示當前行
"(a-z)p ? ? ? ?: 將名字為圓括號的可命名緩沖區的內容放入當前行后
"(a-z)P ? ? ? ?: 將名字為圓括號的可命名緩沖區的內容放入當前行前
8)撤消與重復
u ? ? ? ?: 撤消最后一次修改
U ? ? ? ?: 撤消當前行的所有修改
^r ? ? ? : 重新執行最近一次被撤消的操作
. ? ? ? ?: 重復最后一次操作
5. ? ? ? : 重復最后一次操作5次
, ? ? ? ?: 以相反的方向重復前面的f、F、t或T查找命令
; ? ? ? ?: 重復前面的f、F、t或T查找命令
"np ? ? ?: 取回最后第n次的刪除(緩沖區中存有一定次數的刪除內容,一般為9)
n ? ? ? ?: 重復前面的/或?查找命令
N ? ? ? ?: 以相反方向重復前面的/或?命令
9)vim中的選項
:set all ? ? ? ? ? ? : 打印所有選項
:set nooption ? ? ? ?: 關閉option選項
:set nu ? ? ? ? ? ? ?: 每行前打印行號
:set nonu ? ? ? ? ? ?: 每行前不打印行號
:set showmode ? ? ? ?: 顯示是輸入模式還是替換模式
:set ic ? ? ? ? ? ? ?: 查找時忽略大小寫(另一種設置見下文)
:set noic ? ? ? ? ? ?: 查找時不忽略大小寫
:set list ? ? ? ? ? ?: 顯示制表符(^I)和行尾符號
:set ts=4 ? ? ? ? ? ?: 為文本輸入設置tab stops
:set ws=4 ? ? ? ? ? ?: 為文本輸入縮進設置4字符
:set window=n ? ? ? ?: 設置文本窗口顯示n行
:syntax on ? ? ? ? ? : 打開語法高亮
:syntax off ? ? ? ? ?: 關閉語法高亮
:set syntax=erlang ? : 強制語法高亮,并按erlang語法顯示高亮
10)vim的狀態
:.= 打印當前行的行號
:= 打印文件中的行數
^g 顯示文件名、當前的行號、文件的總行數和文件位置的百分比
:l 使用字母"l"來顯示許多的特殊字符,如制表符和換行符
11)shell轉義命令
:!command ? ? ? : 執行shell的command命令,如:!ls
:!! ? ? ? ? ? ? : 執行前一個shell命令
:r!command ? ? ?: 讀取command命令的輸入并插入,如:r!ls會先執行ls,然后讀入內容
:w!command ? ? ?: 將當前已編輯文件作為command命令的標準輸入并執行command命令,如:w!grep all
:cd directory ? : 將當前工作目錄更改為directory所表示的目錄
:pwd ? ? ? ? ? ?: 顯示當前工作目錄
:so file ? ? ? ?: 在shell程序file中讀入和執行命令
:!pwd ? ? ? ? ? : 執行pwd命令,然后回到vi
!!pwd ? ? ? ? ? : 執行pwd命令,然后插入其輸出結果到當前文件,并替換光標所在行
:sh ? ? ? ? ? ? : 將啟動一個子shell,使用^d(ctrl+d)返回vi
^d或$exit ? ? ? : 退出臨時開啟的終端并回到vi
12)宏與縮寫
(PS:避免使用控制鍵和符號,不要使用字符K、V、g、q、v、*、=和功能鍵)
:map key command_seq ? ? ?: 定義一個鍵來運行command_seq,如:map e ea,無論什么時候都可以e移到一個字的末尾來追加文本
:map ? ? ? ? ? ? ? ? ? ? ?: 在狀態行顯示所有已定義的宏
:umap key ? ? ? ? ? ? ? ? : 刪除該鍵的宏
:ab string1 string2 ? ? ? : 定義一個縮寫,使得當插入string1時,用string2替換string1。當要插入文本時,鍵入string1然后按Esc鍵,系統就插入了string2
:ab mail mail@126.com ? ? :定義mail作為mail@126.com的縮寫
:ab ? ? ? ? ? ? ? ? ? ? ? : 顯示所有縮寫
:una string ? ? ? ? ? ? ? : 取消string的縮寫
13)排版與縮進
:set ai ? ? ? ? ? ? ?: 打開自動縮進
:set autoindent ? ? ?: 打開自動縮進
:set smartindent ? ? : 打開智能縮進
:set sw=n ? ? ? ? ? ?: 將移動寬度(縮進的大小)設置為n個字符
:set shiftwidth=4 ? ?: 將移動寬度(縮進的大小)設置為4個字符
^i(ctrl+i)或tab ? ? ?: 插入文本時,插入移動的寬度,移動寬度是事先定義好的
^t ? ? ? ? ? ? ? ? ? : 縮進一次(插入模式下)
^d ? ? ? ? ? ? ? ? ? : 取消縮進一次(插入模式下)
>> ? ? ? ? ? ? ? ? ? : 縮進一次
<< ? ? ? ? ? ? ? ? ? : 取消縮進一次
n<< ? ? ? ? ? ? ? ? ?: 使光標選中行開始后的n行都向左移動一個寬度
n>> ? ? ? ? ? ? ? ? ?: 使光標選中行開始后的n行都向右移動一個寬度,例如3>>就將接下來的三行每行都向右移動一個移動寬度
nggm>> ? ? ? ? ? ? ? : 將第n行開始的m行整體右移一個縮進
nggm<< ? ? ? ? ? ? ? : 將第n行開始的m行整體左移一個縮進
:n,m >>> ? ? ? ? ? ? : 將第n行到第m行整體右移3個縮進,一個縮進是>
:n,m << ? ? ? ? ? ? ?: 將第n行到第m行整體左移2個縮進,一個縮進是<
Vu ? ? ? ? ? ? ? ? ? : 將當前行全部字母改成小寫
VU ? ? ? ? ? ? ? ? ? : 將當前行全部字母改成大寫
~ ? ? ? ? ? ? ? ? ? ?: 反轉光標選中字母的大小寫
g~~ ? ? ? ? ? ? ? ? ?: 反轉當前行全部字母的大小寫
vEU ? ? ? ? ? ? ? ? ?: 將當前選中單詞改成大寫
vE~ ? ? ? ? ? ? ? ? ?: 反轉光標選中單詞的大小寫
ggguG ? ? ? ? ? ? ? ?: 將當前文件全部字母改成小寫
gggUG ? ? ? ? ? ? ? ?: 將當前文件全部字母改成大寫
:set ignorecase ? ? ?: 搜索時忽略大小寫
:set smartcase ? ? ? : 搜索時智能忽略,忽略一個大寫字母(如忽略首字母大寫)
:%s/\<./\u&/g ? ? ? ?: 設置文件中每個單詞首字母大寫
:%s/\<./\l&/g ? ? ? ?: 設置文件中每個單詞首字母小寫
:%s/.*/\u& ? ? ? ? ? : 設置當前行中每個單詞首字母大寫
:%s/.*/\l& ? ? ? ? ? : 設置當前行中每個單詞首字母小寫
=% ? ? ? ? ? ? ? ? ? : 將括號內的代碼縮進
1GVG= ? ? ? ? ? ? ? ?: 將整個文件縮進
Align:
:%!fmt ? ? ? ? ? ? ?: 所有行對齊
!}fmt ? ? ? ? ? ? ? : Align all lines at the current position
5!!fmt ? ? ? ? ? ? ?: Align the next 5 lines
Tabs/Windows(功能不熟悉,待研究):
:tabnew ? ? ? ? ? ? : Creates a new tab
gt ? ? ? ? ? ? ? ? ?: Show next tab
:tabfirst ? ? ? ? ? : Show first tab
:tablast ? ? ? ? ? ?: Show last tab
:tabm n(position) ? : Rearrange tabs
:tabdo %s/foo/bar/g : Execute a command in all tabs
:tab ball ? ? ? ? ? : Puts all open files in tabs
:new abc.txt ? ? ? ?: Edit abc.txt in new window
14)vim中的文件瀏覽器
:e . ? ? ? ? ? ? ?: 在整合的窗口中打開文件瀏覽器,顯示當前目錄,另一個是之前vim編輯窗口
:Sex ? ? ? ? ? ? ?: 上下分屏,打開一個文件瀏覽器,另一個是之前vim編輯窗口
:Sex! ? ? ? ? ? ? : 左右分屏,打開一個文件瀏覽器,另一個是之前vim編輯窗口
:browse e ? ? ? ? : 打開圖形界面的文件瀏覽器(貌似操作失敗,待研究)
:ls ? ? ? ? ? ? ? : 顯示當前緩沖區保存的內容
:cd .. ? ? ? ? ? ?: 切換到上一級目錄
:args ? ? ? ? ? ? : 顯示文件列表
:args *.php ? ? ? : 顯示包含.php文件列表(待研究)
:grep expression *.php ?: 返回一個和expression匹配的包含.php的文件列表
gf ? ? ? ? ? ? ? ?: 打開和光標選中的同文件的文件(在文件瀏覽器中有效)
分屏顯示:
:e filename ? ? ? ?: 在當前窗口編輯filename
:split filename ? ?: 上下分屏,并打開filename
ctrl-w up arrow ? ?: 將光標移到上一個窗口
ctrl-w ctrl-w ? ? ?: 將光標移到下一個窗口
ctrl-w_ ? ? ? ? ? ?: 縱向擴大當前窗口
ctrl-w| ? ? ? ? ? ?: 橫向擴大當前窗口
ctrl-w= ? ? ? ? ? ?: 設置所有窗口相同大小(效果不明顯,估計是面積大小相同)
10 ctrl-w+ ? ? ? ? : 增加10行到當前窗口
:vsplit file ? ? ? : 左右分屏,并打開file
:sview file ? ? ? ?: 上下分屏,并以只讀方式打開file
:hide ? ? ? ? ? ? ?: 關閉當前窗口
:nly ? ? ? ? ? ? ? : 關閉所有其它窗口
:b 2 ? ? ? ? ? ? ? : 在當前窗口打開第二個文件,#2
^w^w ? ? ? ? ? ? ? : 多窗口切換編輯焦點
自動完成:
Ctrl+n Ctrl+p ? ? ?: 補全單詞(插入模式下)
Ctrl+x Ctrl+l ? ? ?: 補全行(插入模式下)
:set dictionary=dict : 設置dict為補全字典
Ctrl+x Ctrl+k ? ? ?: 根據字典來補全
?
附件:
sudo vi + /etc/vimrc
(1)復制選定塊到緩沖區,用y;復制整行,用yy
? ? (2)剪切選定塊到緩沖區,用d;剪切整行用dd
? ? (3)粘貼緩沖區中的內容,用p
?
移動光標類命令
h :光標左移一個字符?
l :光標右移一個字符?
space:光標右移一個字符?
Backspace:光標左移一個字符?
k或Ctrl+p:光標上移一行?
j或Ctrl+n :光標下移一行?
Enter :光標下移一行?
w或W :光標右移一個字至字首?
b或B :光標左移一個字至字首?
e或E :光標右移一個字至字尾?
) :光標移至句尾?
( :光標移至句首?
}:光標移至段落開頭?
{:光標移至段落結尾?
nG:光標移至第n行首?
n+:光標下移n行?
n-:光標上移n行?
n$:光標移至第n行尾?
H :光標移至屏幕頂行?
M :光標移至屏幕中間行?
L :光標移至屏幕最后行?
0:(注意是數字零)光標移至當前行首?
$:光標移至當前行尾?
屏幕翻滾類命令?
Ctrl+u:向文件首翻半屏?
Ctrl+d:向文件尾翻半屏?
Ctrl+f:向文件尾翻一屏?
Ctrl+b;向文件首翻一屏?
nz:將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。?
插入文本類命令?
i :在光標前?
I :在當前行首?
a:光標后?
A:在當前行尾?
o:在當前行之下新開一行?
O:在當前行之上新開一行?
r:替換當前字符?
R:替換當前字符及其后的字符,直至按ESC鍵?
s:從當前光標位置處開始,以輸入的文本替代指定數目的字符?
S:刪除指定數目的行,并以所輸入文本代替之?
ncw或nCW:修改指定數目的字?
nCC:修改指定數目的行?
刪除命令?
ndw或ndW:刪除光標處開始及其后的n-1個字?
do:刪至行首?
d$:刪至行尾?
ndd:刪除當前行及其后n-1行?
x或X:刪除一個字符,x刪除光標后的,而X刪除光標前的?
Ctrl+u:刪除輸入方式下所輸入的文本?
搜索及替換命令?
/pattern:從光標開始處向文件尾搜索pattern?
?pattern:從光標開始處向文件首搜索pattern?
n:在同一方向重復上一次搜索命令?
N:在反方向上重復上一次搜索命令?
:s/p1/p2/g:將當前行中所有p1均用p2替代?
:n1,n2s/p1/p2/g:將第n1至n2行中所有p1均用p2替代?
:g/p1/s//p2/g:將文件中所有p1均用p2替換
?
在末行模式時,輸入::n,這樣輸入冒號+行號,就可以快速跳轉到第n行。
在~/.vimrc 可以設置vi顯示行號,這樣看代碼或文本非常方便
在~/.vimrc的最后一行追加:set nu
同樣,為了拷貝代碼到CSDN的需要,有必要先去掉行號再復制代碼,vi中,進入命令模式
:set nonu
總結
- 上一篇: javascript继承的实现
- 下一篇: C# 中的 sealed(密封) 关键字