用vim進行c/c++開發

本文中無法輸入反斜槓,用\代替。

冒號進入的是EX commands.

更新幫助::helptags ~/.vim/doc

使用vba腳本:打開腳本文件後:so %

GVim的緩存菜單和許多對緩存處理的插件都無法正確刷新由菜單項恢復出來的會話!

on ubuntu. if ctags needed, "sudo apt-get install exuberant-ctags".

if ruby needed, "sudo apt-get install vim-nox", while python and perl will also be installed.

on windows, download ctags application and add it to %PATH%. downloadgvim built with ruby, python and perl and install ruby (path export needed).


 

插件:

pathogen允許插件放在自己的子目錄,以免放在一起混淆。

使用trinity插件(它整合了另三個插件:source explorer, taglist and NERD tree。其中NERDTree需要用自己的版本)形成類似Source Insight的界面。用ctags --languages=-all --language=+c,c++,java --recurse=yes *建立標籤文件,以便這些插件使用;用find . -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name "*.java" >cscope.lst建議文件列表後,用cscope -Rbqkv -i cscope.lst建立標籤文件,以便查找標籤的所有引用處。進入vi(命令行可以加-t 標籤,或進入入用:ta 標籤),:TrinityToggleAll開啓界面,^w+方向鍵在各窗口間移動。

winmanager也有三個小窗口。推薦設置是map <c-w><c-f> :FirstExplorerWindow<cr> 
    map <c-w><c-b> :BottomExplorerWindow<cr> 
    map <c-w><c-t> :WMToggle<cr>

cscope_macros使cscope功能更好用。^\s搜索當前符號的所有引用;^\g查找當前符號定義;^\c查找當前函數的調用處;^\t查找當前文本;^\e用egrep查找當前字;^\f打開“當前”文件;^\i查找所有“包含”“當前”文件的文件(find files that include the filename under cursor);^\d查找當前函數調用的函數(find functions that function under cursor calls)

code_complete對生成的tag文件有特殊要求。

vi內置了omnicomplete,在.vimrc中加入下面內容打開(需要配置filetype on):set ofu=syntaxcomplete#Complete。要支持Java,需要javacomplete插件,並根據說明修改.vimrc。通過^x^o彈出選擇菜單。

AutoComplPop比omnicomplete更好用。YouCompleteMe更強大,但是需要編譯,安裝複雜。

通過Eclim能使用Eclipse的功能,但是需要編譯。

vjde支持C/C++和Java,快捷鍵,vv未見生效,菜單可用。可以重構/refactor:rf或em將當前變量改爲成員域;rl將當前變量改爲局部變量;rp或ep將當前變量加爲方法的參數。ai自動爲當前字添加導入。je將當前字由全路徑使用改爲導入使用。:VjdeNclass生成一個類;:VjdeNmain生成一個接口;:VjdeNprop生成一個屬性。:Vjdei顯示類或類成員的信息;:Vjdegd到聲明處。fr修正未聲明的異常拋出;ft修正異常處理;jt加異常處理代碼。

tagbar在左側窗口顯示文件中所有函數名及參數。[Space]顯示函數原型;o摺疊;s切換排序方式;x切換窗口大小;q關閉。

使用lusty-explorer智能根據鍵入內容顯示文件名,以便打開文件。\lf 打開文件管理器;\lr根據當前文件目錄打開文件管理器;\lb打開緩存器管理器;\lg搜索緩存器。^t在新標籤頁中打開;^o水平分窗口打開;^v垂直分窗口打開。^n選擇下一個匹配;^p選擇上一個匹配;^f選擇下一列;^b選擇上一列。^u清空提示。對於文件管理器:^w上一級目錄;^r刷新目錄;^a打開當前表格中所有;^e根據路徑和文件名新開緩存器。需要ruby。

FuzzyFinder在多處查找並打開。:FufBuffer;:FufFile;:FufConverageFile默認在當前目錄和子目錄中查找,所以非常慢;:FufDir;:FufMruFile(默認不可用);:FufMruCmd(默認不可用);:FufBookmarkFile;:FufBookmarkDir;:FufTag;:FufBufferTag(啓動時自動對緩存器生成標籤);:FufTaggedFile;:FufJumpList;:FufChangeList;:FufQuickfix;:FufLine;:FufHelp。^w刪除輸入的前一詞。^s和^^調入前一個或後一個歷史。回車直接打開,^j水平分窗口打開,^k垂直分窗口打開,^l新開標籤頁打開。^/^/在模糊匹配和部分匹配間切換;^t和^y在下一個或上一個模式間切換。有些模式中可以^@預覽。,cf =FufFileWithCurrentBufferDir列當前文件目錄;,cb=FufBuffer列緩存;,ct=FufTaggedFile列標籤文件

bufexplorer管理緩存器。\be當前窗口打開;\bs水平分窗口打開;\bv垂直分窗口打開。

