vim命令使用大全

shupan001發表於2011-10-28
多行註釋:
:.,+3 s/^/#/g            註釋從當前行起的後三行(不含當前行)

vi替換命令用法詳解:

引用
:ranges/pat1/pat2/g
其中
: 這是Vi的命令執行介面。
range 是命令執行範圍的指定,可以使用百分號(%)表示所有行,使用點(.)表示當前行,使用美元符號($)表示最後一行。你還可以使用行號,例如10,20表 示第10到20行,.,$表示當前行到最後一行,.+2,$-5表示當前行後兩行直到全文的倒數第五行,等等。
s 表示其後是一個替換命令。

pat1 這是要查詢的一個正規表示式,這篇文章中有一大堆例子。

pat2 這是希望把匹配串變成的模式的正規表示式,這篇文章中有一大堆例子。
g 可選標誌,帶這個標誌表示替換將針對行中每個匹配的串進行,否則則只替換行中第一個匹配串。
----------------------------------------

vi常用操作(較全)

1)檔案操作
vi FileName 開啟檔案 FileName,並將游標置於第一行首。
vi +n FileName 開啟檔案 FileName,並將游標置於第 n 行首。
vi + FileName 開啟檔案 FileName,並將游標置於最後一行。
vi + /pattern File 開啟檔案 File,並將游標置於其中第一個於 pattern 匹配的字串處。
vi –r FileName 在上次正用 vi 編輯 FileName 發生系統崩潰後,恢復FileName。
vi File1 … Filen 開啟多個檔案,依次對之進行編輯。

:%!xxd 按十六進位制檢視當前檔案
:%!xxd -r 從十六進位制返回正常模式

:n1,n2 co n3 將 n1 行到 n2 行之間的內容拷貝到第 n3 行下。
:n1,n2 m m3 將 n1 行到 n2 行之間的內容移至第 n3 行下。
:n1,n2 d 將 n1 行到 n2 行之間的內容刪除。
:n1,n2 w filename 將 n1 行到 n2 行之間的內容儲存到檔案 filename 中
:n1,n2 w! Command 將檔案中n1行到n2行的內容作為 Command的輸入並執行之,
若不指定 n1、n2,則將整個檔案內容作為 Command 的輸入。
:r! Command 將命令 Command 的輸出結果放到當前行。
:nr <檔案> 把<檔案>插入到第n行
:so <檔案> 讀取<檔案>,再執行檔案裡面的命令(檔案中的命令應該都是一些ex命令)
:l1,l2w <檔案> 把第l1和第l2行之間的文字寫到<檔案>中去
:w >> <檔案> 新增到<檔案>末尾. 也可以使用行號
:e! 重新編輯當前檔案,忽略所有的修改



·(、[、{、}、]、)對應顯示
% 顯示當前(、[、{ 、}、] 、)的對應項
) 顯示對應的(
) 顯示對應的[
] 顯示對應的{


·(、[、{、}、]、)內資料選擇
daB 刪除{}及其內的內容 (在非v可視模式下)
diB 刪除{}中的內容
ab 選擇()中的內容
ib 選擇()中的內容( 不含() )

aB 選擇{}中的內容
iB 選擇{}中的內容( 不含{} )

·語法提示與自動補齊

★ <C-N><C-P> 插入模式下的單詞自動完成
★ <C-X><C-L> 行自動完成(超級有用)

·設定ctags
#ctags -f /usr/share/vim/vim63/funcs.tags -R /opt/j2sdk/src /usr/src/kernels/2.6.9-5.EL-i686

^p 自動補齊上下文已有相近項
^n 自動補齊~/.tags中的相近函式
^[ 顯示~/.tags中的游標下的函式的原型,
按^t退出函式
:pta 函式名 預覽視窗快速開啟相應函式所在檔案,並將游標定位在對應函式的開頭
K 顯示游標下的C函式的man說明手冊

·變數定位
gd 轉到游標下區域性變數的定義處
Gd 轉到游標下全域性變數的定義處


·編譯選項
:cn 命令會把你帶到下一個出錯地點,而不考慮它在什麼檔案裡。
:cc 命令會向你顯示當前錯誤的編譯器輸出資訊;
:cl 會生成一個列有專案所有錯誤的列表,以供瀏覽這些錯誤



3]游標移動
·字元
h 游標左移一個字元。
l 游標右移一個字元。

·字
w 或 W 游標右移一個字至字首。
B 或 b 游標左移一個字至字首。
E 或 e 游標右移一個字至字尾。

·句} 游標移至句尾。
( 游標移至句首。

·段) 游標移至段落開頭。
{ 游標移至段落結尾。

·行k 或 Ctrl+p 游標上移一行。
j 或 Ctrl+n 游標下移一行。
Enter 游標下移一行。
nG 游標移至第 n 行首。
n+ 游標下移 n 行。
n- 游標上移 n 行。
n$ 游標移至第 n 行尾。
0 游標移至當前行首。
$ 游標移至當前行尾。

·螢幕
H 游標移至螢幕頂行。
M 游標移至螢幕中間行。
L 游標移至螢幕最後行。
Ctrl+u 向檔案首翻半屏。
Ctrl+d 向檔案尾翻半屏。
Ctrl+f 向檔案尾翻一屏。
Ctrl+b 向檔案首翻一屏。
nz 將第 n 行滾至螢幕頂部。不指定 n 時將當前行滾至螢幕頂。

4}插入

