常用指令收集
- 系統(tǒng)時(shí)間(在光標(biāo)之后追加當(dāng)前的日期和時(shí)間) : map <F7> a<C-R>=strftime("%c")<CR><esc>
- 系統(tǒng)時(shí)間(將__date__替換成當(dāng)前日期,使用strftime函數(shù)):s/__date__/\=strftime("%c")/
基礎(chǔ)命令
- ctrl+q 可以聯(lián)合復(fù)制,粘貼,替換用 行操作
- ctrl+w+j ctrl+w+k (:bn :bp :bd)
- '. 它移動(dòng)光標(biāo)到上一次的修改行
- `. 它移動(dòng)光標(biāo)到上一次的修改點(diǎn)
- . 重復(fù)上次命令
- <C-O> : 依次沿著你的跳轉(zhuǎn)記錄向回跳 (從最近的一次開(kāi)始)
- <C-I> : 依次沿著你的跳轉(zhuǎn)記錄向前跳
- ju(mps) : 列出你跳轉(zhuǎn)的足跡
- :history : 列出歷史命令記錄
- :his c : 命令行命令歷史
- :his s : 搜索命令歷史
- q/ : 搜索命令歷史的窗口
- q: : 命令行命令歷史的窗口
- g ctrl+g 計(jì)算文件字符
- {,} 前進(jìn)至上一段落前進(jìn)至后一段落
- gg,G(2G) 文件首
- gd dw gf ga(進(jìn)制轉(zhuǎn)化)
- gg=G 全篇自動(dòng)縮進(jìn) , =G 單行縮進(jìn)
- * ci[ 刪除一對(duì) [] 中的所有字符并進(jìn)入插入模式
- * ci( 刪除一對(duì) () 中的所有字符并進(jìn)入插入模式
- * ci< 刪除一對(duì) <> 中的所有字符并進(jìn)入插入模式
- * ci{ 刪除一對(duì) {} 中的所有字符并進(jìn)入插入模式
- * cit 刪除一對(duì) HTML/XML 的標(biāo)簽內(nèi)部的所有字符并進(jìn)入插入模式
- * ci” ci’ ci` 刪除一對(duì)引號(hào)字符 (” 或 ‘ 或 `) 中所有字符并進(jìn)入插入模式
- * vi[ 選擇一對(duì) [] 中的所有字符
- * vi( 選擇一對(duì) () 中的所有字符
- * vi< 選擇一對(duì) <> 中的所有字符
- * vi{ 選擇一對(duì) {} 中的所有字符
- * vit 選擇一對(duì) HTML/XML 的標(biāo)簽內(nèi)部的所有字符
- * vi” vi’ vi` 選擇一對(duì)引號(hào)字符 (” 或 ‘ 或 `) 中所有字符
- crl+] 函數(shù)原型處 crl+t 回 ( ctags )
- ctl+p 自動(dòng)補(bǔ)全( 編輯狀態(tài) )
- :X 加密保存( 要輸入密碼 )
- ? / (N n)
- f(F,t) 查找字符
- w(e) 移動(dòng)光標(biāo)到下一個(gè)單詞.
- 5fx 表示查找光標(biāo)后第 5 個(gè) x 字符.
- 5w(e) 移動(dòng)光標(biāo)到下五個(gè)單詞.
- b 移動(dòng)光標(biāo)到上一個(gè)單詞.
- 0 移動(dòng)光標(biāo)到本行最開(kāi)頭.
- ^ 移動(dòng)光標(biāo)到本行最開(kāi)頭的字符處.
- $ 移動(dòng)光標(biāo)到本行結(jié)尾處.
- H 移動(dòng)光標(biāo)到屏幕的首行.
- M 移動(dòng)光標(biāo)到屏幕的中間一行.
- L 移動(dòng)光標(biāo)到屏幕的尾行.
- c-f (即 ctrl 鍵與 f 鍵一同按下)
- c-b (即 ctrl 鍵與 b 鍵一同按下) 翻頁(yè)
- c-d (下半頁(yè)) c-u(上半頁(yè)) c-e (一行滾動(dòng))
- zz 讓光標(biāo)所在的行居屏幕中央
- zt 讓光標(biāo)所在的行居屏幕最上一行
- zb 讓光標(biāo)所在的行居屏幕最下一行
- 在 vi 中 y 表示拷貝, d 表示刪除, p 表示粘貼. 其中拷貝與刪除是與光標(biāo)移動(dòng)命令
- yw 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)所在單詞結(jié)尾的內(nèi)容.
- dw 表示刪除從當(dāng)前光標(biāo)到光標(biāo)所在單詞結(jié)尾的內(nèi)容.
- y0 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)所在行首的內(nèi)容.
- d0 表示刪除從當(dāng)前光標(biāo)到光標(biāo)所在行首的內(nèi)容.
- y$(Y) 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)所在行尾的內(nèi)容.
- d$(D) 表示刪除從當(dāng)前光標(biāo)到光標(biāo)所在行尾的內(nèi)容.
- yfa 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)后面的第一個(gè)a字符之間的內(nèi)容.
- dfa 表示刪除從當(dāng)前光標(biāo)到光標(biāo)后面的第一個(gè)a字符之間的內(nèi)容.
- s(S),a(A),x(X),D
- yy 表示拷貝光標(biāo)所在行.
- dd 表示刪除光標(biāo)所在行.
- 5yy 表示拷貝光標(biāo)以下 5 行.
- 5dd 表示刪除光標(biāo)以下 5 行.
- y2fa 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)后面的第二個(gè)a字符之間的內(nèi)容.
- :12,24y 表示拷貝第12行到第24行之間的內(nèi)容.
- :12,y 表示拷貝第12行到光標(biāo)所在行之間的內(nèi)容.
- :,24y 表示拷貝光標(biāo)所在行到第24行之間的內(nèi)容. 刪除類(lèi)似.
- TAB 就是制表符, 單獨(dú)拿出來(lái)做一節(jié)是因?yàn)檫@個(gè)東西確實(shí)很有用.
- << 輸入此命令則光標(biāo)所在行向左移動(dòng)一個(gè) tab.
- >> 輸入此命令則光標(biāo)所在行向右移動(dòng)一個(gè) tab.
- 5>> 輸入此命令則光標(biāo)后 5 行向右移動(dòng)一個(gè) tab.
- :5>>(>>>) :>>(>>>)5
- :12,24> 此命令將12行到14行的數(shù)據(jù)都向右移動(dòng)一個(gè) tab.
- :12,24>> 此命令將12行到14行的數(shù)據(jù)都向右移動(dòng)兩個(gè) tab.
- :set shiftwidth=4 設(shè)置自動(dòng)縮進(jìn) 4 個(gè)空格, 當(dāng)然要設(shè)自動(dòng)縮進(jìn)先.
- :set sts=4 即設(shè)置 softtabstop 為 4. 輸入 tab 后就跳了 4 格.
- :set tabstop=4 實(shí)際的 tab 即為 4 個(gè)空格, 而不是缺省的 8 個(gè).
- :set expandtab 在輸入 tab 后, vim 用恰當(dāng)?shù)目崭駚?lái)填充這個(gè) tab.
- :g/^/exec 's/^/'.strpart(line('.').' ', 0, 4) 在行首插入行號(hào)
- set ai 設(shè)置自動(dòng)縮進(jìn)
- 5ia<esc> 重復(fù)插入5個(gè)a字符
替換命令
- 替換文字 2009-02-34 ----> 2009-02-34 00:00:00 :%s/\(\d\{4\}-\d\{2\}-\d\{2\}\)/\1 00:00:00/g
- :%s/^/heaser/ 在每一行頭部添加header
- :%s/$/ender/ 在每一行尾部添加ender
- :s/aa/bb/g 將光標(biāo)所在行出現(xiàn)的所有包含 aa 的字符串中的 aa 替換為 bb
- :s/\/bb/g 將光標(biāo)所在行出現(xiàn)的所有 aa 替換為 bb, 僅替換 aa 這個(gè)單詞
- :%s/aa/bb/g 將文檔中出現(xiàn)的所有包含 aa 的字符串中的 aa 替換為 bb
- :12,23s/aa/bb/g 將從12行到23行中出現(xiàn)的所有包含 aa 的字符串中的 aa 替換為 bb
- :12,23s/^/#/ 將從12行到23行的行首加入 # 字符
- :%s/fred/joe/igc 一個(gè)常見(jiàn)的替換命令,修飾符igc和perl中一樣意思
- s/dick/joe/igc則 對(duì)于這些滿(mǎn)足條件的行進(jìn)行替換
- :g/^\s*$/d 空行(空格也不包含)刪除.
- :%s/\r//g 刪除DOS方式的回車(chē)^M
- :%s/ *$// 刪除行尾空白(%s/\s*$//g)
- :g!/^dd/d 刪除不含字符串'dd'開(kāi)頭的行
- :v/^dd/d 同上,譯釋?zhuān)簐 == g!,就是不匹配!
- :v/./.,/./-1join 壓縮空行(多行空行合并為一行)
- :g/^$/,/./-j 壓縮空行(多行空行合并為一行)
- :g/^/pu _ 把文中空行擴(kuò)增一倍 (pu = put),原來(lái)兩行間有一個(gè)空行,現(xiàn)在變成2個(gè)
- :g/^/m0 按行翻轉(zhuǎn)文章 (m = move)
- :g/fred/,/joe/d not line based (very powerfull)
- :g/<input\|<form/p 或者 要用\|
- :g/fred/t$ 拷貝行,從fred到文件末尾(EOF)
- :%norm jdd 隔行刪除,
譯釋?zhuān)?指明是對(duì)所有行進(jìn)行操作,norm指出后面是normal模式的指令,j是下移一行,dd是刪除行
- :'a,'bg/fred/s/dick/joe/igc ('a,'b指定一個(gè)范圍:mark a ~ mark b)
- g//用一個(gè)正則表達(dá)式指出了進(jìn)行操作的行必須可以被fred匹配,g//是一個(gè)全局顯示命令
- /joe/e 光標(biāo)停留在匹配單詞最后一個(gè)字母處
- /joe/e+1 光標(biāo)停留在匹配單詞最后一個(gè)字母的下一個(gè)字母處
- /joe/s 光標(biāo)停留在匹配單詞第一個(gè)字母處
- /^joe.*fred.*bill/ 標(biāo)準(zhǔn)正則表達(dá)式
- /^[A-J]\+/ 找一個(gè)以A~J中一個(gè)字母重復(fù)兩次或以上開(kāi)頭的行
- /forum\(\_.\)*pent 多行匹配
- /fred\_s*joe/i 中間可以有任何空白,包括換行符\n
- /fred\|joe 匹配FRED或JOE
- /\<fred\>/i 匹配fred,fred必須是一個(gè)獨(dú)立的單詞,而不是子串
- /\<\d\d\d\d\> 匹配4個(gè)數(shù)字 \<\d\{4}\> 列,
- 替換所有在第三列中的str1 :%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
- 交換第一列和最后一列 (共4列) :%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
- 全局(global)顯示命令,就是用 :g+正則表達(dá)式
譯釋?zhuān)?:g/{pattern}/{cmd} 就是全局找到匹配的,然后對(duì)這些行執(zhí)行命令{cmd}
- :g/\<fred\>/ 顯示所有能夠?yàn)閱卧~fred所匹配的行
- :g/<pattern>/z#.5 顯示內(nèi)容,還有行號(hào)
- :g/<pattern>/z#.5|echo '==========' 漂亮的顯示
多文檔操作 (基礎(chǔ))
- 用 :ls! 可以顯示出當(dāng)前所有的buffer
- :bn 跳轉(zhuǎn)到下一個(gè)buffer
- :bp 跳轉(zhuǎn)到上一個(gè)buffer
- :wn 存盤(pán)當(dāng)前文件并跳轉(zhuǎn)到下一個(gè)
- :wp 存盤(pán)當(dāng)前文件并跳轉(zhuǎn)到上一個(gè)
- :bd 把這個(gè)文件從buffer列表中做掉
- :b 3 跳到第3個(gè)buffer
- :b main 跳到一個(gè)名字中包含main的buffer
列復(fù)制
- 譯注:@#%&^#*^%#$!
- :%s= [^ ]\+$=&&= : 復(fù)制最后一列
- :%s= \f\+$=&&= : 一樣的功能
- :%s= \S\+$=&& : ft,還是一樣反向引用,或稱(chēng)記憶
- :s/\(.*\):\(.*\)/\2 : \1/ : 顛倒用:分割的兩個(gè)字段
- :%s/^\(.*\)\n\1/\1$/ : 刪除重復(fù)行
- 非貪婪匹配,\{-}
- :%s/^.\{-}pdf/new.pdf/ : 只是刪除第一個(gè)pdf 跨越可能的多行
- :%s/<!--\_.\{-}-->// : 又是刪除多行注釋?zhuān)ㄟ??為什么要說(shuō)「又」呢?)
- :help /\{-} : 看看關(guān)于 非貪婪數(shù)量符 的幫助
- :s/fred/<c-r>a/g : 替換fred成register a中的內(nèi)容,呵呵,
- 寫(xiě)在一行里的復(fù)雜命令 :%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/
譯注:就是用 | 管道啦
大小寫(xiě)轉(zhuǎn)換
- g~~ : 行翻轉(zhuǎn)
- vEU : 字大寫(xiě)(廣義字)
- vE~ : 字翻轉(zhuǎn)(廣義字)
- ~ 將光標(biāo)下的字母改變大小寫(xiě)
- 3~ 將下3個(gè)字母改變其大小寫(xiě)
- g~w 字翻轉(zhuǎn)
- U 將可視模式下的字母全改成大寫(xiě)字母
- gUU 將當(dāng)前行的字母改成大寫(xiě)
- u 將可視模式下的字母全改成小寫(xiě)
- guu 將當(dāng)前行的字母全改成小寫(xiě)
- gUw 將光標(biāo)下的單詞改成大寫(xiě)
- guw 將光標(biāo)下的單詞改成小寫(xiě)。
文件瀏覽
- :Ex : 開(kāi)啟目錄瀏覽器,注意首字母E是大寫(xiě)的
- :Sex : 在一個(gè)分割的窗口中開(kāi)啟目錄瀏覽器
- :ls : 顯示當(dāng)前buffer的情況
- :cd .. : 進(jìn)入父目錄
- :pwd
- :args : 顯示目前打開(kāi)的文件
- :lcd %:p:h : 更改到當(dāng)前文件所在的目錄
譯釋?zhuān)簂cd是僅僅改變當(dāng)前窗口的工作路徑,% 是代表當(dāng)前文件的文件名,加上 :p擴(kuò)展成全名(就是帶了路徑),加上 :h析取出路徑
以下是一張vim常用命令速查表:
更多建議: