看到一些VIM 編寫代碼的強大的插件:
function parameter complete, code snippets, and much more
http://www.vim.org/scripts/script.php?script_id=1764
echofunc.vim : Echo the function declaration in the command line for C/C++
http://www.vim.org/scripts/script.php?script_id=1735
讓你的vim能夠查看函數列表
http://www.fwolf.com/blog/post/253授權方式:署名,非商業用途,保持一致,轉載時請務必以超鏈接(http://www.fwolf.com/blog/post/253)的形式標明文章原始出處和作者信息及本聲明。
TagList插件,是一款基於ctags,在vim代碼窗口旁以分隔窗口形式顯示當前文件的代碼結構概覽,增加代碼瀏覽的便利程度的Vim插件。官方網址:Tag List,當前最新可用版本爲v4.5.
1. 安裝
①下載taglist_45.zip
②解壓
將taglist.zip文件解壓至~/.vim文件夾下(壓縮包中包含有插件文件plugin/taglist.vim和幫助文件doc/taglist.txt)。
③生成幫助
命令行中切換當前路徑至~/.vim/doc文件夾,進入vim後執行命令
:helptags .
也可以在任意文件夾下,進入vim後執行命令
:helptags ~/.vim/doc
④環境檢查
taglist插件依賴於ctags及其所生成的標籤文件,如果用戶路徑設置中未包含ctags命令所在路徑,可以在vim設置文件中配置Tlist_Ctags_Cmd變量,指向ctags命令(而非ctags命令所在路徑)。
檢查Vim是否打開了filetype on選項。
如Vim所在終端/控制檯不支持改變窗口寬度,在Vim配置文件中配置變量Tlist_Inc_Winwidth爲0.
⑤重啓Vim
2. 標籤列表窗口
標籤列表窗口中以目錄樹的形式組織各級標籤:文檔作爲第一級,類別組標籤(如宏標籤組/函數標籤組/變量標籤組等)作爲第二級,而具體的對象標籤則爲第三級(葉子結點)。
如圖所示:
3. 基本使用
在Vim中加載代碼文件後,可以使用以下命令控制taglist
- :TlistOpen 打開並將輸入焦點至於標籤列表窗口
- :TlistClose 關閉標籤列表窗口
- :TlistToggle 切換標籤列表窗口狀態(打開←→關閉),標籤列表窗口是否獲得焦點取決於其他配置
- ctl-w + w 或ctl-w + 方向鍵 窗口切換(taglist本質上是一個vim分隔窗口,因此可以使用ctl-w系列快捷鍵對窗口進行切換操作)
- 使用鼠標單擊切換當前窗口,或在標籤列表窗口某標籤上雙擊使代碼窗口內窗跳轉至標籤定義
- 標籤列表窗口內,當光標停留在某個標籤之上時,回車鍵可切換代碼窗口內容至標籤定義; 'o',在分隔窗口中顯示;'t',在vim新標籤窗口中顯示
4. 選項控制變量
在Vim配置文件中,可通過"let"語句設定以下變量控制taglist:
- Tlist_GainFocus_On_ToggleOpen : 爲1則使用TlistToggle打開標籤列表窗口後會獲焦點至於標籤列表窗口;爲0則taglist打開後焦點仍保持在代碼窗口
- Tlist_Auto_Open : 爲1則Vim啓動後自動打開標籤列表窗口
- Tlist_Close_On_Select : 選擇標籤或文件後是否自動關閉標籤列表窗口
- Tlist_Exit_OnlyWindow : Vim當前僅打開標籤列表窗口時,是否自動退出Vim
- Tlist_Use_SingleClick : 是否將默認雙擊標答打開定義的方式更改爲單擊後打開標籤
- Tlist_Auto_Highlight_Tag : 是否高亮顯示當前標籤。命令":TlistHighlightTag"也可達到同樣效果
- Tlist_Highlight_Tag_On_BufEnter : 默認情況下,Vim打開/切換至一個新的緩衝區/文件後,標籤列表窗口會自動將當前代碼窗口對應的標籤高亮顯示。TlistHighlight_Tag_On_BufEnter置爲0可禁止以上行爲
- Tlist_Process_File_Always : 爲1則即使標籤列表窗口未打開,taglist仍然會在後臺處理vim所打開文件的標籤
- Tlist_Auto_Update : 打開/禁止taglist在打開新文件或修改文件後自動更新標籤。禁止自動更新後,taglist僅在使用:TlistUpdate,:TlistAddFiles,或:TlistAddFilesRecursive命令後更新標籤
- Tlist_File_Fold_Auto_Close : 自動關閉標籤列表窗口中非激活文件/緩衝區所在文檔標籤樹,僅顯示當前緩衝區標籤樹
- Tlist_Sort_Type : 標籤排序依據,可以爲"name"(按標籤名排序)或"order"(按標籤在文件中出現的順序,默認值)
- Tlist_Use_Horiz_Window : 標籤列表窗口使用水平分割樣式
- Tlist_Use_Right_Window : 標籤列表窗口顯示在右側(使用垂直分割樣式時)
- Tlist_WinWidth : 設定水平分割時標籤列表窗口的寬度
- Tlist_WinHeight : 設定垂直分割時標籤列表窗口的高度
- Tlist_Inc_Winwidth : 顯示標籤列表窗口時允許/禁止擴展Vim窗口寬度
- Tlist_Compact_Format : 減少標籤列表窗口中的空白行
- Tlist_Enable_Fold_Column : 是否不顯示Vim目錄列
- Tlist_Display_Prototype : 是否在標籤列表窗口用標籤原型替代標籤名
- Tlist_Display_Tag_Scope : 在標籤名後是否顯示標籤有效範圍
- Tlist_Show_Menu : 在圖型界面Vim中,是否以下拉菜單方式顯示當前文件中的標籤
- Tlist_Max_Submenu_Item : 子菜單項上限值。如子菜單項超出此上限將會被分隔到多個子菜單中。缺省值爲25
- Tlist_Max_Tag_Length : 標籤菜單中標籤長度上限
5. 標籤列表窗口快捷鍵
taglist快捷鍵:
- <CR> : 代碼窗口跳轉到標籤列表窗口中光標所在標籤定義處
- o : 在新建代碼窗口中跳轉到標籤列表窗口中光標所在標籤定義處
- P : 跳轉至上一個窗口的標籤處
- p : 代碼窗口中內容跳轉至標籤定義處,光標保持在標籤列表窗口中
- t : 在Vim新標籤窗口中跳轉至標籤定義處。如文件已經在Vim標籤窗口中打開,則跳轉至此標籤窗口
- Ctrl-t : 在Vim新標籤窗口處跳轉至標籤定義處
- : 顯示光標當前所在標籤原型。對文件標籤,顯示文件的全路徑名,文件類型和標籤數量。對標籤類型(指如variable/function等類別),顯示標籤類型和擁有標籤的數量;對函數/變量等普通標籤,顯示其定義的原型
- u : 更新標籤列表窗口中的標籤信息
- s : 切換標籤排序類型(按名稱序或出現順序)
- d : 移除當前標籤所在文件的所有標籤
- x : 擴展/收縮標籤列表窗口
- + : 展開摺疊節點*
- - : 摺疊結點*
- * : 展開所有結點
- = : 摺疊所有節點
- [[ : 跳轉至上一個文件標籤的頭部
- <Backspace> : 跳轉至上一個文件標籤頭部
- ]] : 跳轉至下一個文件標籤頭部
- <Tab> : 跳轉至下一個文件標籤頭部
- q : 關閉標籤列表窗口
- F1 : 顯示幫助**
*ubuntu10.10+Vim7.2+Taglist4.5環境下,'+'似乎也是將節點摺疊起來,而非展開。左右方向鍵'←'和'→'可以展開節點。
**同上環境中,F1給出的是Gnome幫助手冊而非Taglist幫助。
6. taglist命令
taglist在Vim中提供了以下擴展命令:
- :TlistAddFiles {files(s)} [file(s)...] 添加一或多個指定文件(的標籤項)到標籤列表窗口中。文件名錶達式中可使用通配符(*);如文件名中帶有空格,需要使用反斜槓對空格進行轉義("\ ")
- :TlistAddFilesRecursive {directory} [{pattern}] 遍歷指定路徑{directory},將與模式{pattern}相匹配的文件加入標籤列表窗口。如未指定pattern,則使用缺省值'*'。如路徑中包含空格,需使用反斜槓'\'轉義("\ ")
- :TlistClose 關閉標籤列表窗口
- :TlistDebug [filename] 記錄taglist插件的調試信息。如指定了filename,則調試信息將被寫入此指定文件(如文件已存在,內容將被覆蓋);如未指定filename,則調試信息寫入腳本的局部變量中
- :TlistLock 鎖定標籤列表,並且不處理新打開的文件
- :TlistMessage 僅當調試信息寫入腳本局部變量時有效,顯示記錄的調試信息
- :TlistOpen 打開並跳轉至標籤列表窗口
- :TlistSessionSave {filename} 將當前打開文件及其標籤信息寫入指定文件
- :TlistSessionLoad {filename} 從指定文件載入所保存的會話信息
- :TlistShowPrototype [filename] [linenumber] 顯示指定文件中指定代碼行或之前的標籤的原型。如未指定文件名/行號,則使用當前文件名/當前行號
- :TlistShowTag [filename] [linenumber] 顯示指定文件中指定代碼行或之前標籤名稱。如未指定文件名/行號,則使用當前文件名/當前行號
- :TlistHighlightTag 加亮顯示標籤窗口中的當前標籤
- :TlistToggle 在打開和關閉狀態間切換標籤窗口的狀態。標籤窗口切換至打開狀態後仍然光標保持在代碼窗口中
- :TlistUndebug 停止記錄taglist插件調試信息
- :TlistUnlock 解鎖標籤列表,並處理新打開的文件
- :TlistUpdate 更新當前緩衝區的標籤信息
7. 全局函數
taglist插件爲Vim提供了一些全局函數,可供其他插件使用:
- Tlist_Update_File_Tags({filename}, {filetype}) 以指定文件類型更新指定文件的標籤信息。如taglist插件此前未處理過指定文件,則會調用ctags對文件進行分析
- Tlist_Get_Tag_Prototype_By_Line([{filename}, {linenumber}]) 獲取指定文件中指定行號或之前標籤的原型信息。如未指定文件名/行號,則使用當前緩衝區對應文件/當前行號
- Tlist_Get_Tagname_By_Line ([{filename}, {linenumber}]) 獲取指定文件中指定行號或之前標籤的名稱信息。如未指定文件名/行號,則使用當前緩衝區對應文件/當前行號
- Tlist_Set_App({appname}) 設置正在控制taglist的插件名稱
8. 其他
更多幫助,可參考Taglist Manual,或在Vim中執行以下命令獲取
:help taglist.txt
http://www.cnblogs.com/dubing/archive/2011/12/16/2290421.html
【linux+C】神器 vim
2011-12-16 16:48 by 熬夜的蟲子, 2439 閱讀, 20 評論, 收藏, 編輯前篇回顧
上篇介紹了linux下C編程基本環境配置以及相關工具使用選擇。
不過10個大牛9個用vim,那麼咱們就來玩vim。linux下玩c就別依靠圖形界面。好吧告別Ide,命令行纔是c的王道。
本篇文章感謝名爲孫鶴同學的技術支持 感謝有愛的c大牛們
本文中多處使用vim插件(孫鶴提供),這些插件大多是在http://www.vim.org/處下載。
vim的配置文件
~/.vimrc 用戶的默認配置文件
~/.vim/plugin/ 用戶的默認腳本文件的存放目錄
~/.vim/ftplugin/ 用戶的默認文件類型相關腳本文件的存放目錄
vim提供的編程支持
文本信息(行號、文件名等)
代碼縮進
語法高亮
快速定位
標記位置
全文搜索
補全
多文件編輯
多窗口編輯
函數列表
文件列表
函數跳轉
語法錯誤
字符集的編碼
二進制查看
等等...
初試vim
在終端以root啓動 輸入vim命令 顯示vim首頁
:r filename 讀入一個文件內容,並寫入到當前編輯器中
按i進入插入模式
編輯完後:w保存
編輯完後按esc退出插入模式 進入正常模式
然後輸入:sh進入shell
編譯運行
文本信息配置
set nu(寫入配置文件.vimrc中) 顯示行號。
ctrl-g(正常模式下使用命令) 顯示文件信息和當前行。
statusline.vim(插件) 增加底部狀態欄。
代碼縮進配置
filetype on(寫入配置文件.vimrc中) 使vim對文件類型敏感。
autocmd FileType c,cpp,h :setlocal cindent cinoptions=:0,g0,t0(寫入配置文件.vimrc中) 設置c縮進風格,具體詳情參見:h cinoptions-values。
autocmd FileType c,cpp,h :setlocal et sta sw=4 sts=4 tabstop=4(寫入配置文件.vimrc中) 設置一次縮進的距離是4個空格。
=(正常模式或者可視模式下使用命令) 按照縮進風格排版代碼。
<(可視模式下使用命令) 向左縮進一級。
>(可視模式下使用命令) 向右縮進一級。
語法高亮
filetype plugin on(寫入配置文件.vimrc中) 通常安裝的vim中已經加入了各種語言的語法高亮插件,我們只需要打開文件類型相關的插件就可以了。
快速定位
gd(正常模式下使用命令) 跳轉到局部變量定義處。
gD(正常模式下使用命令) 跳轉到全局標量定義處。
*(正常模式下使用命令) 搜索並跳到下一個光標所在的單詞。
g*(正常模式下使用命令) 功能接近*,但是查找的目標不帶\<和\>單詞分界符號。
#(正常模式下使用命令) 搜索並跳到上一個光標所在的單詞。
g#(正常模式下使用命令) 功能接近#,但是查找的目標不帶\<和\>單詞分界符號。
標記位置
m{a-zA-Z0-9} (正常模式下使用命令) 在當前位置製作一個標記,標記名字可以使用a-z或者A-Z之間的任意字符,例如輸入ma,就是將當前位置標記爲a標記。注意a-z爲單文件標記,不可跨文件使用,而A-Z0-9爲全局標記,可以跨文件使用。
‘{a-zA-Z0-9} (正常模式下使用命令) 跳轉到本文件的標記上。
:marks [{a-zA-z0-9}] (正常模式下使用命令) 查看指定標記的內容,不寫標記號則查看所有。
:delm {a-zA-z0-9} (正常模式下使用命令) 刪除一個標記。
全文搜索
:vimgrep(正常模式下使用命令) 全文搜索,功能同grep命令,但是支持在vim進行多文件跳轉定位。
使用方法:vimgrep 正則表達式 文件。文件支持通配符,例如*.c代表所有的.c文件。如果希望遞歸搜索,可以使用**/*,表示搜索所有的文件。
:cl 列舉結果
:cc(正常模式下使用命令) 當前結果
:cn(正常模式下使用命令) 下一個結果
:cp(正常模式下使用命令) 上一個結果
:cw(正常模式下使用命令) 重新打開搜索結果窗口
多文件編輯
vim f1 f2 …… fn(在shell下使用命令) 打開多個文件。
:e 文件名(正常模式下使用命令) 在vim中打開新文件。
:ls(正常模式下使用命令) 所有打開文件列表。
:bn(正常模式下使用命令) 到下一個文件。
:bp(正常模式下使用命令) 到上一個文件。
:b# 或 ctrl-6(正常模式下使用命令) 到最近的前一個文件。
set autowriteall(寫入配置文件.vimrc中) 如果討厭每次打開新文件,vim喋喋不休的要求你保存,那麼可以設置自動保存。
http://fghjk.blog.51cto.com/4359709/804336
打開多個文件:
1.vim還沒有啓動的時候:
在終端裏輸入
vim file1 file2 ... filen便可以打開所有想要打開的文件
2.vim已經啓動
輸入
:open file
可以再打開一個文件,並且此時vim裏會顯示出file文件的內容。
同時顯示多個文件:
:split
:vsplit
在文件之間切換:
1.文件間切換
Ctrl+6—下一個文件
:bn—下一個文件
:bp—上一個文件
對於用(v)split在多個窗格中打開的文件,這種方法只會在當前窗格中切換不同的文件。
2.在窗格間切換的方法
Ctrl+w+方向鍵——切換到前/下/上/後一個窗格
Ctrl+w+h/j/k/l ——同上
Ctrl+ww——依次向後切換到下一個窗格中
多窗口編輯
:sp 文件名(正常模式下使用命令) 橫向拆分窗口(多行窗口)。
:vsp 文件名(正常模式下使用命令) 縱向拆分窗口(多列窗口)。
ctrl-w h(正常模式下使用命令) 將光標移動到左一個窗口。
ctrl-w j(正常模式下使用命令) 將光標移動到下一個窗口。
ctrl-w k(正常模式下使用命令) 將光標移動到上一個窗口。
ctrl-w l(正常模式下使用命令) 將光標移動到右一個窗口。
ctrl-w +(正常模式下使用命令) 當前窗口尺寸變大。
ctrl-w -(正常模式下使用命令) 當前窗口尺寸變小。
ctrl-w o(正常模式下使用命令) 只顯示當前窗口。
函數列表
taglist.vim(插件) 列表插件。
let Tlist_Use_Right_Window = 1(寫入配置文件.vimrc中) 如果希望列表在右側顯示,則加入這個配置,默認是左側。
:Tlist(正常模式下使用命令) 顯示函數列表。
d(在taglist窗口下使用) 從列表中刪除文件。
+(在taglist窗口下使用) 展開文件。
-(在taglist窗口下使用) 摺疊文件。
=(在taglist窗口下使用) 摺疊所有文件。
x(在taglist窗口下使用) 顯示或隱藏正常窗口。
文件列表
NERD_tree.vim(插件) 橫向拆分窗口(多行窗口)。
let NERDTreeWinPos = 'right'(寫入配置文件.vimrc中) 如果希望文件樹在右側顯示,則加入這個配置,默認是左側。
:NERDTree(正常模式下使用命令) 顯示文件列表。
函數跳轉
ctags(軟件,需要另外安裝) 生成多種語言tag文件的軟件。
Ctags –R *.c(在shell下使用命令) 生成當前路徑所有.c文件的tag,-R代表遞歸。
:ta 標記 或 [g] ctrl-] 列舉標籤(多個標籤)或者跳轉到標籤(單個標籤)。
ctrl-t 返回上一級。
:tags 列出標籤棧。
語法錯誤
:make(正常模式下使用命令) 執行外部make命令,並且顯示所有的編譯警告和錯誤,並且可以在vim中定位。
:cl 列舉結果
:cc(正常模式下使用命令) 當前結果
:cn(正常模式下使用命令) 下一個結果
:cp(正常模式下使用命令) 上一個結果
:cw(正常模式下使用命令) 重新打開搜索結果窗口
二進制文件查看 (鑑於有同學理解出現分歧 將二進制查看更新爲二進制文件查看)
:範圍!xxd(正常模式下使用命令) 把指定範圍的部分轉化爲二進制文件閱讀方式。
:範圍!xxd -r(正常模式下使用命令) 把指定範圍的部分轉回字符閱讀方式。
字符集的編碼
let &termencoding=&encoding
set fileencodings=utf-8,gbk,cp936(寫入配置文件.vimrc中)
加入多種字符編碼支持。
:set fileencoding(正常模式下使用命令) 設定文件字符編碼。
補充
ctrl-p(插入模式下使用命令) 跳出補全菜單。
ctrl-n(在跳出補全菜單後) 下一個結果。
ctrl-p(在跳出補全菜單後) 上一個結果。
ctrl-y(在跳出補全菜單後) 選擇當前結果。
ctrl-x ctrl-f(插入模式下使用命令) 文件名補全。
ctrl-x ctrl-i(插入模式下使用命令) 包含的頭文件。
ctrl-x ctrl-](插入模式下使用命令) ctags(將在下文中介紹)符號補全。
ctrl-x ctrl-o(插入模式下使用命令) omni補全,需要設置omnifunc變量。
vim其他命令 (參考vi(vim)教程)
打開文件、保存、關閉文件:
vi filename //打開filename文件
:w //保存文件
:w vpser.net //保存至vpser.net文件
:q //退出編輯器,如果文件已修改請使用下面的命令
:q! //退出編輯器,且不保存
:wq //退出編輯器,且保存文件
插入文本或行:
a //在當前光標位置的右邊添加文本
i //在當前光標位置的左邊添加文本
A //在當前行的末尾位置添加文本
I //在當前行的開始處添加文本(非空字符的行首)
O //在當前行的上面新建一行
o //在當前行的下面新建一行
R //替換(覆蓋)當前光標位置及後面的若干文本
J //合併光標所在行及下一行爲一行(依然在命令模式)
移動光標:
使用上下左右方向鍵
命令模式下:h 向左、j 向下 、k 向上、l 向右。
空格鍵 向右、Backspace 向左、Enter 移動到下一行首、- 移動到上一行首。
刪除:
x //刪除當前字符
nx //刪除從光標開始的n個字符
dd //刪除當前行
ndd //向下刪除當前行在內的n行
u //撤銷上一步操作
U //撤銷對當前行的所有操作
搜索:
/vpser //向光標下搜索vpser字符串
?vpser //向光標上搜索vpser字符串
n //向下搜索前一個搜素動作
N //向上搜索前一個搜索動作
跳轉:
n+ //向下跳n行
n- //向上跳n行
nG //跳到行號爲n的行
G //跳至文件的底部
設置行號:
:set nu //顯示行號
:set nonu //取消顯示行號
複製:
yy //將當前行復制到緩存區,也可以用 "ayy 複製,"a 爲緩衝區,a也可以替換爲a到z的任意字母,可以完成多個複製任務。
nyy //將當前行向下n行復制到緩衝區,也可以用 "anyy 複製,"a 爲緩衝區,a也可以替換爲a到z的任意字母,可以完成多個複製任務。
yw //複製從光標開始到詞尾的字符。
nyw //複製從光標開始的n個單詞。
y^ //複製從光標到行首的內容。
y$ //複製從光標到行尾的內容。
p //粘貼剪切板裏的內容在光標後,如果使用了前面的自定義緩衝區,建議使用"ap 進行粘貼。
P //粘貼剪切板裏的內容在光標前,如果使用了前面的自定義緩衝區,建議使用"aP 進行粘貼。
替換:
:s/old/new //用new替換行中首次出現的old
:s/old/new/g //用new替換行中所有的old
:n,m s/old/new/g //用new替換從n到m行裏所有的old
:%s/old/new/g //用new替換當前文件裏所有的old
編輯其他資源:
:e otherfilename //編輯文件名爲otherfilename的文件。
修改文件格式:
:set fileformat=unix //將文件修改爲unix格式,如win下面的文本文件在linux下會出現^M。
其他參考鏈接:
http://blog.csdn.net/sabalol/article/details/3426635
http://hi.baidu.com/howard1980/blog/item/3399e42668751b0a908f9d5f.html