EasyGrep在文件中查找詞。vv查找當前詞,包括有前後綴的;vV查找當前詞,整詞查找;va,同vv,不清除之前的結果;vA,同vV, 不清除之前的結果;vr查找當前詞並詢問替換爲什麼;vo或:GrepOptions設置參數;:Grep 要查找的內容;:GrepAdd 要添加到之前結果的要查找的內容;:Replace 查找內容 替換內容;:ReplaceUndo。

grep查找內容或文件名。:Grep查找;:GrepAdd將新查找結果附加到上次結果之後;:Rgrep遞歸查找;:RgrepAdd;:Bgrep在所有緩存器中查找;:BgrepAdd;:GrepArgs在vi命令行參數的文件中查找;:GrepArgsAdd;F/Rf/E/Re/A/Ra-grep(-Add)。後面加三部分可選參數:grep選項、搜索模式、文件名(在緩存器或命令行參數的文件中查找時不可用)。grep選項如:-i忽略大小寫;-w匹配詞。搜索模式默認爲當前單詞,會有提示,屆時可以修改;兩側會自動加分界符,如果模式中間有空格或多詞,應該不寫搜索模式,在提示時寫。無文件名時會有提示,默認爲*。:colder和:cnewer在多個結果窗口間切換。:cnext和:cprev在多行間切換。:copen重新打開結果窗口。需要grep

SearchInBuffers將上次在本緩存進行的搜索對所有緩存進行。:SIB顯示。

findfiles查找文件名,相當於find . -iname。:Find 文件名 參數;\Find以當前詞爲文件名。回車打開,o打開文件並關閉結果窗口,q關閉結果窗口。

MarksBrowser顯示所有標記行。:MarksBrowser打開。回車跳轉,d刪除。

Visual Mark高亮顯示某些行。mm切換高亮;F2到下一高亮行;s-F2到上一高亮行,但是可能與其它功能鍵衝突。有高亮行存在時,屏幕最左側會多一列空白。

mark高亮顯示多個關鍵字。\m(取消)高亮當前字(可針對選塊);\r輸入要高亮的正則表達式;\n取消高亮當前字;\N取消高亮所有字;\*跳到下一當前(或上次的)高亮的關鍵字;\/跳到下一高亮的關鍵字。在高亮關鍵字上按*時會按插件邏輯進行跳轉。:MarkSave和:MarkLoad可以保存、讀取高亮情況。可以設置是否自動保存高亮情況。


vimim方便中文輸入,自帶輸入法。gi進入輸入模式前激活輸入法,標題欄顯示備選字。輸入模式下按^_開關輸入法,按^^切換輸入法,按^u刪除所有輸入內容。進行過搜索後,再用n搜索,則也會按拼音查找。

Renamer將文件名讀入,編輯後生效。:Renamer打開。

project通過.vimprojects管理項目,可以打開所有文件、在所有文件中搜索。:Project打開。c條目C包括目錄條目r更新當前條目R更新包括條目當前條目;[Enter]摺疊條目打開文件s或s-[Enter]水平分隔窗口開文件;\S水平分隔打開所有文件;\o或^Enter打開文件並關閉多餘窗口;\v或m-[Enter]打開文件且光標停留在管理窗口;[Space]切換窗口大小;\[up]或^[up]將文字或條目上移;\[down]或^[down]將文字或條目下移;\I顯示當前文件全路徑;\w不再管理當前條目下所有文件;\W不再管理當前條目和子條目下所有文件;\g在當前條目下所有文件中搜索;\G在當前條目和子條目所有文件中搜索;\E打開當前目錄。


bashsupport在新建腳本文件時會自動產生模板,在gvim下擴展出菜單;在vim下通過快捷鍵操作。sc加入case塊;sf加入for塊;si或sie或sei加入if塊;ss加入select塊;st加入until塊;sw加入while塊;sfu加入function塊;se加入echo-e塊;rr運行腳本;\rc檢查語法;re使腳本可執行。


obvious-resize更簡便地更改窗口大小。通過設置快捷鍵設置更改窗口大小的鍵。

conque-term分窗口運行shell命令。:ConqueTerm 命令 在當前緩存器運行。:ConqueTermSplit和:ConqueTermVSplit水平和垂直分窗口運行。插入狀態可與命令交互,正常狀態操作命令結果。


NERDTree(Trinity版本):q關閉;o打開或關閉當前節點;O打開子目錄;cd修改當前目錄(CWD)到光標所在目錄;C將當前目錄設置爲顯示的最上層目錄;P到最上層目錄;p到上一層目錄;K到第一個子成員;J到最後一個子成員;t在新標籤中打開;T在新標籤中後臺打開;e用netrw打開;!執行;列表鍵拆分打開;g列表鍵拆分預覽;:Bookmark 名稱;:BookmarkToRoot 名稱;:RevealBookmard 名稱(需要該節點處於顯示狀態);:OpenBookmark 名稱(會導致Trinity顯示異常);:ClearBookmarks 名稱;:ClearAllBookmarks

 

favex將當前文件或目錄加入收藏夾以便以後直接打開::FExplore在當前窗口打開收藏夾;:FSplit在新窗口打開收藏夾;:FFile收藏當前文件;:FDirectory收藏當前目錄。在收藏夾窗口,h顯隱幫助;回車在當前窗口打開;o在新窗口打開;O在上一窗口打開;d刪除條目;q關閉收藏夾所在窗口。

VimCommander雙窗口文件管理界面。vc啓動。F4編輯文件,F5複製,F6移動,F7建立目錄,F8或DEL刪除,TAB切換窗口,F10退出,INS選中文件,+多選,-多不選,^t上一目錄,^y下一目錄,^r刷新,BACK到父目錄

vimexplorer帶目錄樹的文件管理界面。:VE啓動。Q退出;t切換是否顯示另一窗口;回車用默認關聯應用打開;退格 到父目錄;^i到下一目錄;^o到前一目錄;r刷新;R重命名;yy拷貝;xx剪切;dd刪除;DD強行刪除;F加到收藏;f顯示收藏;u預覽;U關閉預覽;^g輸入路徑;空格切換是否選中;Mc全不選;Mr選中指定的;sy拷貝選擇的;sx剪切選擇的;p粘貼;=比較選中的兩個文件;e在新標籤打開;+f新建文件;+d新建目錄;g/查找;^TAB在左右窗口間切換;H切換是否顯示隱藏文件;m字母 將當前路徑放到寄存器;`字母 跳到寄存器對應的目錄;J顯示寄存器中的路徑;;c在當前路徑打開shell;;e啓動其它文件管理器。

unite方便打開文件。:Unite 後加以下一個或多個顯示不同內容:bookmark書籤;file目錄文件;file_mru最近文件;buffer緩存;tab標籤;change, command, directory_mru, file_point, file_rec, history/yank, jump, jump_point, launcher, line, mapping, menu, output, process, register, resume, session, source, window, ……

sudo在vim中用高權限編輯。vim sudo:文件路徑 或在vim中:e sudo:文件路徑。對gvim支持不好。建議用sudo -e編輯文件。

fencview自動檢測文件內碼:FencAutoDetect

NERD_commenter可以加多行註釋。\cc加單行註釋;\c空格切換單行註釋;\cm多行註釋;\cs有格式的多行註釋;\cu取消註釋。closetag自動完成XML標籤。^_啓動。

DirDiff遞歸比較兩個目錄。:DirDiff 目錄 目錄。s同步(可針對選塊);u刷新;x設置不包含;i設置忽略;a設置比較參數,如-w是忽略空白;q關閉。在比較模式下最好使用vim內置快捷鍵,腳本的有問題:\dg(vim使用\do)得到差別;\dp施行差別;\dj(vim使用]c)到下一差別;\dk(vim使用[c)到前一差別。

increment產生遞增序列。:範圍Inc [s開始數] [i增長數] [r不變數] [w數字右對齊] [f以字符填充對齊] [h十六進制] [o八進制] [p替換模式]。默認模式爲@,從0開始,每加一個(不變數)數增長1(增長數)。

VisIncr:Produce increasing/decreasing columns of numbers, dates, or daynames. select a column with ^v, :l or :l -1 to make the numbers increasing or decreasing. :IA for ASCII.

moveline將當前行移動一行fu向上;fd向下。

stripper可刪除行末空格。:Stripper will strip trailing whitespace

tabular根據分隔符分列對齊連續幾行。:Tabularize /分隔符

wc計算字數。:WC顯示。

rainbow_parentheses用不同色彩顯示多層次括號

vim-markdown在.md文件中的鏈接上,gx打開瀏覽器

asciitable顯示ASCII碼錶。:Asciitable或:Asctable以十進制顯示;:AsctableH以十六進制顯示;:AsctableO以八進制顯示。\a後加8、10、x、16按不同進制顯示。vim內置g8快捷鍵也可以以十六進制顯示當前字符UTF-8碼;ga或:ascii顯示當前字符的ASCII碼

chartable顯示ASCII碼錶。ct顯示。b切換十、十六進制;q關閉。

proc顯示運行進程。ps顯示。k結束進程,選擇,Esc不選所有,s按當前列排序,a顯示所有,u只顯示用戶的進程(默認),c按處理器佔用排序,m按內存佔用排序,p刷新,q關閉顯示。

calendar顯示日曆。:Calendar在左顯示;:CalendarH在下顯示。左右鍵換屏;上下鍵換年(只能換到前、後一年);t返回當日;q關閉;?顯示幫助。

ccase支持clearcase。:ctsta關聯缺陷;:ctco簽出;:ctci簽入;:ctunco取消簽出;:cthist顯示記錄。

vcscommand支持CVS, SVN, git等等。快捷鍵前綴默認爲c但是可以考慮設置爲,cvs。下面的單個字母是快捷鍵後綴。a :VCSAdd;n/N :VCSAnnotate[!]與:VCSBlame[!]相同;c :VCSCommit[!]如果使用驚歎號,則附加消息爲空;D :VCSDelete與:VCSRemove相同;d :VCSDiff可以有零至兩個參數;i :VCSInfo對git無效;g :VCSGotoOriginal;l :VCSLog;:VCSRevert丟棄本地修改;r :VCSReview在新窗口顯示無本地修改版本內容;s :VCSStatus;u :VCSUpdate;v :VCSVimDiff

gitgutter在git庫內的文件會在最左邊顯示一列當前行與庫版本是否有差異的標記。jump between hunks with [c and ]c. You can preview, stage, and undo hunks with <leader>hp, <leader>hs, and <leader>hu respectively.

fugitive支持git。:Gedit HEAD顯示分支情況;:Gdiff比較,:Gread獲取所有區別;:Gstatus顯示狀態,D比較差別,-重置文件,p查看差別並加入本地提交,C提交到本地;:Gcommit提交到本地;:Ggrep搜索目錄或日誌;:Gmove移動;:Gremove刪除。

cfname快速找到當前函數。,ff在命令行顯示函數原型的一行;,fb跳到函數首;,fe跳到函數尾;,ft跳回去;,fz摺疊當前函數;,fo不折疊當前函數。

Gundo以樹狀圖顯示撤銷列表及內容。ut或:GuntoToggle打開或關閉。q關閉。

vimcalc計算器。:Calc啓動。寫表達式,回車計算。可以用let 變量=值。以下的冒號也是插入模式下內容,不表示進入命令模式。:dec以十進制顯示結果;:hex以十六進制顯示結果;:oct以八進制顯示結果;:int以整型顯示結果;:float以浮點型顯示結果;:vars顯示所有變量;:q退出計算。**爲冪(右向左優先級計算);!爲階乘;可以用<<,>>,算符=。內置了一些高級計算,如abs,pow。內置了一些變量,如e,pi,phi黃金分割率,ans上一結果。

recent記錄歷史文件。:Recent打開記錄。自動載入。

RecentFiles也記錄歷史文件。,fr打開記錄。不自動載入。

acp在鍵入兩個字符時彈出窗口補全文字。

sessionman在文件菜單擴展出會話菜單項。

add this to .vimrc to go to last file(s) if invoked without arguments.

autocmd VimLeave * nested if (!isdirectory($HOME . "/.vim")) |
  \ call mkdir($HOME . "/.vim") |  
  \ endif |
  \ execute "mksession! " . $HOME . "/.vim/Session.vim"

autocmd VimEnter * nested if argc() == 0 && filereadable($HOME . "/.vim/Session.vim") |
  \ execute "source " . $HOME . "/.vim/Session.vim"
 


vi集成了zip.vim, tar.vim

vi內置補全文字功能:^p和^n分別按正反查找補全替補(complete選項設置)。

netrw是內置功能。如果編譯目錄,就會調用它。用mf標記文件。


以下不推薦。

OmniComplete自動補全可能會非常慢。

showmarks自動在屏幕左側多兩列顯示標記,與Visual Mark衝突,且拷貝折行時會變爲兩行。mt切換顯示;mo打開;mh刪除一個標記;ma刪除所有標記;mm到下一標記。可以設置是否整行高亮顯示。

vimCU方便加或刪註釋(#)。,#加註釋;,3刪註釋。

comments加或刪註釋(單行)。^c加註釋;^x去註釋;s-v選中多行,然後^c或者^x。

autoproto在c文件中,鍵入函數名和左括號時自動顯示函數聲明,之後輸入有些問題。

TagsParser,在保存文件後即時更新標籤文件,並在自己的動態標籤窗口中更新顯示。


 CtrlP打開文件、緩存或歷史。^P(建議換爲比如,cp)或:CtrlP [目錄]打開,基於當前文件目錄;:CtrlPBuffer查找緩存;:CtrlPMRU查找歷史。^f和^b在三個模式間切換;^d只查找文件名或全路徑;^r使用正則表達式;^y建立新文件(含路徑中的新目錄);^z(取消)標記,^o打開選擇的文件。g:ctrlp_working_path_mode=0爲使用vim當前目錄;1爲使用當前文件的目錄(默認);2爲使用當前文件或最近的上層目錄,如果其中包含.git目錄或.vimprojects等。因爲打開文件列表時遞歸子目錄,所以可能非常慢。

tselectfiles打開文件,tselectbuffer打開緩存。:TSelectBuffer查找緩存;:TSelectFilesInSubdirs查找文件,基於當前文件目錄,可加上指定目錄作爲參數,文件多時會慢;:TSelectFiles查找文件(如果之前沒用過TSelectFilesInSubdirs,則會顯示大量錯誤)。需要tlib

不推薦Command-T與lusty-explorer類似,但是不僅需要需要ruby,而且需要ruby編譯。

不推薦archive打開壓縮文件,沒有集成的好用,可能支持的格式多些,要求java:回車開關目錄或打開文件;o開關目錄或詢問文件打開方式;E用:edit打開;S在新拆分的窗口打開;T在新標籤打開;p移到上級目錄;P移到當前目錄下最後一個成員;i顯示文件信息;:AsList列表顯示


編譯:

:set makeprg=編譯器名 [參數]  設置編譯器,如gcc\ %,其中百分號表示當前文件名,反斜槓表示空格需要轉義

:make 參數

:cc 顯示(單個)整個錯誤消息

:cw 顯示(所有)完整錯誤消息

:cnext或:cn 跳到上個錯誤

:cprev或:cp 跳到下個錯誤

:clist或:cl 顯示錯誤列表(可保存十個)

:clist! 顯示所有消息

:colder或:col到前一個錯誤列表

:cnewer或:cnew到後一個錯誤列表


:cs -b 生成cscope.out

:cs add cscope.out 使用cscope.out


移動:

命令行參數 +數字 跳到指定行打開文件

+/內容 跳到文件第一個內容字符串出現處

^] 跳到位置處

^O 回跳

^I 前跳

:jumps 顯示跳躍列表

^f 下翻一屏
zz 當前行移到屏幕中央
L 光標移到屏幕底
( 光標移到句首
`[ 到上次修改處首

^b 上翻一屏

^d 下翻半屏

^u 上翻半屏

^e 下翻一行

^y 上翻一行

H 光標移到屏幕頂

M 光標移到屏幕中央

- 光標移到上一行行首

+ 光標移到下一行行首

gm 光標移到行中央

) 光標移到下一句句首