# 在檔案中插入行號(不是顯示行號,是插入!)
★:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)

·游標
i 在游標前插入。
a 在游標後插入。

·行
I 在當前行首插入。
A 在當前行尾插入。
o 在當前行之下一新行插入。
O 在當前行之上新開一行插入。



5)替換
r 替換當前字元。
R 替換當前字元及其後的字元,直至按 ESC 鍵。
s 從當前游標位置處開始,以輸入的文字代替指定數目的字元。
S 刪除指定數目的行,並以所輸入的文字代替。

6)修改
ncw 或 nCW 修改指定數目的字元。
nCC 修改指定數目的行。
:r filename 將檔案 filename 插入在當前行之下

7)查詢替換

/<C-R><C-W> 把狹義單詞 <cword> 寫到 搜尋命令 行
/<C-R><C-A> 把廣義單詞 <cWORD> 寫到 搜尋命令 行

:g/str/s/str1/str2/g
第一個g表示對每一個包括s1的行都進行替換,
第二個g表示對每一行的所有進行替換
包括str的行所有的str1都用str2替換
:%s/f $/for$/g 將每一行尾部的“f ”(f鍵和空格鍵)替換為for
:%s/^/mv /g 在每一行的頭部新增“mv ”(mv鍵和空格鍵)

:s/fred/<c-r>a/g 替換fred成register a中的內容,呵呵


:g/<input|<form/p 顯示含<input或<form的行


# 替換一個visual區域
# 選擇一個區域,然後輸入 :s/Emacs/Vim/ 等等,vim會自動進入:模式
:'<,'>s/Emacs/Vim/g 前面的'<,'>是vim自動新增的


# 在多個文件中搜尋
:bufdo /searchstr
:argdo /searchstr




複製與剪下
xp 交換前後兩個字元的位置
ddp 上下兩行的位置交換
:g/fred/t$ 拷貝行,從fred到檔案末尾(EOF)



9)視窗操作
:vne [filename]
:sp [filename]
:S [filename]
:new [filename]
:^w + ^r 交換兩個視窗的位置
^w = 視窗等寬
:res -n 視窗高度減小n
:res +n 視窗高度增大n
:vert res -n
:vert res +n

10)DOS格式文字轉成Unix格式文字
:1,$s/^M//g

11)書籤
在閱讀和編寫大的程式檔案時,利用標記(書籤)功能定位是十分有幫助的。

