:%!xxd 按十六進(jìn)制查看當(dāng)前文件
:%!xxd -r 從十六進(jìn)制返回正常模式
:n1,n2 co n3 將 n1 行到 n2 行之間的內(nèi)容拷貝到第 n3 行下。
:n1,n2 m m3 將 n1 行到 n2 行之間的內(nèi)容移至第 n3 行下。
:n1,n2 d 將 n1 行到 n2 行之間的內(nèi)容刪除。
:n1,n2 w filename 將 n1 行到 n2 行之間的內(nèi)容保存到文件 filename 中
:n1,n2 w! Command 將文件中n1行到n2行的內(nèi)容作為 Command的輸入并執(zhí)行之,
若不指定 n1、n2,則將整個(gè)文件內(nèi)容作為 Command 的輸入。
:r! Command 將命令 Command 的輸出結(jié)果放到當(dāng)前行。
:nr <文件>; 把<文件>;插入到第n行
:so <文件>; 讀取<文件>;,再執(zhí)行文件里面的命令(文件中的命令應(yīng)該都是一些ex命令)
:l1,l2w <文件>; 把第l1和第l2行之間的文本寫(xiě)到<文件>;中去
:w >;>; <文件>; 添加到<文件>;末尾. 也可以使用行號(hào)
:e! 重新編輯當(dāng)前文件,忽略所有的修改
·(、[、{、}、]、)對(duì)應(yīng)顯示
% 顯示當(dāng)前(、[、{ 、}、] 、)的對(duì)應(yīng)項(xiàng)
) 顯示對(duì)應(yīng)的(
) 顯示對(duì)應(yīng)的[
] 顯示對(duì)應(yīng)的{
·(、[、{、}、]、)內(nèi)數(shù)據(jù)選擇
daB 刪除{}及其內(nèi)的內(nèi)容 (在非v可視模式下)
diB 刪除{}中的內(nèi)容
ab 選擇()中的內(nèi)容
ib 選擇()中的內(nèi)容( 不含() )
aB 選擇{}中的內(nèi)容
iB 選擇{}中的內(nèi)容( 不含{} )
·語(yǔ)法提示與自動(dòng)補(bǔ)齊
★ ;; 插入模式下的單詞自動(dòng)完成
★ ;; 行自動(dòng)完成(超級(jí)有用)
·設(shè)置ctags
#ctags -f /usr/share/vim/vim63/funcs.tags -R /opt/j2sdk/src /usr/src/kernels/2.6.9-5.EL-i686
^p 自動(dòng)補(bǔ)齊上下文已有相近項(xiàng)
^n 自動(dòng)補(bǔ)齊~/.tags中的相近函數(shù)
^[ 顯示~/.tags中的光標(biāo)下的函數(shù)的原型,
按^t退出函數(shù)
:pta 函數(shù)名 預(yù)覽窗口快速打開(kāi)相應(yīng)函數(shù)所在文件,并將光標(biāo)定位在對(duì)應(yīng)函數(shù)的開(kāi)頭
K 顯示光標(biāo)下的C函數(shù)的man說(shuō)明手冊(cè)
·變量定位
gd 轉(zhuǎn)到光標(biāo)下局部變量的定義處
Gd 轉(zhuǎn)到光標(biāo)下全局變量的定義處
·編譯選項(xiàng)
:cn 命令會(huì)把你帶到下一個(gè)出錯(cuò)地點(diǎn),而不考慮它在什么文件里。
:cc 命令會(huì)向你顯示當(dāng)前錯(cuò)誤的編譯器輸出信息;
:cl 會(huì)生成一個(gè)列有項(xiàng)目所有錯(cuò)誤的列表,以供瀏覽這些錯(cuò)誤
3]光標(biāo)移動(dòng)
·字符
h 光標(biāo)左移一個(gè)字符。
l 光標(biāo)右移一個(gè)字符。
·字
w 或 W 光標(biāo)右移一個(gè)字至字首。
B 或 b 光標(biāo)左移一個(gè)字至字首。
E 或 e 光標(biāo)右移一個(gè)字至字尾。
·句} 光標(biāo)移至句尾。
( 光標(biāo)移至句首。
·段) 光標(biāo)移至段落開(kāi)頭。
{ 光標(biāo)移至段落結(jié)尾。
·行k 或 Ctrl+p 光標(biāo)上移一行。
j 或 Ctrl+n 光標(biāo)下移一行。
Enter 光標(biāo)下移一行。
nG 光標(biāo)移至第 n 行首。
n+ 光標(biāo)下移 n 行。
n- 光標(biāo)上移 n 行。
n$ 光標(biāo)移至第 n 行尾。
0 光標(biāo)移至當(dāng)前行首。
$ 光標(biāo)移至當(dāng)前行尾。
·屏幕
H 光標(biāo)移至屏幕頂行。
M 光標(biāo)移至屏幕中間行。
L 光標(biāo)移至屏幕最后行。
Ctrl+u 向文件首翻半屏。
Ctrl+d 向文件尾翻半屏。
Ctrl+f 向文件尾翻一屏。
Ctrl+b 向文件首翻一屏。
nz 將第 n 行滾至屏幕頂部。不指定 n 時(shí)將當(dāng)前行滾至屏幕頂。
4}插入
# 在文件中插入行號(hào)(不是顯示行號(hào),是插入!)
★:g/^/exec “s/^/”.strpart(line(”.”.” “, 0, 4)
·光標(biāo)
i 在光標(biāo)前插入。
a 在光標(biāo)后插入。
·行
I 在當(dāng)前行首插入。
A 在當(dāng)前行尾插入。
o 在當(dāng)前行之下一新行插入。
O 在當(dāng)前行之上新開(kāi)一行插入。
5)替換
r 替換當(dāng)前字符。
R 替換當(dāng)前字符及其后的字符,直至按 ESC 鍵。
s 從當(dāng)前光標(biāo)位置處開(kāi)始,以輸入的文本代替指定數(shù)目的字符。
S 刪除指定數(shù)目的行,并以所輸入的文本代替。
6)修改
ncw 或 nCW 修改指定數(shù)目的字符。
nCC 修改指定數(shù)目的行。
:r filename 將文件 filename 插入在當(dāng)前行之下
7)查找替換
/;; 把狹義單詞 ; 寫(xiě)到 搜索命令 行
/;; 把廣義單詞 ; 寫(xiě)到 搜索命令 行
:g/str/s/str1/str2/g
第一個(gè)g表示對(duì)每一個(gè)包括s1的行都進(jìn)行替換,
第二個(gè)g表示對(duì)每一行的所有進(jìn)行替換
包括str的行所有的str1都用str2替換
:%s/f $/for$/g 將每一行尾部的“f ”(f鍵和空格鍵)替換為for
:%s/^/mv /g 在每一行的頭部添加“mv ”(mv鍵和空格鍵)
:s/fred/;a/g 替換fred成register a中的內(nèi)容,呵呵
:g/
# 替換一個(gè)visual區(qū)域
# 選擇一個(gè)區(qū)域,然后輸入 :s/Emacs/Vim/ 等等,vim會(huì)自動(dòng)進(jìn)入:模式
:'<,'>;s/Emacs/Vim/g 前面的’<,'>;是vim自動(dòng)添加的
# 在多個(gè)文檔中搜索
:bufdo /searchstr
:argdo /searchstr
復(fù)制與剪切
xp 交換前后兩個(gè)字符的位置
ddp 上下兩行的位置交換
:g/fred/t$ 拷貝行,從fred到文件末尾(EOF)
9)窗口操作
:vne [filename]
:sp [filename]
:S [filename]
:new [filename]
:^w + ^r 交換兩個(gè)窗口的位置
^w = 窗口等寬
:res -n 窗口高度減小n
:res +n 窗口高度增大n
:vert res -n
:vert res +n
10)DOS格式文本轉(zhuǎn)成Unix格式文本
:1,$s/^M//g
11)書(shū)簽
在閱讀和編寫(xiě)大的程序文件時(shí),利用標(biāo)記(書(shū)簽)功能定位是十分有幫助的。
將光標(biāo)移到想做標(biāo)記的位置。假如做一個(gè)名為“debug1”的標(biāo)記,那么用戶可在命令模式下輸入做標(biāo)記的命令“mdebug1”,然后敲入回車鍵,一個(gè)名為“debug1”的標(biāo)記就做好了。
接下來(lái)用戶可以隨意將光標(biāo)移到其它的位置,當(dāng)在命令模式下輸入“`debug1”后,就能快速回到“debug1”的標(biāo)記所在行的行首。
12)刪除操作
:%s/r//g 刪除DOS方式的回車^M
:%s= *$== 刪除行尾空白
:%s/^(.*)n1/1$/ 刪除重復(fù)行
:%s/^.{-}pdf/new.pdf/ 只是刪除第一個(gè)pdf
:%s/;// 又是刪除多行注釋(咦?為什么要說(shuō)「又」呢?)
:g/^s*$/d 刪除所有空行
:g!/^dd/d 刪除不含字符串’dd’的行
:v/^dd/d 同上 (譯釋:v == g!,就是不匹配!)
:g/str1/,/str2/d 刪除所有第一個(gè)含str1到第一個(gè)含str2之間的行
:v/./.,/./-1join 壓縮空行
:g/^$/,/./-j 壓縮空行
ndw 或 ndW 刪除光標(biāo)處開(kāi)始及其后的 n-1 個(gè)字符。
d0 刪至行首。
d$ 刪至行尾。
ndd 刪除當(dāng)前行及其后 n-1 行。
x 或 X 刪除一個(gè)字符。
Ctrl+u 刪除輸入方式下所輸入的文本。
^R 恢復(fù)u的操作
J 把下一行合并到當(dāng)前行尾
V 選擇一行
^V 按下^V后即可進(jìn)行矩形的選擇了
aw 選擇單詞
iw 內(nèi)部單詞(無(wú)空格)
as 選擇句子
is 選擇句子(無(wú)空格)
ap 選擇段落
ip 選擇段落(無(wú)空格)
D 刪除到行尾
x,y 刪除與復(fù)制包含高亮區(qū)
dl 刪除當(dāng)前字符(與x命令功能相同)
d0 刪除到某一行的開(kāi)始位置
d^ 刪除到某一行的第一個(gè)字符位置(不包括空格或TAB字符)
dw 刪除到某個(gè)單詞的結(jié)尾位置
d3w 刪除到第三個(gè)單詞的結(jié)尾位置
db 刪除到某個(gè)單詞的開(kāi)始位置
dW 刪除到某個(gè)以空格作為分隔符的單詞的結(jié)尾位置
dB 刪除到某個(gè)以空格作為分隔符的單詞的開(kāi)始位置
d7B 刪除到前面7個(gè)以空格作為分隔符的單詞的開(kāi)始位置
d) 刪除到某個(gè)語(yǔ)句的結(jié)尾位置
d4) 刪除到第四個(gè)語(yǔ)句的結(jié)尾位置
d( 刪除到某個(gè)語(yǔ)句的開(kāi)始位置
d) 刪除到某個(gè)段落的結(jié)尾位置
d{ 刪除到某個(gè)段落的開(kāi)始位置
d7{ 刪除到當(dāng)前段落起始位置之前的第7個(gè)段落位置
dd 刪除當(dāng)前行
d/text 刪除從文本中出現(xiàn)“text”中所指定字樣的位置,
一直向前直到下一個(gè)該字樣所出現(xiàn)的位置(但不包括該字樣)之間的內(nèi)容
dfc 刪除從文本中出現(xiàn)字符“c”的位置,一直向前直到下一個(gè)該字符所出現(xiàn)的位置(包括該字符)之間的內(nèi)容
dtc 刪除當(dāng)前行直到下一個(gè)字符“c”所出現(xiàn)位置之間的內(nèi)容
D 刪除到某一行的結(jié)尾
d$ 刪除到某一行的結(jié)尾
5dd 刪除從當(dāng)前行所開(kāi)始的5行內(nèi)容
dL 刪除直到屏幕上最后一行的內(nèi)容
dH 刪除直到屏幕上第一行的內(nèi)容
dG 刪除直到工作緩存區(qū)結(jié)尾的內(nèi)容
d1G 刪除直到工作緩存區(qū)開(kāi)始的內(nèi)容
修改命令操作
r 更改當(dāng)前字符
cw 修改到某個(gè)單詞的結(jié)尾位置
c3w 修改到第三個(gè)單詞的結(jié)尾位置
cb 修改到某個(gè)單詞的開(kāi)始位置
cW 修改到某個(gè)以空格作為分隔符的單詞的結(jié)尾位置
cB 修改到某個(gè)以空格作為分隔符的單詞的開(kāi)始位置
c7B 修改到前面7個(gè)以空格作為分隔符的單詞的開(kāi)始位置
c0 修改到某行的結(jié)尾位置
c} 修改到某個(gè)語(yǔ)句的結(jié)尾位置
c4} 修改到第四個(gè)語(yǔ)句的結(jié)尾位置
c( 修改到某個(gè)語(yǔ)句的開(kāi)始位置
c) 修改到某個(gè)段落的結(jié)尾位置
c{ 修改到某個(gè)段落的開(kāi)始位置
c7{ 修改到當(dāng)前段落起始位置之前的第7個(gè)段落位置
ctc 修改當(dāng)前行直到下一個(gè)字符c所出現(xiàn)位置之間的內(nèi)容
C 修改到某一行的結(jié)尾
cc 修改當(dāng)前行
5cc 修改從當(dāng)前行所開(kāi)始的5行內(nèi)容
. 重復(fù)上一次修改!
13}Set 選項(xiàng)設(shè)置
set all 列出所有選項(xiàng)設(shè)置情況。
set term 設(shè)置終端類型。
set ignorecase 在搜索中忽略大小寫(xiě)。
set list 顯示制表位(^I)和行尾標(biāo)志($)。
set number 顯示行號(hào)。
set showmode 示用戶處在什么模式下
set report 顯示由面向行的命令修改國(guó)的行數(shù)目。
set terse 顯示簡(jiǎn)短的警告信息。
set warn 在轉(zhuǎn)到別的文件時(shí),若沒(méi)有保存當(dāng)前文件則顯示 No write 信息。
set autowrite 在“:n”和“:!”命令之前都自動(dòng)保存文件
set nomagic 允許在搜索模式中,使用前面不帶\的特殊字符。
set nowrapscan 禁止 vi 在搜索到達(dá)文件兩端時(shí),又從另一端開(kāi)始。
set mesg 允許 vi 顯示其他用戶用 write 寫(xiě)到自己終端上的信息。
autoindent (ai) noai 使新行自動(dòng)縮進(jìn),和上(下)行的位置對(duì)齊
autoprint (ap) ap 每條命令之后都顯示出修改之處
autowrite (aw) noaw 在:n,:!命令之前都自動(dòng)保存文件
beautify (bf) nobf 在輸入的時(shí)候忽略所有的控制字符(除了制表鍵(tab),換行(newline),進(jìn)紙(formfeed))
directory= (dir=) /tmp 存放緩沖區(qū)的目錄名
edcompatible noedcompatible 在替換的時(shí)候使用類ed的用法
errorbells (eb) errorbells 出錯(cuò)的時(shí)候響鈴
exrc (ex) noexrc 允許在主目錄(home)外面之外放.exrc文件
hardtabs= (ht=) 8 設(shè)置硬制表的邊界
ignore case (ic) noic 正規(guī)式里忽略大小寫(xiě)
lisp nolisp 打開(kāi)lisp模式
list nolist 顯示所有的制表鍵和行的結(jié)尾
magic agic 可以使用更多的正規(guī)表達(dá)式
mesg mesg 允許向終端發(fā)送消息
number (nu) nonumber 顯示行號(hào)
open open 允許開(kāi)放和可視化
optimize (opt) optimize 優(yōu)化吞吐量,打印時(shí)不發(fā)回車
paragraphs= (para=) IPLPPPQPPLIbp 設(shè)置{ & }的分界符
prompt prompt 命令模式下的輸入給出:的提示符
readonly (ro) noro 除非用!號(hào)否則不準(zhǔn)保存文件
redraw noredraw 當(dāng)編輯的時(shí)候重繪屏幕
remap remap 允許宏指向其他的宏
report= 5 如果影響的行數(shù)>;這個(gè)數(shù)的話就報(bào)告
scroll 1/2 window 下卷屏幕時(shí)滾動(dòng)屏幕的數(shù)目, 同樣這也是z命令輸出的行數(shù)(z 輸出2倍滾屏的大小)
sections= SHNHH HU 定義節(jié)的末尾(當(dāng)使用命令[[ 和 ]] 時(shí))
shell= (sh=) /bin/sh 缺省的SHELL,如果設(shè)置了環(huán)境變量SHELL的話,就使用變量
shiftwidth= (sw=) 8 當(dāng)使用移動(dòng)(shift)命令時(shí)移動(dòng)的字符數(shù)
showmatch (sm) nosm 顯示{, }, (, ), [, 或者 ] 的匹配情況
showmode noshowmode 顯示你處在什么模式下面
slowopen (slow) 插入之后不要立刻更新顯示
tabstop= (ts=) 8 設(shè)置制表停止位(tabstop)的長(zhǎng)度
taglength= (tl=) 0 重要標(biāo)記的字符個(gè)數(shù)(0表示所有的字符)
tags= tag, /usr/lib/tags 定義包含標(biāo)記的文件路徑
term= 設(shè)置終端類型
terse noterse 顯示簡(jiǎn)短的錯(cuò)誤信息
timeout (to) timeout 一秒鐘后鍵盤(pán)映射超時(shí)
ttytype= 設(shè)置終端類型
warn warn 顯示”No write since last change”信息
window= (w=) 可視模式下窗口的行數(shù)
wrapmargin= (wm=) 0 右邊距,大于0的話最右邊的單詞將折行,留出n個(gè)空白位置
wrapscan (ws) ws 查找到文件尾后再重頭開(kāi)始
writeany (wa) nowa 可以保存到任意一個(gè)文件去
14}特殊字符
^ 匹配字符串位于行首。
$ 匹配字符串位于行尾。
. 用在模式串中,表示任何單個(gè)字符。
在命令模式下,重復(fù)上次的命令。
* 在模式串中,表示其前字符可出現(xiàn)任意多次。
[] 用在模式串中,表示指定方位內(nèi)字符,其中可用-表示一個(gè)字
符范圍,用^表示不在某個(gè)范圍內(nèi)的字符。
ESC 從插入狀態(tài)轉(zhuǎn)換到命令狀態(tài)
^[ 功能同 ESC
15]大小寫(xiě)轉(zhuǎn)換
guu 行小寫(xiě)
gUU 行大寫(xiě)
g~~ 行翻轉(zhuǎn)(當(dāng)然指大小寫(xiě)啦)
guw 字小寫(xiě)(狹義字) 譯注:建議對(duì)比iw
gUw 字大寫(xiě)(狹義字)
g~w 字翻轉(zhuǎn)(狹義字)
vEU 字大寫(xiě)(廣義字)
vE~ 字翻轉(zhuǎn)(廣義字)
ggguG 把整個(gè)文章全部小寫(xiě)(ft!bt!)
16) 跳轉(zhuǎn)足跡’. 跳到最后修改的那一行 (超級(jí)有用)(ft,怎么又是這個(gè)評(píng)價(jià))
`. 不僅跳到最后修改的那一行,還要定位到修改點(diǎn)
; 依次沿著你的跳轉(zhuǎn)記錄向回跳 (從最近的一次開(kāi)始)
; 依次沿著你的跳轉(zhuǎn)記錄向前跳
:ju(mps) 列出你跳轉(zhuǎn)的足跡
17)命令歷史
:history 列出歷史命令記錄
:his c 命令行命令歷史
:his s 搜索命令歷史
q/ 搜索命令歷史的窗口
q 命令行命令歷史的窗口
:; 歷史命令記錄的窗口
18]寄存器
# 列出寄存器(Registers)
:reg 顯示所有當(dāng)前的registers
“1p 表示引用register,1表示一個(gè)名字叫做1的register,p就是粘貼(paste)命令
譯釋:
“也用來(lái)定義register
先輸入 “,表示定義register
然后輸入名字,如0~9,a~z
然后執(zhí)行刪除或復(fù)制命令,如dd或y,
或者是visual模式下的d(刪除選中的部分)或y(復(fù)制選中的部分)
則被刪除或復(fù)制的部分就被存入了這個(gè)命名的register
觀察:一個(gè)特殊的register, “” ,里面存儲(chǔ)了一個(gè)匿名的刪除/復(fù)制
在你執(zhí)行dd或y的時(shí)候,被作用的部分被存到了”"中
19}命令行
“ayy@a 把當(dāng)前行作為一個(gè)Vim命令來(lái)執(zhí)行
譯釋:”ayy 是定義當(dāng)前行到register a,然后@a是執(zhí)行register a中存儲(chǔ)的指令
10yy copy 當(dāng)前行以下10行
11} 排序
:%!sort -u 使用sort程序排序整個(gè)文件(用結(jié)果重寫(xiě)文件)
!1) sort -u 排序當(dāng)前段落 (只能在normal模式下使用!!)
:.,+5!sort 排序當(dāng)前行及以下5行
20) 列操作
:%s= [^ ]+$=&&= 復(fù)制最后一列
:%s= f+$=&&= 一樣的功能
:%s= S+$=&& ft,還是一樣
:s/(.*).*)/2″1/ 顛倒用:分割的兩個(gè)字段
:%sw+s+){2})str1:1str2: 處理列,替換所有在第三列中的str1
:%sw+)(.*s+)(w+)$:321: 交換第一列和最后一列 (共4列)
·.vimrc
” Use Vim settings, rather then Vi settings (much better!).
set nocompatible
“c風(fēng)格的縮進(jìn)
:set expandtab “不使用tab只使用空格
:set cindent shiftwidth=4
“自動(dòng)縮進(jìn)
:set ai
“語(yǔ)法
“:set filetype=java
:set syntax=java
“鍵入)、] 、},顯示(、[、{
:set showmatch
“手工定義折疊
:set foldmethod=manual
“標(biāo)簽文件位置
set tags=/usr/share/vim/vim63/funcs.tags
“在插入模式下通過(guò)按[Ctrl]N自動(dòng)地將任何類、方法或者字段名補(bǔ)齊
set complete+=k
” 不要用聲音煩我!
set visualbell
“歷史
:set history=50
“顯示行列位置
:set ruler
“設(shè)置字符編碼
set fileencodings=gb2312
“set encoding=euc-cn
“設(shè)置ruler
set ruler
“顯示當(dāng)前命令
set showcmd
“incsearch
set incsearch
” allow backspacing over everything in insert mode
set backspace=indent,eol,start
“自動(dòng)檢測(cè)文件類型
:filetype on
“”"”"”"”"”"快捷鍵定義”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”
if version >;= 600
“查找
“map ; /
“查找函數(shù)原型
map ; yiw/^\(\s\)*\(sub\)\\|\(function\)\(\s\)*;”;
“繼續(xù)查找
map ; n
“使用;顯示類、屬性、方法列表
map ; :Tlist;
” 用compiler定義的編譯程序來(lái)編譯當(dāng)前程序
“map ; :make “%”;
“使用;來(lái)進(jìn)行php語(yǔ)法檢測(cè)
map ; :!php -l “%” ;
map ;w :call FormatText();
“查找當(dāng)前光標(biāo)下的字
map ; /;;;
endif
“”"”"”"”"”"::快捷鍵定義”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”
“”"”"”"”"”"格式化文件”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”
function FormatText()
:%s/\t/ /g “把\t換成4個(gè)空格
:%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 ; :call LastMod();
“”"”"”"”"”"自動(dòng)加注釋的*星號(hào)”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"
“使用如/* … */ 的注釋時(shí),r在插入模式下回車時(shí)插入* ;
“o 在普通模式下,使用 “o” 或 “O” 時(shí)插入*
:set formatoptions=tcro
“”"”"”"”"”"::自動(dòng)加注釋的*星號(hào)”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"”"
vi擴(kuò)展的正則表達(dá)式
| 指示交替,如home|house 指匹配home或house
() 用于分組,如home|house可以寫(xiě)為ho(me|use)
*可以用到()上(home|house)* 可以匹配home, homehouse,househome, homehousehomehouse
\(…\) 實(shí)際匹配的文本可以使用\1、\2等在替換命令的替換部分進(jìn)行檢索
+ 可匹配正則表達(dá)式的一次或多次出現(xiàn),既可以是單個(gè)字符也可以是()或\(…\)括起的內(nèi)容,至少匹配一次
ho(use|me)+ 指至少是house或home不允許是空
? 指前面正則表達(dá)式的零次或一次出現(xiàn),表示出現(xiàn)或未出現(xiàn)。如free?d 將匹配fred或freed除此不能匹配其他文本
{…} 定義區(qū)間表達(dá)式。區(qū)間表達(dá)式描述了表示重復(fù)次數(shù)的計(jì)數(shù)數(shù)字。 同\{…\}
{n} (home|house){2} 只能匹配homehome, homehouse, househome, househouse
{n,}
{n,m}
{,n}
編譯相關(guān)
·用編譯器來(lái)編譯 當(dāng)前文件
:!perl -c %
:!php -l % 用php來(lái)檢查錯(cuò)誤
:!php -q % 用php來(lái)運(yùn)行程序
·編譯當(dāng)前程序?yàn)閍.out并執(zhí)行該./a.out
:!gcc % -o a.out && ./a.out
執(zhí)行結(jié)果
old umask is %#0
new umask is %#0
·編譯錯(cuò)誤信息
:cl! 列出所有錯(cuò)誤信息的詳細(xì)列表
:cl 列出當(dāng)前條錯(cuò)誤信息
:cn 列出下一條錯(cuò)誤信息
:cp 列出上一條錯(cuò)誤信息
:cnew 最新錯(cuò)誤信息條數(shù)
:cold 舊的錯(cuò)誤信息條數(shù)
:cwin 或 :copen 打開(kāi)錯(cuò)誤信息窗口
:cclose 關(guān)閉上面打開(kāi)的信息窗口
自動(dòng)補(bǔ)齊
CTRL-X CTRL-F 文件名
CTRL-X CTRL-L 整行
CTRL-X CTRL-D 宏定義 (并搜索所包含的文件)
CTRL-X CTRL-I 當(dāng)前文件以及所包含的文件
CTRL-X CTRL-K 詞典文件內(nèi)的單詞
CTRL-X CTRL-T 近義詞詞典文件內(nèi)的單詞
CTRL-X CTRL-] 標(biāo)記
CTRL-X CTRL-V Vim 命令行
C程序設(shè)計(jì)
gd 反色顯示光標(biāo)下局部標(biāo)識(shí)符串的所有出現(xiàn),并轉(zhuǎn)到第一次出現(xiàn)處。
gD 反色顯示光標(biāo)下全局標(biāo)識(shí)符串的所有出現(xiàn),并轉(zhuǎn)到第一次出現(xiàn)處。
————————————————————————————–
:checkpath 列出所有include的頭文件
————————————————————————————–
[i 顯示函數(shù)定義
extern __mode_t umask (__mode_t __mask) __THROW;
————————————————————————————–
[+CTRL+i 跳轉(zhuǎn)到[i所標(biāo)識(shí)的函數(shù)定義處
————————————————————————————–[I 列出當(dāng)前文件及包含文件內(nèi)的含有當(dāng)前字符的行
————————————————————————————–[d 顯示由#define所定義的標(biāo)識(shí)符的定義語(yǔ)句
printf(|tom);
#define tom “yaoshuyin”
————————————————————————————–
CTRL+] 跳轉(zhuǎn)到光標(biāo)當(dāng)前位置的標(biāo)簽處 (例如:一個(gè)函數(shù)的定義)。
CTRL+T 跳轉(zhuǎn)到執(zhí)行 CTRL-] 命令前的地方。
:tselect 從一連串匹配的標(biāo)簽中選出一個(gè)。
[/ 跳轉(zhuǎn)到注釋開(kāi)始的位置。
]/ 跳轉(zhuǎn)到注釋結(jié)束的位置。
—————————————————————-
[# 返回到未閉合的 #if, #ifdef, or #else 處。
]# 前進(jìn)到未閉合的 #else 或 #endif 處。
[( 返回到未閉合的 ‘(’ 處。
)) 前進(jìn)到未閉合的 ‘]’ 處。
[{ 跳轉(zhuǎn)到最近對(duì)應(yīng)的 ‘{’ 處。
}} 跳轉(zhuǎn)到最近對(duì)應(yīng)的 ‘]’ 處。
·字符集和進(jìn)制轉(zhuǎn)換
ga 顯示光標(biāo)處字符的ascii,hex,oct,…暈菜的一堆轉(zhuǎn)換
如 s 前按ga
; 115, Hex 73, Octal 163
列塊操作
;選中列塊
I;; 在塊的每一行首加上string
A;; 在塊的每一行尾加上string
C;; 修改選中的列塊(即刪除并輸入新內(nèi)容 )
c;; 修改選中的列塊(即刪除并輸入新內(nèi)容 )
>; 左移Tab寬度
vimrc中的文件名及路徑
如在D:\cnscnprogrames\Vim\vim63\下編輯 vi tmp\file.java (即D:\cnscnprogrames\Vim\vim63\tmp\file.java)
expand(”%” #tmp\file.java
expand(”%:p” #D:\cnscnprogrames\Vim\vim63\tmp\file.java
expand(”%:h” #tmp
expand(”%:t” #file.java
expand(”%:e” #java
expand(”%:t:r” #file
expand(”%:r”) #tmp\file
·一個(gè)簡(jiǎn)單編譯器(編譯、執(zhí)行常見(jiàn)程序)
#vi ~/.vimrc
“定義F9來(lái)編譯、執(zhí)行程序
map ; :call ProgCompileRun() ;
func ProgCompileRun()
“save the current file first
:w
“取得程序后綴名 如java php pl py
let ext = expand(”%:e”)
“編譯Java
if ext == “java”
if expand(”%:h”) != “”
:!javac % && java -classpath expand(”%:h”) %:t:r
else
:!javac % && java %:t:r
endif
return
endif
“執(zhí)行php
if ext == “php”
:!php %
return
endif
“編譯執(zhí)行c/cc/cpp
if ext == “c” || ext == “cc” || ext == “cpp”
:!gcc % -o a.out && ./a.out
return
endif
“編譯執(zhí)行perl
if ext == “pl”
:!perl -c %
return
endif
“編譯執(zhí)行python
if ext == “py”
:!python %
return
endif
endfunc