一. 開篇前言
(圖片顯示越界的話,請刷新)
裝好Ubuntu15.04系統之后呢,玩了玩 Ubuntu,感覺還是很不錯的。比windows快,一開機就可以打開你想要的程序,但是在windows下你要等他啟動一些必須項才可以正常啟用。感覺 Linux 和 MacOs 有得一比。只是在linux下軟件會少很多。
之前寫過一篇博文是關於Vim的簡單使用,也是從零開始去接觸和使用Vim,了解了那篇博文里的命令后,就可以使用vim來高效地完成你的編輯工作了,當然,如果需要到格式的控制,使用vim還是不夠的,需要到 markdown 了,如果Vim能加上Markdown的話,那編輯起來堪稱完美了吧,哈哈。
Vim 不僅是“編輯器之神”,而且Vim的插件豐富,完全可以打造成開發環境IDE,接下來就記錄一下我的vim,整個過程下來,感覺就像是自己搭建了一個IDE,不錯哦。
本博文可以完成的效果包括:(左側目錄,分割窗口,代碼補全,C/C++/Java/Python 的編譯運行/語法補全/Tagbar[右側大鋼導航])
Vim作為IDE,可以達到的效果,先來解解饞:
二. 本篇博文介紹到的Vim的配置功能
1. 先來安裝吧
安裝的話,在 Linux 下是很簡單的,打開終端,輸入幾條命令就可以完成了。
sudo apt-get install vim
sudo apt-get install gvim
sudo apt-get install git (這個很重要,到后面下載插件的時候要用 git 來下載)
這是第一條命令,這里說我已經安裝好了,不必安裝。裝好以后在終端直接輸入 vim 或 git 或 gvim 就可以知道有沒有裝好了。
還可一使用 aptitude 來安裝,在使用 aptitude 來安裝之前要先安裝 aptitude
sudo aptitude install vim sudo aptitude install gvim sudo aptitude install git
然后,在用戶的主目錄中建立 .vim 目錄,在 .vim 目錄中建立 bundle 目錄,以后Vundle自動下載的插件都保存在這里。
vundle可以自動下載和安裝插件,只需要在“My Bundles Here”注釋后面使用 Bundle 命令把所需要的插件列出來,每個插件一行,然后運行 :BundleInstall 命令即可。Vundle支持 github.com 和Vim的官網 vim.org 。
mkdir .vim/bundle
然后,進入 Bundle 目錄,使用 git clone 命令下載vundle。
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
執行下載完成的話就可以在 bundle 下看到 vundle 目錄了。
2. 創建和基本配置一下 .vimrc 文件
可以在終端輸入 vim 然后輸入 :echo $VIM 看到自己的 vim 目錄,然后在該目錄下看看有沒有 .vimrc 文件,沒有的話就自己創建。
我的 .vimrc 文件是在 /usr/share/vim 目錄下(不知道大家的.vimrc是不是也是在這個目錄下),沒有的話就自己用命令創建:touch .vimrc
先來基本的配置,不要插件,映射那些比較高級的東西先吧。可以完成:代碼配色,tab縮進,自動保存,特別顯示當前編輯行,括號匹配,查找搜索,與系統公用剪貼板,代碼折疊等。如下:
注:更改.vimrc文件需要 sudo vim vimrc使用vim來修改,也可以使用 sudo gedit vimrc
我的基本配置:
"-----------------------------------基本------------------------------------ "處理未保存或只讀文件時,彈出確認 set confirm "自動保存 set autowrite "歷史記錄數 set history=1000 "編碼設置 set fenc=utf-8 set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2313,cp936 "語法高亮 if has("syntax") syntax on endif "設置配色方案 colorscheme ron "設置行號 set nu "設置縮進 set tabstop=4 set sts=4 set smartindent set expandtab set softtabstop=4 set shiftwidth=4 "設置自動格式化,解決復制代碼過來的時候出現格式混亂
"格式化全文: gg=G
"自動縮進當前行: ==
set formatoptions=tcrqn
"設置括號配對情況 set showmatch set matchtime=2 "設置沒有自動備份 set noswapfile set nobackup "設置縱向虛線對齊 "底部顯示光標的位置的狀態行 set ruler "設置查找 "搜索模式忽略大小寫 set ignorecase "如果搜索模式包含大小寫則不適用ignorecase set smartcase "禁止搜索到文件兩端時重新搜索 set nowrapscan "高亮顯示搜索到的文本 set hlsearch "逐字符高亮 set incsearch "使用鼠標 "按住 shift 才由鼠標右鍵處理操作 set mouse=a "和系統共用剪貼板 set clipboard+=unnamed
“在vim中把代碼復制到系統剪貼板:
”選擇需要復制的代碼后:
定位到某一行:4H 定位到第四行
復制某幾行
4H
shift +v
6H
"突出顯示當前編輯行 set cursorline "開啟折疊,並設置空格來開關折疊 set foldenable set foldmethod=syntax set foldcolumn=0 setlocal foldlevel=1 set foldclose=all nnoremap <space> @=((foldclosed(line('.'))<0)?'zc':'zo')<CR> "搜索和undo時不展開設置好的折疊 set foldopen-=search set foldopen-=undo
完成到這里,就可以去敲代碼了,但是還不夠啊,作為IDE還不夠啊,怎么沒有樹狀目錄?沒有一鍵編譯,運行?沒有語法補全?
三. 可實現的功能
分割窗口:
分割窗口很簡單,這樣用vim打開文件就可以: vim -o file_path_name1 file_path_name2 (-o時橫向切割,-O是縱向切割)
左側目錄:
要有左側目錄的話,這里就需要用到插件了。之前講到,用Vundle可以很方便地下載和管理插件,現在就要用到了。
先來配置一下 .vimrc ,在 .vimrc 文件后添加:
set nocompatible
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
在vimrc文件中添加以下插件配置:
Bundle 'The-NERD-tree'
Bundle 'The-NERD-Commenter'
按下esc,輸入:wq 保存退出
再次進入vim后使用:BundleInstall 進行安裝