將游標移到想做標記的位置。假如做一個名為“debug1”的標記,那麼使用者可在命令模式下輸入做標記的命令“mdebug1”,然後敲入Enter鍵,一個名為“debug1”的標記就做好了。
接下來使用者可以隨意將游標移到其它的位置,當在命令模式下輸入“`debug1”後,就能快速回到“debug1”的標記所在行的行首。


12)刪除操作

:%s/r//g 刪除DOS方式的回車^M
:%s= *$== 刪除行尾空白

:%s/^(.*)n1/1$/ 刪除重複行

:%s/^.{-}pdf/new.pdf/ 只是刪除第一個pdf

:%s/<!--_.{-}-->// 又是刪除多行註釋(咦?為什麼要說「又」呢?)

:g/^s*$/d 刪除所有空行
:g!/^dd/d 刪除不含字串'dd'的行
:v/^dd/d 同上 (譯釋:v == g!,就是不匹配!)

:g/str1/,/str2/d 刪除所有第一個含str1到第一個含str2之間的行


:v/./.,/./-1join 壓縮空行
:g/^$/,/./-j 壓縮空行

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 刪除直到工作快取區開始的內容
修改命令操作
r 更改當前字元
cw 修改到某個單詞的結尾位置
c3w 修改到第三個單詞的結尾位置
cb 修改到某個單詞的開始位置
cW 修改到某個以空格作為分隔符的單詞的結尾位置
cB 修改到某個以空格作為分隔符的單詞的開始位置
c7B 修改到前面7個以空格作為分隔符的單詞的開始位置
c0 修改到某行的結尾位置
c} 修改到某個語句的結尾位置
c4} 修改到第四個語句的結尾位置
c( 修改到某個語句的開始位置
c) 修改到某個段落的結尾位置
c{ 修改到某個段落的開始位置
c7{ 修改到當前段落起始位置之前的第7個段落位置
ctc 修改當前行直到下一個字元c所出現位置之間的內容
C 修改到某一行的結尾
cc 修改當前行
5cc 修改從當前行所開始的5行內容
. 重複上一次修改!


13}Set 選項設定
set all 列出所有選項設定情況。
set term 設定終端型別。
set ignorecase 在搜尋中忽略大小寫。
set list 顯示製表位(^I)和行尾標誌($)。
set number 顯示行號。
set showmode 示使用者處在什麼模式下
set report 顯示由面向行的命令修改國的行數目。
set terse 顯示簡短的警告資訊。
set warn 在轉到別的檔案時,若沒有儲存當前檔案則顯示 No write 資訊。
set autowrite 在“:n”和“:!”命令之前都自動儲存檔案
set nomagic 允許在搜尋模式中,使用前面不帶\的特殊字元。
set nowrapscan 禁止 vi 在搜尋到達檔案兩端時,又從另一端開始。
set mesg 允許 vi 顯示其他使用者用 write 寫到自己終端上的資訊。

autoindent (ai) noai 使新行自動縮排,和上(下)行的位置對齊
autoprint (ap) ap 每條命令之後都顯示出修改之處
autowrite (aw) noaw 在:n,:!命令之前都自動儲存檔案
beautify (bf) nobf 在輸入的時候忽略所有的控制字元(除了製表鍵(tab),換行(newline),進紙(formfeed))
directory= (dir=) /tmp 存放緩衝區的目錄名
edcompatible noedcompatible 在替換的時候使用類ed的用法
errorbells (eb) errorbells 出錯的時候響鈴
exrc (ex) noexrc 允許在主目錄(home)外面之外放.exrc檔案
hardtabs= (ht=) 8 設定硬製表的邊界
ignore case (ic) noic 正規式裡忽略大小寫
lisp nolisp 開啟lisp模式
list nolist 顯示所有的製表鍵和行的結尾
magic agic 可以使用更多的正規表示式
mesg mesg 允許向終端傳送訊息
number (nu) nonumber 顯示行號
open open 允許開放和視覺化
optimize (opt) optimize 優化吞吐量,列印時不發回車
paragraphs= (para=) IPLPPPQPPLIbp 設定{ & }的分界符
prompt prompt 命令模式下的輸入給出:的提示符
readonly (ro) noro 除非用!號否則不準儲存檔案
redraw noredraw 當編輯的時候重繪螢幕
remap remap 允許巨集指向其他的巨集
report= 5 如果影響的行數>這個數的話就報告
scroll 1/2 window 下卷螢幕時滾動螢幕的數目, 同樣這也是z命令輸出的行數(z 輸出2倍滾屏的大小)
sections= SHNHH HU 定義節的末尾(當使用命令[[ 和 ]] 時)
shell= (sh=) /bin/sh 預設的SHELL,如果設定了環境變數SHELL的話,就使用變數
shiftwidth= (sw=) 8 當使用移動(shift)命令時移動的字元數
showmatch (sm) nosm 顯示{, }, (, ), [, 或者 ] 的匹配情況
showmode noshowmode 顯示你處在什麼模式下面
slowopen (slow) 插入之後不要立刻更新顯示
tabstop= (ts=) 8 設定製表停止位(tabstop)的長度
taglength= (tl=) 0 重要標記的字元個數(0表示所有的字元)
tags= tag, /usr/lib/tags 定義包含標記的檔案路徑
term= 設定終端型別
terse noterse 顯示簡短的錯誤資訊
timeout (to) timeout 一秒鐘後鍵盤對映超時
ttytype= 設定終端型別
warn warn 顯示"No write since last change"資訊
window= (w=) 可視模式下視窗的行數
wrapmargin= (wm=) 0 右邊距,大於0的話最右邊的單詞將折行,留出n個空白位置
wrapscan (ws) ws 查詢到檔案尾後再重頭開始
writeany (wa) nowa 可以儲存到任意一個檔案去

14}特殊字元
^ 匹配字串位於行首。
$ 匹配字串位於行尾。
. 用在模式串中,表示任何單個字元。
在命令模式下,重複上次的命令。
* 在模式串中,表示其前字元可出現任意多次。
[] 用在模式串中,表示指定方位內字元,其中可用-表示一個字
符範圍,用^表示不在某個範圍內的字元。
ESC 從插入狀態轉換到命令狀態
^[ 功能同 ESC

15]大小寫轉換
guu 行小寫
gUU 行大寫
g~~ 行翻轉(當然指大小寫啦)

guw 字小寫(狹義字) 譯註:建議對比iw
gUw 字大寫(狹義字)
g~w 字翻轉(狹義字)

vEU 字大寫(廣義字)
vE~ 字翻轉(廣義字)

ggguG 把整個文章全部小寫(ft!bt!)

16) 跳轉足跡'. 跳到最後修改的那一行 (超級有用)(ft,怎麼又是這個評價)
`. 不僅跳到最後修改的那一行,還要定位到修改點
<C-O> 依次沿著你的跳轉記錄向回跳 (從最近的一次開始)
<C-I> 依次沿著你的跳轉記錄向前跳
:ju(mps) 列出你跳轉的足跡