{ 光標移到段首(段以空行爲標誌)

} 光標移到段尾

`] 到上次修改處尾

f字符 光標移到行內下一字符處。前邊加數字表示第幾處出現。

F字符 光標移到行內上一字符處。前邊加數字表示第幾處出現。

t字符 光標移到行內下一字符之前。前邊加數字表示第幾處出現。

T字符 光標移到行內上一字符之後。前邊加數字表示第幾處出現。

; 重複執行f或F或t或T

, 反向重複執行f或F或t或T

$ 光標移到行尾。前邊加數字表示從上一行數,多少行之後的行。

^ 光標移到行內首個非空格字符處

0 光標移到行首(無論是否是空格)

b 光標移到上一單詞詞首(含中間有標點的單詞)

B 光標移到上一單詞詞首(不含中間有標點的單詞)

w和W,e和E的區別也是含不含中間有標點的單詞

ge 光標移到上一單詞詞尾

gg 到文首

G 到文尾。前邊加數字則到對應該行號的行

數字% 到文件對應比例處

vaw 選擇一個單詞

vas 選擇一個句子

vap 選擇一個斷落

^g 顯示光標所在位置

其它Vi應用:

:cd

:pwd

:sh 打開shell

x 刪除當前字符

X 刪除前一字符

u 撤銷

U 行內撤銷

. 重複上一命令

ZZ 保存退出

ZQ 不保存退出

:c 關閉當前窗口

:hid 退出窗口而保存在緩存

:r 文件名 讀入文件內容。前邊可以加範圍,則插入到該位置之後:如果爲0,則在當前行之上。文件名之前,可加文件格式參數

++ff=文件格式;++enc=編碼;++bin 二進制;++nobin 重置二進制。這些參數也能用於打開、保存文件命令。

:r!命令 將命令結果輸出到當前位置。前邊可以加範圍,則插入到該位置之後:如果爲0,則在當前行之上。

令當前文件目錄爲當前目錄:可以增加映射map ,cd :cd %:p:h<CR>:pwd<CR>

次數. 重複上一個編輯操作指定次數,默認爲一次

:'<,'>!命令 如果對選區執行命令,則選中內容作爲命令參數並將結果替換選區

:!!命令 重複上次的:!命令

:.!命令 將shell命令結果插入到當前位置

利用nl命令對所有非空行編號 :%!nl 如果需要包含空行 :%!nl -ba

:* 或:@ 執行寄存器的內容

gI 到行首並進入插入模式(I類似,但是是到第一個非空字符)

gJ 合併行,且中間不加空格(區別於J)

範圍g^g  顯示範圍內字數等信息。範圍默認爲全文

gf 打開光標處文件名的文件

gF 打開光標處文件並跳轉到後面的行號

:enew 新建文件

:sav 另存爲

:wa 保存所有

:wqa 保存所有並退出

:qa! 不保存任何並退出

:close 關閉文件

v 可視模式

V 可視行模式

^v 可視列模式,即選塊

選塊後,輸入I或A加內容後ESC,可在選中的所有行前或後都加上該內容。

Tab不能輸入列表符時,試試^vTab

K 顯示當前函數的手冊

:dia 顯示全體字母(digraphs)列表:第一組兩個字符是輸入第二組字符用的,第三組字符是Unicode碼。^K 字符一 字符二 或 字符一 退格 字符二 輸入全體字母


輸入、替換模式下

^[ 同Esc,回到普通模式
^c 回到普通模式
^@ 輸入上次輸入的內容,並回到普通模式

^a 輸入上次輸入的內容,不回到普通模式

^h 同Backspace

^w 刪除左邊的單詞

^u 刪除當前行內所有輸入的內容

^i 同Tab

^j或^m 同Enter

^k 字符 後面可再加個字符。輸入合體字母(digraph)

^n 下個關鍵字。如輸入一個詞後,在其位置之前,直接按此序列或輸入頭幾個字符後按此序列,則可插入該詞。

^p 上個關鍵字。如輸入一個詞後,直接按此序列或輸入頭幾個字符後按此序列,則可插入該詞。

^r 字符 插入對應的寄存器內容。

^t 本行增加一個縮進

^d 本行減少一個縮進

^v或^q 數字 輸入對應ASCII的字符。十進制最多三個字符,直接輸入;八進制最多三個字符,前綴o或O;十六進制最多兩個字符,前綴x或X;前綴u能輸入四位十六進制;前綴U能輸入八位十六進制。

^x CTRL-X模式。輸入任意字符則退出此模式並實際輸入該字符。

^e 輸入當前位置之下的字符

^y 輸入當前位置之上的字符

^gk 上移一行並定位在之前開始修改的列。比如,在第二行第二列輸入幾個字符,按此序列,則移到第一行第二列。

^gj 下移一行並定位在之前開始修改的列。比如,在第二行第二列輸入幾個字符,按此序列,則移到第三行第二列。

上檔或Ctrl加左、右方向鍵,移到前、後一詞詞首

上檔加上、下方向鍵,上、下翻頁

^o 臨時執行一普通模式下的命令

^\o 臨時執行一普通模式下的命令,且保持光標位置



EX Commands模式:保持在輸入命令模式

Q 進入,不更新屏幕

gQ 進入,更新屏幕

:vi 退出

:範圍a 在當前行下插入多行,以單獨的.結束輸入。後邊如果加!,則執行時切換自動縮進設置。

:範圍i 在當前行之上插入多行,以單獨的.結束輸入。後邊如果加!,則執行時切換自動縮進設置。


比較

:diffupdate或:diffu或:dif 重新比較

:diffs或:diffsplit 文件名 開始與另一文件比較

:diffthis或:difft 將當前窗口比較


窗口

命令行參數 -o 後加多個文件名 水平分割。改o爲O則垂直分割

數字^ws 或 :數字sp 文件名 以指定高度--水平分割

數字^wn 或 :數字new 以指定高度新建空白窗口

數字^wv 或 :數字vs 文件名  以指定寬度|垂直分割

:數字vne 以指定寬度新建空白窗口

z數字 或 :res 數字 或 數字^w_ 設置當前窗口高度

:vertical res 數字 或 數字^w| 設置當前窗口寬度

^w^f 開新窗口打開光標位置文件

^wp 到上一窗口

^wx 交換當前和下個窗口

^wr 順時針輪轉窗口

^wR 逆時針輪轉窗口

^wc或^wq或^w^q 關閉或退出窗口

:on或^wo或^w^o僅保留當前窗口

標籤 tabs

:tabnew 打開標籤

:tabclose 關閉標籤

:tabnext 到下個標籤

:tabprevious 到上個標籤

:tabedit 文件名  新開標籤編輯文件

緩存 buffers

:buffers或:ls或:files 顯示緩存器列表

:數字b   轉到緩存器

:數字bd  關閉緩存器

:hide edit 文件名  新開緩存器編輯文件


 

標記

小寫字母文件內有效,大寫字母所有文件間有效。數字從0到9表示最近關閉的文件中的位置。在移動到標記(`或')時,還可以使用:`是上一位置;"是同一寄存器上次退出時的位置;^是最近一次插入模式結束的位置;.是上一修改處;(和)是當前句首和句尾;{和}是當前段首和段尾。