現在弄好了,而且也已經把打開和關閉目錄映射成 CTRL+N 。
map <key_you want> :NERDTreeTogggle<CR>
要知道 ctrl+w+l是切換到右邊窗口,ctrl+w+h是切換到左邊窗口,目錄欄的控制是:Enter進入目錄,光標的上下移動和vim一樣


和編輯文件一樣,通過h j k l移動光標定位 o 打開關閉文件或者目錄,如果是文件的話,光標出現在打開的文件中 go 效果同上,不過光標保持在文件目錄里,類似預覽文件內容的功能 i和s 可以水平分割或縱向分割窗口打開文件,前面加g類似go的功能 t 在標簽頁中打開 T 在后台標簽頁中打開 p 到上層目錄 P 到根目錄 K 到同目錄第一個節點 J 到同目錄最后一個節點 m 顯示文件系統菜單(添加、刪除、移動操作)
? 幫助 q 關閉
代碼自動補全:
說到這個,肯定要說到YouCompleteMe,可以補全C/C++/Java/Python然而,我卻並不能安裝成功,唉。先說怎么安裝,再說我碰到的問題。
安裝:像安裝 目錄的那個插件一樣,直接在 .vimrc 下加上:
Bundle 'Valloric/YouCompleteMe'
然后保存退出,再進入 vim 輸入:BundleInstall來安裝。安裝的話肯定會遇到這個提示:
到 .vim/bundle/YouCompleteMe 下打開終端
輸入:./install.sh --clang-completer
參數是為了支持c/c++ 的補全。
然后就去編譯YouCompleteMe:然后我就出現錯誤了:
Some folders in /home/sky-tm/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party are empty; you probably forgot to run: git submodule update --init --recursive
解決:
按照提示輸入:git submodule update --init --recursive
結束后輸入: ./install.sh --clang-completer
然而,我的卻並沒有起到作用。
推薦幾篇安裝YouCompleteMe 的博文吧!
雖然沒有裝YouCompleteMe,但是我發現,在編寫代碼的時候,有些關鍵字還是可以用 CTRL+N來進行補全的,還會自動添加你敲過的關鍵字進入備選項。期待效果:
沒有YouCompleteMe也沒關系,我裝了 Python 的自動補全插件
來自:http://www.linuxidc.com/Linux/2014-04/99669.htm
1.下載:git clone https://github.com/vim-scripts/Pydiction ~/下載目錄
包括三個文件
python_pydiction.vim #vim插件
complete-dict #python關鍵字和模塊列表,
pydiction.py #python腳本,可以添加更多的模塊
2.配置
#1.查看家目錄下是否有.vim目錄,若沒有則創建。
mkdir -p ~/.vim/after/ftplugin/pydiction
#2.把上面下載的三個文件放到指定的位置
mv python_pydiction.vim ~/.vim/after/ftplugin/
mv complete-dict pydiction.py ~/.vim/after/ftplugin/pydiction/
#3.修改 ~/.vimrc文件,若沒有則創建,在該文件中添加下面兩行。
filetype plugin on
let g:pydiction_location='~/.vim/after/ftplugin/pydiction/complete-dict'
快速編譯與運行
每次敲好想要調試一下都要退vim肯定是不怎么友好的,所以就去查了怎么在寫完后可以 一鍵編譯運行 。
不多說了,直接貼上我的 .vimrc 配置吧:

我的編譯與運行(C/C++/JAVA/PYTHON)
我試過把所有的編譯與運行都映射到F5,但是在實際使用的時候卻無法奏效,於是把不同語言的快捷鍵分開映射了,我想,應該是有方法自動偵測文件類型然后選擇編譯的吧,這樣就不用映射那么多鍵了。
"--------------------------------編譯與運行--------------------------------- "-------------Java--------------- func! CompileJava() exec "!javac %" endfunc func! CompileCode() exec "w" if $filetype == "java" exec "call CompileJava()" endif endfunc func! RunResult() exec "w" if &filetype =="java" exec "!java %<" endif endfunc map <F4> :call CompileCode()<CR> map <F5> :call RunResult()<CR> "-------------Python------------- map <F6> :w<cr>:!python %<cr> "--------------C++--------------- map <F3> :call CompileRunGpp()<CR> func! CompileRunGpp() exec "w" exec "!g++ % -o %<" exec "! ./%<" endfunc "---------------C---------------- map <F2> :call CompileRunGcc()<CR> func! CompileRunGcc() exec "w" exec "!gcc % -o %<" exec "! ./%<" endfunc
特別說明一下,java的運行需要先按下 F5然后F6才行,第一次編譯嘛!
最后再貼我的 .vimrc(未完成 YouCompleteMe)