17)命令歷史
:history 列出歷史命令記錄
:his c 命令列命令歷史
:his s 搜尋命令歷史
q/ 搜尋命令歷史的視窗
q 命令列命令歷史的視窗
:<C-F> 歷史命令記錄的視窗

18]暫存器
# 列出暫存器(Registers)
:reg 顯示所有當前的registers
"1p 表示引用register,1表示一個名字叫做1的register,p就是貼上(paste)命令

譯釋:
"也用來定義register
先輸入 ",表示定義register
然後輸入名字,如0~9,a~z
然後執行刪除或複製命令,如dd或y,
或者是visual模式下的d(刪除選中的部分)或y(複製選中的部分)
則被刪除或複製的部分就被存入了這個命名的register

觀察:一個特殊的register, "" ,裡面儲存了一個匿名的刪除/複製
在你執行dd或y的時候,被作用的部分被存到了""中

19}命令列
"ayy@a 把當前行作為一個Vim命令來執行
譯釋:"ayy 是定義當前行到register a,然後@a是執行register a中儲存的指令

10yy copy 當前行以下10行

11} 排序
:%!sort -u 使用sort程式排序整個檔案(用結果重寫檔案)
!1) sort -u 排序當前段落 (只能在normal模式下使用!!)
:.,+5!sort 排序當前行及以下5行

20) 列操作

:%s= [^ ]+$=&&= 複製最後一列
:%s= f+$=&&= 一樣的功能
:%s= S+$=&& ft,還是一樣

:s/(.*).*)/2"1/ 顛倒用:分割的兩個欄位

:%s(w+s+){2})str1:1str2: 處理列,替換所有在第三列中的str1

:%sw+)(.*s+)(w+)$:321: 交換第一列和最後一列 (共4列)


·.vimrc

" Use Vim settings, rather then Vi settings (much better!).
set nocompatible

"c風格的縮排
:set expandtab "不使用tab只使用空格
:set cindent shiftwidth=4

"自動縮排
:set ai


"語法
":set filetype=j***a
:set syntax=j***a