m字母 做標記。可以寫單個字母、空格分開的多個字母、或減號分開的兩個字母表示多個字母。

`字母 跳到標記。大寫:所有文件;小寫:當前文件。

delm字母 刪標記。

:marks 顯示標記列表


二進制文件

打開文件加-b參數

:%!xxd

只能修改十六進制顯示部分,不能修改字符顯示部分

:%!xxd -r 刷新顯示

正常保存文件即可


:%!xxd ——將當前文本轉換爲16進制格式。
:%!od ——將當前文本轉換爲16進制格式。
:%!xxd -c 12——將當前文本轉換爲16進制格式,並每行顯示12個字節。
:%!xxd -r ——將當前文件轉換回文本格式。


拼寫檢查

:set spell 打開檢查。更詳細,可有:setlocal spell spelllang=en_us

]s 移到下個拼寫錯誤的詞

[s 移到上個拼寫錯誤的詞

zg 將當前詞加到詞典

zw 將當前詞加到錯誤詞彙表

zug 將當前詞從詞典刪除

zuw 將當前詞從錯誤詞彙表刪除

:spe 詞 將詞加到詞典

:spellw 詞 將詞加到錯誤詞彙表

:spellu 詞 將詞從詞典刪除

z= 更正當前詞

:spellr 將z=操作應用於本窗口所有出現處

^x 插入模式下,提示當前詞的備選。^n和^p在備選間切換。

遠程編輯

文件名處寫 scp://用戶名@地址:端口/文件名

如果編輯~/.ssh/config爲

host 簡稱 User 用戶名
Hostname 地址
Port 端口

則可以寫 scp://簡稱/文件名


寄存器 registers

:registers或:reg或:dis 顯示寄存器列表

在命令行,先按^r再寫寄存器名,可輸入其內容

"字母或數字等 指定下次操作使用的寄存器。後面可以寫y命令、Y命令、p命令或P命令

" 無名寄存器 保存d、c、s、x、y命令刪除或拷貝的內容,p命令粘貼時默認使用的寄存器

- 刪除的少於一行的內容,且刪除時不是根據%()`/?nN{}之一移動的