"-----------------------------------基本------------------------------------ "處理未保存或只讀文件時,彈出確認 set confirm "自動保存 set autowrite "歷史記錄數 set history=1000 "編碼設置 set fenc=utf-8 set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2313,cp936 "語法高亮 if has("syntax") syntax on endif "設置配色方案 colorscheme ron "設置行號 set nu "設置縮進 set tabstop=4 set sts=4 set smartindent set expandtab set softtabstop=4 set shiftwidth=4 "設置自動格式化 解決復制代碼過來的時候出現格式混亂 "shift +v 開頭 "shift +g 結尾 "== "格式化全文: gg=G "自動縮進當前行: == "set formatoptions=tcrqn "設置括號配對情況 set showmatch set matchtime=2 "設置沒有自動備份 set noswapfile set nobackup "設置縱向虛線對齊 "底部顯示光標的位置的狀態行 set ruler "設置查找 "搜索模式忽略大小寫 set ignorecase "如果搜索模式包含大小寫則不適用ignorecase set smartcase "禁止搜索到文件兩端時重新搜索 set nowrapscan "高亮顯示搜索到的文本 set hlsearch "逐字符高亮 set incsearch "使用鼠標 "按住 shift 才由鼠標右鍵處理操作 set mouse=a "和系統共用剪貼板 set clipboard+=unnamed "突出顯示當前行 set cursorline "開啟折疊,並設置空格來開關折疊 set foldenable set foldmethod=syntax set foldcolumn=0 setlocal foldlevel=1 set foldclose=all nnoremap <space> @=((foldclosed(line('.'))<0)?'zc':'zo')<CR> "搜索和undo時不展開設置好的折疊 set foldopen-=search set foldopen-=undo "----------------------------------插件------------------------------------- "偵測文件類型 filetype on "載入插件 filetype plugin on "為特定文件類型載入相關縮進文件 filetype indent on "------------Pyghon---------------- let g:pydiction_location='~/.vim/after/ftplugin/pydiction/complete-dict' "配置vundle set nocompatible "filetype off set rtp+=~/.vim/bundle/vundle/ call vundle#rc() "安裝插件 "Bundle 'Valloric/YouCompleteMe' Bundle 'The-NERD-tree' Bundle 'The-NERD-Commenter' map <C-n> :NERDTreeToggle<CR> "命令 "BundleList "BundleInstall "BundleClean "--------------------------------編譯與運行--------------------------------- "-------------Java--------------- func! CompileJava() exec "!javac %" endfunc func! CompileCode() exec "w" if &filetype == "java" exec "call CompileJava()" endif endfunc func! RunResult() exec "w" if &filetype =="java" exec "!java %<" endif endfunc map <F4> :call CompileCode()<CR> map <F5> :call RunResult()<CR> "-------------Python------------- map <F7> :w<cr>:!python %<cr> "--------------C++--------------- map <F6> :call CompileRunGpp()<CR> func! CompileRunGpp() exec "w" exec "!g++ % -o %<" exec "! ./%<" endfunc "---------------C---------------- map <F3> :call CompileRunGcc()<CR> func! CompileRunGcc() exec "w" exec "!gcc % -o %<" exec "! ./%<" endfunc "-------------------------------------------------------------------------- "set ignorecase " Do case insensitive matching "set smartcase " Do smart case matching "set incsearch " Incremental search "set autowrite " Automatically save before commands like :next and :make "set hidden " Hide buffers when they are abandoned "set mouse=a " Enable mouse usage (all modes) " Source a global configuration file if available if filereadable("/etc/vim/vimrc.local") source /etc/vim/vimrc.local endif
Tagbar右側導航,
可以像IDE一樣顯示類的結構 變量等
既然是做IDE,那要是能把類視圖,右側可以顯示tagbar就更好啦,這樣就可以更清晰地了解程序的架構,在插件仿佛的vim里,的確存在這樣一個插件,可以實現我們想要的功能,接下來就來安裝這個插件:
先安裝依賴庫:sudo apt-get install ctags
仍然使用vundle來安裝插件:
參照上面的方法,在.vimrc里加上 Bundle 'majutsushi/tagbar'
保存退出后再次進入vim,輸入:BundleInstall來安裝,裝完后輸入:BundleList就可以看到已經安裝的插件了。
順便映射一個快捷鍵吧,在剛才的代碼下添加:
map <F9> :TagbarToggle<CR>
" 啟動自動focus
let g:tagbar_autofocus = 1
四. 總結
折騰了幾天,雖然最終也基本達到了想要的效果,但是卻浪費了不少時間,建議還是用現成的IDE吧,功能齊全,安裝方便簡單,至少不費心費力啊!!!
我現在的vim圖:
期待各位的交流和指導!
我的vimrc:http://files.cnblogs.com/files/tianjintou/vimrc.zip
博文參考:
http://vim.wikia.com/wiki/Use_Vim_like_an_IDE
http://www.wklken.me/archives.html
http://www.open-open.com/lib/view/open1429884437588.html
http://blog.chinaunix.net/uid-24567872-id-3425929.html
https://github.com/wklken/k-vim
http://www.wklken.me/posts/2013/06/11/linux-my-vim.html#_6
易水博客:
http://easwy.com/blog/archives/advanced-vim-skills-catalog/
Vimer的程序世界
vimrc配置文件
http://blog.csdn.net/rumswell/article/details/9332327#t0