"鍵入)、] 、},顯示(、[、{
:set showmatch

"手工定義摺疊
:set foldmethod=manual


"標籤檔案位置
set tags=/usr/share/vim/vim63/funcs.tags

"在插入模式下通過按[Ctrl]N自動地將任何類、方法或者欄位名補齊
set complete+=k

" 不要用聲音煩我!
set visualbell

"歷史
:set history=50

"顯示行列位置
:set ruler

"設定字元編碼
set fileencodings=gb2312
"set encoding=euc-cn

"設定ruler
set ruler

"顯示當前命令
set showcmd

"incsearch
set incsearch

" allow backspacing over everything in insert mode
set backspace=indent,eol,start

"自動檢測檔案型別
:filetype on


"""""""""""快捷鍵定義"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if version >= 600

"查詢
"map <C-H> /

"查詢函式原型
map <C-H> yiw/^\(\s\)*\(sub\)\\|\(function\)\(\s\)*<C-r>"<CR>

"繼續查詢
map <F3> n


"使用<F10>顯示類、屬性、方法列表
map <F2> :Tlist<CR>

" 用compiler定義的編譯程式來編譯當前程式
"map <F9> :make "%"<CR>

"使用<F11>來進行php語法檢測
map <F11> :!php -l "%" <CR>

map ;w :call FormatText()<CR>

"查詢當前游標下的字
map <F4> /<C-R><C-W><CR>
endif
"""""""""""::快捷鍵定義"""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"""""""""""格式化檔案"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function FormatText()
:%s/\t/ /g "把\t換成4個空格
:%s/ *$//g "去掉行尾空格

endfunction

"""""""""""格式化檔案"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""



""""""""""顯示行尾的tab和多餘空格"""""""""""""""""""""""""""""""""""""""""""""""
set listchars=tab:>-,trail:~
set list
syntax match Trail " +$"
highlight def link Trail Todo

""""""""""::顯示行尾的tab和多餘空格"""""""""""""""""""""""""""""""""""""""""""""

function LastMod()
if line("$") > 5
let l = 5
else
let l = line("$")
endif
exe "1," . l . "/CnsProgCMTime/s/CnsProgCMTime .*/CnsProgCMTime " . strftime("%Y-%m-%d %H:%M:%S")."/e"
endfunction

"map <F5> :call LastMod()<CR>

"""""""""""自動加註釋的*星號""""""""""""""""""""""""""""""""""""""""""""""""""""
"使用如/* ... */ 的註釋時,r在插入模式下回車時插入* ;
"o 在普通模式下,使用 "o" 或 "O" 時插入*
:set formatoptions=tcro