0 拷貝命令y中最新的內容,除非命令指定了其它特定的

1-9 1是刪除的一行以上或根據%()`/?nN{}之一移動的,或修改命令中最新的內容,9是最舊的

小寫字母 指定寄存器。新內容替換舊內容

大寫字母 指定寄存器。新內容添加到舊內容之後

_ 存往該寄存器則不實際保存;從該寄存器讀也不返回數據

/ 搜索的模式

= 計算器。插入或命令模式下,^r=然後輸入整數算式

:let @寄存器名="內容":修改寄存器內容

:範圍co 地址 從範圍處拷貝到地址處之下

:t 與:co相同

:範圍m 地址 從範圍處拷貝到地址處之下

以下四個只讀寄存器只能在粘貼或^R命令使用

. 上次插入的文本

% 當前文件的名字

# 替換文件的名字

: 上次執行的命令行

 

 

範圍

% 全局

} 一段

 

行號,行號

/< 單詞首

/> 單詞尾

 

錄製與播放 

q小寫字母 開始錄製

q 結束錄製

@小寫字母 播放

:次數@小寫字母 多次播放

 

文字變化

~ 轉換大小寫並右移光標

guw 當前詞變爲小寫

gUw 當前詞變爲大寫

^a 當前數字(或字母)增一

^x 當前數字(或字母)減一

當nrformats選項包含:octal時,如果以0開頭則爲八進制,除非其中含有8或9;hex時,0x或0X開頭的是十六進制,數字中最後一位字母或上次使用的情況決定新字母的大小寫;alpha時,包含字母。

:sort 排序

gq範圍 根據textwidth設置限制選區文字寬度

 

搜索與模式

/模式/偏移 正向搜索

?模式?偏移 反向搜索

偏移:

數字 或 +數字 向下指定行

-數字 向上指定行

e+數字 或 e-數字 匹配處最後向右或左移指定個字符

s+數字 或 e-數字 匹配處最開始向右或左移指定個字符

b+數字 或 b-數字 與 s+數字 或 e-數字 相同

模式:

* 其前面的字符重複若干(包括0)次

+ 其前面的字符重複若干(不包括0)次。需要轉義,用“/+”

= 其前面的字符可有可無。需要轉義,用“/=”

(內容) 將內容分爲同一個組

 

{次數} 其前面的字符重複指定次數。{需要轉義,用“/{”

{次數,次數} 其前面的字符重複指定次數範圍(含)之間,兩個默認值分別爲0次和無限制。{需要轉義,用“/{”

| 或。需要轉義,用“/|”

& 與。需要轉義,用“/&”

[範圍] 匹配範圍內的任何一個字符,可以用“-”列出範圍

[^範圍] 匹配除範圍內任一字符之外所有字符

. 任意字符

/a 大小寫字母

/l 小寫字母

/L 非小寫字母

/u 大寫字母

/U 非大寫字母

/d 數字

/D 非數字

/x 數字或大小寫字母

/X 非數字且非大小寫字母

/s 空格或列表符

/S 非空格且非列表符

/_上述被轉義的字母 該字母對應字符或回車

 

 /t Tab

/r Enter(CR)

/b Backspace(BS)

* 查找當前詞,整詞查找

# 反向查找當前詞,整詞查找

g* 查找當前詞,非整詞查找

g# 反向查找當前詞,非整詞查找

n 重複上次搜索

N 重複上次搜索,但是反向

g# 與#類似,但是不在詞旁加/<和/>

gd 到函數內聲明處

gD 到全文中聲明處

:範圍g/模式/命令 在範圍內符合模式的行中執行命令

 & 同:s

 去除所有行尾空格 :%s/\s\+$// 其中,\s是空格和製表符,\+是任意多個

去除所有“//” :%s!\s*//.*!! 用感嘆號作分隔符

去除所有“/*”……“*/” :%s!\s*/\ *\_.\{-}\*/\s*!!g 其中\_.匹配包含換行符內的所有字符,\{-}是任意多個(包括0)

 

命令行

命令行參數 +命令 或 -c 命令 啓動後執行該命令

<S-Left> or <C-Left> one word left
<S-Right> or <C-Right> one word right

^w 刪除前邊的詞

^u 刪除整行

^d 顯示補全的所有可能

q: 顯示歷史,可以進行編輯

^r寄存器 將寄存器內容添加到命令行

 

 

 

命令記錄

q數字或字母 開始將操作記錄到寄存器

Q數字或字母 開始將操作記錄附加到寄存器

q 結束記錄

次數@寄存器名 執行寄存器中的操作指定次數,默認爲一次

 

 

 顯示當前文件的名

:!echo %

:!echo %:t:r 文件基本名

:!echo %:p 文件名絕對路徑

:!echo %:h 文件所在目錄

 

縮進

:範圍le 縮進 將指定範圍的行(默認爲當前行)靠左進行指定縮進(默認爲0)

gq動作 格式化

gqq 格式化當前行

gw與上兩個gq使用類似

 >動作 縮進行,“動作”指如光標移動。前邊可以加數字指定幾行

>> 縮進一行

>% 縮進區塊

>`字母 縮進到標記處

