打算採用 Vim 作為 Linux C++ 程式開發環境的原因有兩個:
- CodeLite IDE 工具的專案目錄實在編得蠻糟糕的。
- Vim 的佔用資源小 (在我的 Chromebook/Ubuntu 就可以命列列模式執行並編譯 C++),可攜性高 (任何一種 Linux 系統下載馬上可以執行),擴展彈性高 (透過 plugin)。
而 Vim 的主要缺點就是 學習曲線高!
不過它比較能如倒吃甘蔗般,當習慣那些鍵盤操作後 (可能要好幾年),撰寫如 C++ 程式可塑性高太多了。
Vim 所有設定資訊均在於 .vimrc 檔案 (位於如 Home目錄下)。該設定檔的設定主要有兩個重點:
- 編輯器的基本屬性設定。 (如語法高亮、顯示行號、狀態顯示...等。)
- 外部擴展功能 (透過 3rd party plugin),如 nerdtree/taglist 插件的目錄結構/程式源碼的展現。
關於安裝多種 Plugin 的管理,一般會透過如 Vundle 這類插件管理工具來統籌管理所有插件。
個人目前的初始 .vimrc 設定內容,全係參考對岸所撰寫的文章:
o Vim改變生活,插件改變Vim (1) — 認識Vim。
o Vim改變生活,插件改變Vim (2) — 認識Vim。
相當滿意!
當然距離可以順暢撰寫 Linux C++ IDE 環境還有許多設定要作,這倒是慢慢來,逐漸熟悉主要對編程插件的操作使用就更能豐富 Vim 編程的功能。
底下先列出個人的 .vimrc 設定內容,同時也把 .vimrc 同步置於 Github 上,方便修改並部署在多部電腦上。
set nocompatible " be iMproved, required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins " call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' " The following are examples of different formats supported. " Keep Plugin commands between vundle#begin/end. " plugin on GitHub repo " Plugin 'tpope/vim-fugitive' " plugin from http://vim-scripts.org/vim/scripts.html " Plugin 'L9' " Git plugin not hosted on GitHub " Plugin 'git://git.wincent.com/command-t.git' " git repos on your local machine (i.e. when working on your own plugin) " Plugin 'file:///home/gmarik/path/to/plugin' " The sparkup vim script is in a subdirectory of this repo called vim. " Pass the path to set the runtimepath properly. " Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} " Avoid a name conflict with L9 " Plugin 'user/L9', {'name': 'newL9'} Plugin 'scrooloose/nerdtree' Plugin 'scrooloose/nerdcommenter' Plugin 'vim-scripts/taglist.vim' Bundle 'altercation/vim-colors-solarized' " Plugin 'bling/vim-airline' Plugin 'vim-scripts/winmanager' Plugin 'vim-scripts/a.vim' Plugin 'kien/ctrlp.vim' Plugin 'vim-scripts/OmniCppComplete' Plugin 'moll/vim-bbye' " All of your Plugins must be added before the following line call vundle#end() " required " filetype plugin indent on " required " To ignore plugin indent changes, instead use: "filetype plugin on " " Brief help " :PluginList - lists configured plugins " :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate " :PluginSearch foo - searches for foo; append `!` to refresh local cache " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal " " see :h vundle for more details or wiki for FAQ " Put your non-Plugin stuff after this line " 文件類型自動識別, Vundle要求必須為off " filetype on filetype plugin on filetype plugin indent on "-------------- "" Color Scheme "-------------- syntax enable set background=dark let g:solarized_termcolors=256 colorscheme solarized "---------------- "" 編輯器基本設定 "---------------- " 默認顯示行號 set nu " 設置(軟)製表符寬度為4: set tabstop=4 set softtabstop=4 " 設置自動縮進:即每行的縮進值與上一行相等;使用 noautoindent 取消設置: set autoindent " 設置(自動)縮進的空格數為4 set shiftwidth=4 " 設置 使用 C/C++ 語言的自動縮進方式: set cindent " 智能縮進 set smartindent "在狀態欄顯示正在輸入的命令 set showcmd "為方便複製,用<F2>開啟/關閉行號顯示: nnoremap <F2> :set nonumber!<CR> "搜索的時候即時顯示結果 set incsearch " 高亮搜索結果 set hlsearch " 禁止循環查找 set nowrapscan " 設置匹配模式,顯示匹配的括號 set showmatch " 智能補全 set completeopt=longest,menu " 設置歷史記錄為100條 set history=100 " 標尺,用於顯示光標位置的行號和列號,逗號分隔。每個窗口都有自己的標尺。如果窗口有狀態行,標尺在那裡顯示。否則,它顯示在屏幕的最後一行上。 set ruler " 括號引號補全 :inoremap ( ()<ESC>i :inoremap { {<CR>}<ESC>O :inoremap [ []<ESC>i " 摺疊設置 set foldmethod=syntax " 用語法高亮來定義摺疊 set foldlevel=100 " 啟動vim時不要自動摺疊代碼 " WinManager设置 " " NERD_Tree集成到WinManager let g:NERDTree_title="[NERDTree]" function! NERDTree_Start() exec 'NERDTree' endfunction function! NERDTree_IsValid() return 1 endfunction " 键盘映射,同时加入防止因winmanager和nerdtree冲突而导致空白页的语句 nmap wm :if IsWinManagerVisible() <BAR> WMToggle<CR> <BAR> else <BAR> WMToggle<CR>:q<CR> endif <CR><CR> " 设置winmanager的宽度,默认为25 let g:winManagerWidth=30 " 窗口布局 let g:winManagerWindowLayout='NERDTree|TagList' " 如果所有编辑文件都关闭了,退出vim let g:persistentBehaviour=0 |
如果博主能够把插件的介绍在写写就好了。 毕竟好多插件不知道是做什么的~~ 有点不想安装的说。。
啊~ 我文內鍊結的兩篇文章就把這些插件介紹得非常詳細勒。