"""""""""""::自動加註釋的*星號""""""""""""""""""""""""""""""""""""""""""""""""""



vi擴充套件的正規表示式

| 指示交替,如home|house 指匹配home或house

() 用於分組,如home|house可以寫為ho(me|use)
*可以用到()上(home|house)* 可以匹配home, homehouse,househome, homehousehomehouse

\(...\) 實際匹配的文字可以使用\1、\2等在替換命令的替換部分進行檢索

+ 可匹配正規表示式的一次或多次出現,既可以是單個字元也可以是()或\(...\)括起的內容,至少匹配一次
ho(use|me)+ 指至少是house或home不允許是空

? 指前面正規表示式的零次或一次出現,表示出現或未出現。如free?d 將匹配fred或freed除此不能匹配其他文字


{...} 定義區間表示式。區間表示式描述了表示重複次數的計數數字。 同\{...\}
{n} (home|house){2} 只能匹配homehome, homehouse, househome, househouse
{n,}
{n,m}
{,n}

編譯相關

·用編譯器來編譯 當前檔案
:!perl -c %
:!php -l % 用php來檢查錯誤
:!php -q % 用php來執行程式


·編譯當前程式為a.out並執行該./a.out
:!gcc % -o a.out && ./a.out
執行結果
old umask is %#0
new umask is %#0

·編譯錯誤資訊
:cl! 列出所有錯誤資訊的詳細列表

:cl 列出當前條錯誤資訊
:cn 列出下一條錯誤資訊
:cp 列出上一條錯誤資訊


:cnew 最新錯誤資訊條數
:cold 舊的錯誤資訊條數

:cwin 或 :copen 開啟錯誤資訊視窗
:cclose 關閉上面開啟的資訊視窗



自動補齊

CTRL-X CTRL-F 檔名
CTRL-X CTRL-L 整行
CTRL-X CTRL-D 巨集定義 (並搜尋所包含的檔案)
CTRL-X CTRL-I 當前檔案以及所包含的檔案
CTRL-X CTRL-K 詞典檔案內的單詞
CTRL-X CTRL-T 近義詞詞典檔案內的單詞
CTRL-X CTRL-] 標記
CTRL-X CTRL-V Vim 命令列



C程式設計

gd 反色顯示游標下區域性識別符號串的所有出現,並轉到第一次出現處。
gD 反色顯示游標下全域性識別符號串的所有出現,並轉到第一次出現處。

--------------------------------------------------------------------------------------

:checkpath 列出所有include的標頭檔案
--------------------------------------------------------------------------------------

[i 顯示函式定義
extern __mode_t umask (__mode_t __mask) __THROW;

--------------------------------------------------------------------------------------

[+CTRL+i 跳轉到[i所標識的函式定義處
--------------------------------------------------------------------------------------[I 列出當前檔案及包含檔案內的含有當前字元的行
--------------------------------------------------------------------------------------[d 顯示由#define所定義的識別符號的定義語句

printf(|tom);
#define tom "yaoshuyin"
--------------------------------------------------------------------------------------
CTRL+] 跳轉到游標當前位置的標籤處 (例如:一個函式的定義)。
CTRL+T 跳轉到執行 CTRL-] 命令前的地方。
:tselect 從一連串匹配的標籤中選出一個。

[/ 跳轉到註釋開始的位置。
]/ 跳轉到註釋結束的位置。

----------------------------------------------------------------

[# 返回到未閉合的 #if, #ifdef, or #else 處。
]# 前進到未閉合的 #else 或 #endif 處。

[( 返回到未閉合的 '(' 處。
)) 前進到未閉合的 ']' 處。

[{ 跳轉到最近對應的 '{' 處。
}} 跳轉到最近對應的 ']' 處。


·字符集和進位制轉換
ga 顯示游標處字元的ascii,hex,oct,...暈菜的一堆轉換

如 s 前按ga
<s> 115, Hex 73, Octal 163

列塊操作

<C-V>選中列塊
I<string><ESC> 在塊的每一行首加上string
A<string><ESC> 在塊的每一行尾加上string
C<string><ESC> 修改選中的列塊(即刪除並輸入新內容 )
c<string><ESC> 修改選中的列塊(即刪除並輸入新內容 )
> 左移Tab寬度

vimrc中的檔名及路徑

如在D:\cnscnprogrames\Vim\vim63\下編輯 vi tmp\file.j***a (即D:\cnscnprogrames\Vim\vim63\tmp\file.j***a)


expand("%") #tmp\file.j***a
expand("%:p") #D:\cnscnprogrames\Vim\vim63\tmp\file.j***a
expand("%:h") #tmp
expand("%:t") #file.j***a
expand("%:e") #j***a
expand("%:t:r") #file
expand("%:r") #tmp\file




·一個簡單編譯器(編譯、執行常見程式)
#vi ~/.vimrc

"定義F9來編譯、執行程式
map <F9> :call ProgCompileRun() <CR>

func ProgCompileRun()
"s***e the current file first
:w

"取得程式字尾名 如j***a php pl py
let ext = expand("%:e")

"編譯J***a
if ext == "j***a"
if expand("%:h") != ""
:!j***ac % && j***a -classpath expand("%:h") %:t:r
else
:!j***ac % && j***a %:t:r
endif
return
endif

"執行php
if ext == "php"
:!php %
return
endif

"編譯執行c/cc/cpp
if ext == "c" || ext == "cc" || ext == "cpp"
:!gcc % -o a.out && ./a.out
return
endif

"編譯執行perl
if ext == "pl"
:!perl -c %
return
endif

"編譯執行python
if ext == "py"
:!python %
return
endif

endfunc

REFERENCE:
hi.baidu.com/marsblog/blog/item/055638dfe2746911485403a2.html
blog.chinaunix.net/u/13229/showart_239589.html