:範圍> 次數

< 取消縮進,替換上述>操作

= 自動縮進,替換上述>操作

:範圍le 縮進級數  左對齊到指定縮進級數(默認爲0)

]p 粘貼時自動縮進

={ 自動縮進當前區塊

== 自動縮進當前行

gg=G 自動縮進所有

:set cindent 設置C語言風格自動縮進

:set autoindent 設置按上行縮進

:set expandtab 設置將製表鍵轉換爲空格

:set no設置項 取消設置

:set softtabstop=縮進 設置自動縮進時,縮進會使用此值對應的空格數或製表

:set shiftwidth=縮進 自動或手動縮進時採用此值

 

替換(substitution)

:g/內容 顯示所有包含內容的行(因爲:g是對所有匹配行執行操作)。需要多個內容時,可以用\|分隔

:g/內容/d 刪除所有包含內容的行

:v/內容/d 或:g!/內容/d 刪除所有不包含內容的行

:g/^\s*$/d 刪除所有無內容行

:範圍s/被替換/新內容/標誌 次數

 

 

:&

 

 

默認爲行內一次

標誌:

& 上次的標誌

c 每次替換都需要確認:y替換,l替換並結束替換,n不替換,ESC或q結束替換,a替換所有剩下的

e 不顯示出錯提示……

g 替換行內所有

i 忽略大小寫

I 區分大小寫

n 顯示實際替換內容次數而並不實際執行替換

重複上次替換動作(忽略標誌;如果想使用上次的標誌,需要用:&&)

 

次數@ 執行上次命令行指定次數,默認爲一次

 

^ 行中第一個字符處

$ 行尾

%^ 文件首

%$ 文件尾

%# 當前光標處

 

選項

定義某一文件的特定選項:比如在c代碼文件開頭寫/* vim: set tabstop=4 shiftwidth=4 expandtab: */(:help modeline查看對應幫助)

:set - shows vars different from defaults
:set all - shows all values
:set foo? - shows the value of foo
:set foo+=opt - add opt to the value w/o changing others
:set foo-=opt - remove opt from value
:set foo& - reset foo to default value
:setlocal foo - only the current buffer

textwidth 重新自動設置文本寬度時的值

formatoptions t根據textwidth自動折行;c在代碼中自動對註釋折行、插入合適的註釋標誌;r在註釋中回車時自動插入合適的註釋標誌;q允許用gq命令重新格式化文本寬度;n識別編號列表,編號行的下一行的縮進由數字後的空白決定;2一段的第二行的縮進決定縮進;l超過textwidth時不重新格式化;m在多字節字符之間允許折行;M拼接兩行時在多字節字符間不插入空格。默認爲tcq,宜在.vimrc中加入“set formatoptions+=mM”

布爾型變量加前綴no爲相反設定。
backup 布爾型,默認關。修改文件前備份。
backupcopy  unix默認爲yes,其它默認爲auto。yes:備份並重寫原文件;no:重全名並新建文件;auto:自動選擇此兩種。
backupdir  unix默認爲.,~/tmp,~/,DOS、Win32默認爲.,c:/temp,c:/temp。
backupext  默認爲~,VMS是_。
backupskip  默認爲/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*。不備份一些文件。
writebackup 布爾型,有+writebackup特性時默認開,其它默認關。覆蓋文件前先備份,成功覆蓋後刪除備份。
binary  即將修改二進制文件。亦可通過命令行參數-b使用。

confirm 布爾型,默認關。在因緩存未保存贊成失敗時,顯示對話框。

diffopt  比較模式使用的選項。

errorbells  布爾型,默認關。在出錯時響鈴。

indentkeys  默認爲0{,0},:,0#,!^F,o,O,e

nrformats  默認爲octal,hex。

number  布爾型,默認關。顯示行號。

showbreak  默認爲空。在轉行的行首顯示字符串。

showfulltag 布爾型,默認關。插入狀態下,補全時顯示更多信息。

visualbell 布爾型,默認關。響鈴時顯示可視效果。

wrap 布爾型,默認開。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章