正所謂「工欲善其事,必先利其器」,而作為一個專業的碼農,怎麼能不好好對待自己編程的利器-- VIM 編輯器呢!可能讀者會說編程的利器不應該是各種語言的集成工具麼?像編寫 C/C++ 程序的 VS,Codeblock(跨平臺)軟體,像編寫 Java 程序的 Eclipse(現在已經有支持 C/C++/Python 的插件),像編寫 Python 程序的 PyCharm 等。這些人性化的開發集成環境功能強大,使用方便。不過成也在此,敗也在此。本文將詳細介紹Vim編輯器以及其基本入門級配置。
簡介正所謂「工欲善其事,必先利其器」,而作為一個專業的碼農,怎麼能不好好對待自己的編程利器-- VIM 編輯器呢!可能讀者會說編程的利器不應該是各種語言的集成工具麼?像編寫 C/C++程序的 VS,Codeblock(跨平臺)軟體,像編寫 Java 程序的 Eclipse(現在已經有支持 C/C++/Python 的插件),像編寫 Python 程序的 PyCharm 等。這些人性化的開發集成環境功能強大,使用方便。不過我覺得成也在此,敗也在此。
1.功能冗餘
現在編程的集成環境工具非常強大,但是很多功能我們都用不到,反而每次開啟都花費很長時間。所以集成環境並不適合專業的碼農。我們經常說適合自己的才是最好的,編程利器更是如此,畢竟它每天不離手。2.定製化太低 基本上每個集成開發工具都沒有留太多的定製空間給用戶,而用戶只能習慣軟體供應商提供的大眾化用法。對於熟悉多種語言的用戶而言,它得掌握多種開發集成環境,還不如用Vim解決所有。3.滑鼠和鍵盤的混合使用
其實這一點仁者見仁,智者見智吧。個人覺得高效編程還是需要手不離鍵盤的,要熟練掌握一些基本的快捷鍵的使用。
基本的 Vim 說白了就是一個文本編輯器,不過它的強大之處在於它龐大的插件。這些插件可以讓Vim能夠幹很多牛x的事,這跟 Google 瀏覽器有點像。像代碼補全,錯誤跳轉,高亮顯示等等,Vim 都有相應的插件來處理,用戶可以自行了解,自由組合。所以 Vim 的入門門檻還是蠻高的,主要是開始學得命令比較多,這裡有推薦個玩遊戲記命令的網址[1]以及Vim學習指南[2]。此外打造一個適合自己的 Vim 環境將會大大節約時間,是磨刀不誤砍柴工的。下面就來看看基礎入門級的Vim插件配置[3]。
基本配置1.安裝 vim,scripts,doc
sudo apt-get install vim vim-scripts vim-docTips:
•vim vim軟體,安裝目錄是/usr/share/vim•vim-scripts vim的基本插件,包括語法高亮等,安裝目錄是/usr/share/vim-scripts•vim-doc vim幫助文件,不過是英文版本的
2.中文幫助文檔
1.下載最新版本[4]的vim中文幫助文檔2.解壓 doc 文件夾到 ~/.vim 目錄下
3.配置 ~/.vimrc 文件 配置個性化的 .vimrc(不懂的命令可以用 :help command 查看中文幫助文檔)
實用插件Vim 的插件很多,而且功能很強大,非常強大。官網的插件地址在這裡[5],不過它的很多插件[6]都轉移到 Github 上。
•ctags
ctags 可以建立源碼樹的標籤索引(標籤就是一個標識符被定義的地方,如函數定義),使程式設計師在編程時能迅速定位函數、變量、宏定義等位置去查看原形。
1.安裝 exuberant-ctags 工具
sudo apt-get install exuberant-ctags2.創建 C++ 代碼庫索引
1.下載 libstdc++[7] 頭文件,包含 C++ 中 STL,streams 等。2.解壓到 ~/.vim/tags 目錄後執行 ctags 命令
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ cpp_src
mv tags ~/.vim/tags/cpptag3.在 .vimrc 中設置
set tags+=~/.vim/tags/cpptag3.創建 Gcc 代碼庫索引
1.ubuntu 中安裝完 build-essential 後,會在 /usr/include/c++ 目錄下有 C/C++ 的頭文件。
sudo apt-get install build-essential2.拷貝 /usr/include/c++/4.8 裡的文件到 ~/.vim/tags/gcc 文件夾裡後執行 ctags 命令
cp -R /usr/include/c++/4.8 ~/.vim/tags/gcc
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q gcc
mv tags ~/.vim/tags/gcctag3.在 .vimrc 中設置
set tags+=~/.vim/tags/gcctag•taglist
在屏幕右側出現的就是 taglist 窗口,從中可以看到文件中定義的所有 tag :宏、定義、變量、函數等;通過單擊某個 tag,可以跳到該 tag 定義的位置;也可以把某一類的 tag 摺疊起來,方便查看。
1.安裝 taglist
vim-addon-manager install taglist2.在 .vimrc 中配置
""""""""""""""""""""""""""""""""""
" 標籤列表的設置
""""""""""""""""""""""""""""""""""
" 啟動vim後,自動打開taglist窗口
let Tlist_Auto_Open=1
" 高亮顯示當前標籤列表中的標籤
let Tlist_Auto_Highlight_Tag=1
" 添加新文件後,標籤列表將自動更新
let Tlist_Auto_Update=1
" 顯示標籤域--類
let Tlist_Display_Tag_Scope=1
" 如果taglist窗口是最後一個窗口,則退出vim
let Tlist_Exit_OnlyWindow=1
" Taglist窗口裡可摺疊
let Tlist_Enable_Fold_Column=1
" 只顯示當前文件的標籤,摺疊其他文件的標籤
let Tlist_File_Fold_Auto_Close=1
" 多個文件間切換時,標籤列表也更新為當前文件
let Tlist_Show_One_File=1
" 標籤列表顯示在Buffer區的右邊
"let Tlist_Use_Right_Window=1
" 單擊標籤列表中的標籤將定位到標籤定義處
let Tlist_Use_SingleClick=13.自定義快捷鍵說明
•<F10> 打開/關閉標籤列表
•winmanager
WinManager 用於管理文件瀏覽器和緩衝區(buffer)。2.0 以上版本的 WinManager 還可以管理其他 IDE 類型插件,不過要用戶在插件中增加一些輔助變量和 hook 來支持WinManager(幫助文檔有相關說明)。
1.安裝 winmanager
vim-addon-manager install winmanager2.在 .vimrc 中配置
""""""""""""""""""""""""""""""""""
" 文件管理器
""""""""""""""""""""""""""""""""""
" 進入vim後自動打開winmanager
let g:AutoOpenWinManager =1
" 設置要管理的插件
let g:winManagerWindowLayout='FileExplorer|TagList'
" 如果所有編輯文件都關閉了,退出vim
"let g:persistentBehaviour=0
" <F9>打開/關閉文件管理器
nnoremap <silent> <F9> :WMToggle<CR>3.自定義快捷鍵說明
•<F9> 打開/關閉文件瀏覽器
•minibufexplorer
MiniBufferExplorer 用於瀏覽和管理 buffer ,如果只打開一個文件,是不會顯示在屏幕上的,而打開多個文件之後,會自動出現在屏幕上。Vim 也有自帶的 buffer 管理工具,不過只有 :ls, :bnext, :bdelete 等的命令, 既不好用, 又不直觀.
1.安裝minibufexplorer
vim-addon-manager install minibufexplorer2.在 .vimrc 中配置
""""""""""""""""""""""""""""""""""
" 緩衝區管理
""""""""""""""""""""""""""""""""""
" 用<C-h/j/k/l>切換到上下左右窗口
let g:miniBufExplMapWindowNavVim = 1
" 用Ctrl+箭頭切換到上下左右窗口
let g:miniBufExplMapWindowNavArrows = 1
"let g:bufExplorerMaxHeight=30
" 只有一個buffer,MiniBufExplorer這欄也會出現
"let g:miniBufExplorerMoreThanOne=0
" normal模式下<Tab>移動到下一個buffer,<C-Tab>上一個
nnoremap <silent> <Tab> :bn<CR>
nnoremap <silent> <C-Tab> :bp<CR>
" 不要在不可編輯內容的窗口(如TagList)中打開選中的buffer
let g:miniBufExplModSelTarget = 1"3.自定義快捷鍵說明
•<Tab> 移動到下一個buffer•<C-Tab> 移動到上一個buffer
•quickfix
通過 quickfix 命令集,你可在 Vim 內編譯程序並直接跳轉到出錯位置進行修正。你可以接著重新編譯並做修正,直到不再出錯為止。因為 quickfix 已經在 vim 裡集成了,只要配置就好了。
1.在 .vimrc 中配置
""""""""""""""""""""""""""""""""""
" QuickFix設置
""""""""""""""""""""""""""""""""""
" 按下<F2>,執行make
nnoremap <F2> :TlistToggle<CR> :make<CR><CR><CR> :copen<CR> :TlistToggle<CR>
" 按下<F12>,執行make clean
nnoremap <F12> :make clean<CR><CR><CR> :cclose<CR>
" 按下<F3>,光標移到上一個錯誤所在的行
nnoremap <F3> :cp<CR>
" 按下<F4>,光標移到下一個錯誤所在的行
nnoremap <F4> :cn<CR>2.自定義快捷鍵說明
•<F2> make當前程序•<F10> make clean當前程序•<F3> 光標移動到上一個錯誤所在行•<F4> 光標移動到下一個錯誤所在行
參考文獻1.有趣的vim遊戲[8]2.Vim學習指南[9]3.vim plugin[10]4.Vim Script[11]
References[1] 玩遊戲記命令的網址: http://vim-adventures.com/
[2] Vim學習指南: http://www.oschina.net/translate/learn-vim-progressively
[3] Vim插件配置: http://my.oschina.net/swuly302/blog/156784
[4] 最新版本: http://sourceforge.net/projects/vimcdoc/files/vimcdoc/
[5] 這裡: http://www.vim.org/scripts/script_search_results.php?order_by=creation_date&direction=descending
[6] 插件: http://vim-scripts.org/vim/scripts.html
[7] libstdc++: http://www.vim.org/scripts/download_script.php?src_id=9178
[8] 有趣的vim遊戲: http://vim-adventures.com/
[9] Vim學習指南: http://www.oschina.net/translate/learn-vim-progressively
[10] vim plugin: http://my.oschina.net/swuly302/blog/156784
[11] Vim Script: http://vim-scripts.org/vim/scripts.html