VIM 打造 Java IDE 2
??? 上一篇介紹了 VIM 常用命令和控制臺(tái)編譯 Java 文件相關(guān)參數(shù)問題。這一篇重點(diǎn)來介紹一下關(guān)于 VIM 的插件。
??? VIM 的插件眾多,作為打造 Java IDE ,我們需要選擇一些常用也是可以被稱為 IDE 所必須具備的插件。
??? 廢話不多,Go。
?
? VIM Java IDE 插件
??? Pathogen:該插件用來管理Vim的插件,可以讓插件的安裝與卸載更加方便。配合Github和Submodule效果更佳。
??? NerdTree:該插件會(huì)生成工程目錄樹。
??? TagBar:該插件生成函數(shù)、變量列表。
??? UltiSnips:類似TextMate的snippets,是一個(gè)塊補(bǔ)全的插件。除了 Java 還內(nèi)置了市面上幾乎所有流行語言的補(bǔ)全。也可以自定義。
??? vim-commentary:注釋代碼的插件。
??? syntastic:保存文件時(shí)檢查語法的插件。每次保存時(shí),編譯當(dāng)前 Java 文件,檢查是否有語法錯(cuò)誤。
??? delimitMate:成對(duì)生成(),{},[]。
??? buferexplorer:方便瀏覽buffer的插件。
??? TagHightlight:根據(jù)生成的Tag文件,高亮類、變量、函數(shù)和關(guān)鍵字。
??? vim-powerline:超有愛的狀態(tài)欄。
??? javacomplete: Java 補(bǔ)全插件,可以像 Eclipse 一樣提示對(duì)象的函數(shù),不過有些時(shí)候會(huì)提示不出來,不知道為什么。
?
??? 這些就是這一周折騰的插件,其實(shí)也還有很多的插件,大家可以參考子龍山人的博客《打造屬于自己的Vim神器》。
??? 作為 Java 開發(fā),個(gè)人覺得這些是相當(dāng)足夠,如果各位還有關(guān)于 Java 的插件提供,希望可以在網(wǎng)站下方留言。
?
??? 插件簡(jiǎn)介
?? Pathogen,這個(gè)插件屬于 VIM 的基礎(chǔ)插件。安裝它之后,在安裝上面推薦的插件是相當(dāng)?shù)姆奖恪?這里默認(rèn)是 linux 系統(tǒng),如果是 windows 請(qǐng)查看插件 GitHub 相關(guān)介紹)
??????????????????????? 1. 將 pathogen.vim 復(fù)制到下面的文件夾下,
~/.vim/autoload/pathogen.vim
??????????????????????? 2.? 控制臺(tái)運(yùn)行一下的命令:
mkdir -p ~/.vim/autoload ~/.vim/bundle; \ curl -Sso ~/.vim/autoload/pathogen.vim \ https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim??????????????????????? 3. 在 ~/.vimrc 中添加如下代碼:
execute pathogen#infect()???
??? 重啟 VIM 后便完成了 Pathogen 的安裝,之后我們就可以方便安裝以上推薦的所有插件了。這是
??? 首先? cd ~/.vim/autoload/bundle 進(jìn)到 bundle 目錄中。記住,每次安裝插件都需要 cd 到此目錄。
???
NerdTree:
cd ~/.vim/bundle git clone https://github.com/scrooloose/nerdtree.gitTagBar:
UltiSnips:
cd ~/.vim/bundle git clone https://github.com/SirVer/ultisnips
vim-commentary:
cd ~/.vim/bundle git clone https://github.com/tpope/vim-commentarysyntastic:
cd ~/.vim/bundle git clone https://github.com/scrooloose/syntasticdelimitMate:
cd ~/.vim/bundle git clone https://github.com/Raimondi/delimitMatebufexplorer:
cd ~/.vim/bundle git clone https://github.com/vim-scripts/bufexplorer.zipTagHighlight:
cd ~/.vim/bundle git clone https://github.com/magic-dot-files/TagHighlight
vim-powerline:
cd ~/.vim/bundle git clone https://github.com/Lokaltog/vim-powerline
javacomplete:
cd ~/.vim/bundle git clone https://github.com/vim-scripts/javacomplete
??? 通過 Pathogen 可以很方便得安裝插件。我們還需要到 GitHub 查看相關(guān)說明,是否需要在 ~/.vimsrc 中進(jìn)行相關(guān)的插件配置。
??? 安裝完插件,下面來看看這些插件如何使用,和相關(guān)的配置。
?
NerdTree?
~/.vimrc 中添加如下代碼:
" About NERDTreenoremap :NERDTreeToggleautocmd vimenter * if !argc() | NERDTree | endif "open a NERDTree automatically when vim starts up if no files were specifiedautocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif之后,按 F2 便可呼出 NerdTree ,一般打開 Java 文件后,NerdTree 固定在窗口左側(cè),可按 F2 關(guān)閉。
?
TagBar
~/.vimrc 中添加如下代碼:
" TagBar 自動(dòng)生成參數(shù)和方法" Then the F8 key will toggle the Tagbar window.nmap :TagbarToggle之后,按 F8 便可呼出 TagBar
?
syntastic
syntastic 需要重點(diǎn)說明,剛開始使用 syntastic 時(shí)發(fā)現(xiàn)只要是第三方 jar 包中的 class ,都無法識(shí)別,雖然編譯可以通過,但代碼檢查報(bào)錯(cuò)也相當(dāng)不爽。本來尋思著改 syntastic 源碼,后來在官網(wǎng)看了關(guān)于 syntastic 的解釋,了解到 syntastic 的原理。所謂代碼檢查,其實(shí)就是每次保存文件時(shí),都進(jìn)行 javac 編譯當(dāng)前文件,javac 會(huì)返回相應(yīng)的錯(cuò)誤內(nèi)容, syntastic 會(huì)將錯(cuò)誤信息加以分析,反映到 VIM 的文本上。了解了這些,我們就可以方便得使得 syntastic 接受第三方 jar 包了,也就是上篇提到的 javac 參數(shù)問題。
~/.vimrc 中添加如下代碼:
"syntastic 保存檢查代碼時(shí)候傳入?yún)?shù)let g:syntastic_java_javac_args="-cp ../../lib:../../bin -sourcepath ../../bin -Djava.ext.dirs=../../lib -d ../../bin"
vim-commentary
????? 塊模式:v 命令選中需要注釋的內(nèi)容,gc 注釋,取消注釋也是同樣的步驟。
????????????????? ? ? V 命令,選中當(dāng)前行,gc 注釋當(dāng)前正行內(nèi)容,這個(gè)使用是最方便的,也是最多的。
?
bufexplorer
???? 命令模式:\be 跳轉(zhuǎn)到緩沖區(qū)窗口,然后 選擇需要的緩沖區(qū)回車
?
javacomplete
~/.vimrc 中添加如下代碼:
" 關(guān)于Java自動(dòng)文件補(bǔ)全插件autocmd Filetype java set omnifunc=javacomplete#Completeautocmd Filetype java set completefunc=javacomplete#CompleteParamsInfinoremapinoremap" 在VIM編輯java文件時(shí)當(dāng)敲入 . 時(shí)會(huì)出發(fā)autocmd Filetype java,javascript,jsp inoremap . .autocmd Filetype java,javascript,jsp inoremap . .????? 關(guān)于 javacomplete 開始使用時(shí)候,也發(fā)現(xiàn)對(duì)第三方 jar 包不能進(jìn)行有效的提示,至少 import 時(shí)候沒有提示會(huì)讓人很難受。
????? 經(jīng)過對(duì)源代碼的查看,發(fā)現(xiàn)提供提示功能的主要是 Relfection.class ,如果想要對(duì)第三方 jar 包提供提示支持,就需要自己重新編譯 class 。
????? 下載了 javacomplete 包,發(fā)現(xiàn)里面有一 Relfection.java 文件,我們需要修改它,然后重新編譯出 Reflection.class 就可以實(shí)現(xiàn)對(duì)第三方 jar 包的提示支持了。
????? 我們搜索整個(gè)文檔,查找到 user classpath 可以定位到大概 155 行的位置如圖所示:
????? 然后我們緊跟這下面,就添加自己的代碼,就是在 classpath 中增加 lib 目錄。如圖所示:
????
????? 解釋一下,String troyPath = System.getProperty("user.dir") ; 得到的是的當(dāng)前目錄,也就是點(diǎn)( . ) ,也就是我們?cè)诮K端打開 gvim 時(shí)所在的目錄。
????? 舉例,我們?cè)?cd ~/workplace_vim/Troy/src/part2 ,然后 gvim 命令打開 gvim ,troypath 得到的就是 ~/workplace_vim/Troy/src/part2 .
????? 緊跟著隨后的代碼,都是 java 的基礎(chǔ)部分內(nèi)容,不做過多解釋,還得再重復(fù)一下我們所約定的目錄結(jié)構(gòu):(lib 在 ~/workplace_vim/Troy/lib )
Troy
|-------bin
|?? ????? |-------part1
|?? ????? |-------part2
|?????????????????? |-------HelloWorld.class
|-------lib
|-------src
?? ?????? |-------part1
?? ?????? |-------part2
?? ??? ???????????? |-------HelloWorld.java
???? 修改完 Relfection.java ,我們編譯一下 javac Reflection.java 得到 Reflection.class 替換官方的 .class 文件。
發(fā)現(xiàn),已經(jīng)可以提供對(duì)第三方 jar 包的提示支持了,雖然在很多時(shí)候方法還是提示不出來,但是至少 import 包可以提示沒有問題。
???? 最近也會(huì)再想辦法實(shí)現(xiàn)對(duì)第三方 jar 包里面方法的提示,如完成,會(huì)立刻更新上來。
???? 至此為止,已經(jīng)把 VIM 的所有插件都已經(jīng)講完了,其實(shí)想要配置開發(fā)環(huán)境,也就是插件的問題,只要插件都 OK ,剩下的就是熟練就行。
?
??? 插件配置完成后,還有關(guān)于 ~/.vimrc 需要配置一下。
" 一鍵編譯java文件map <F5>:!cd %:p:h && java -cp ../../bin -Djava.ext.dirs=../../lib %:p:h:t.%:p:t:rmap <F4>:!cd %:p:h && javac -cp ../../lib:../../bin -sourcepath ../../bin -Djava.ext.dirs=../../lib -d ../../bin *.java???
??? 添加以上配置后,F5 是運(yùn)行當(dāng)前文件。F4 是編譯當(dāng)前目錄下的所有 java 文件。
??? 這里說明一下為什么有了 syntastic 插件,我們還需要 F4 編譯。我們知道syntastic 插件安裝完成后,每次 :w 就會(huì)自動(dòng)編譯當(dāng)前編輯的 java 文件,如果沒有錯(cuò)誤爆出,則 class 文件其實(shí)已經(jīng)編譯好了,那為什么還需要添加 F4 編譯 *.java 呢。
??? 原因是這樣的,在同一個(gè)包下我們新建一個(gè) class B ,又新建一個(gè) class A,然后 class A 中引用了 class B ,class B 中引用了 class A,這個(gè)時(shí)候,我們編譯 A 會(huì)提示找不到 class B,編譯 B 會(huì)提示找不到 class A 。相當(dāng)于死循環(huán)。遇到這種情況,我們不能分開編譯 A 和 B ,我們需要一起編譯他們倆。也就是 javac *.java 就可以了,這個(gè)問題,網(wǎng)絡(luò)上找了很久沒有找到答案,有人說,代碼寫得有問題,通過改代碼來解決,最后也是自己嘗試解決。 使用 Eclipse 來做開發(fā)久了,編譯這方面的知識(shí)會(huì)產(chǎn)生一個(gè)盲區(qū)。
??? 也并不是說 Eclipse 不好,只是非常推薦新人在剛開始時(shí)候,不要使用 Eclipse 或者其它的任何 IDE , GVIM / Emacs / Notepad++ / UG / EverEdit / EditPlus 都可以是很好的選擇,至于 windows 自帶的記事本還是算了,至少找一個(gè)支持顏色高亮的編輯器。然后在控制臺(tái)使用 javac 編譯,java 運(yùn)行。新手還是以學(xué)習(xí)為主,不需要趕進(jìn)度。Eclipse 確實(shí)效率高,但學(xué)習(xí)的時(shí)候,還是任何事都親歷親為一下。Eclipse 為我們做了大部分工作,以至于很多年之后,如果不去刻意學(xué)習(xí),我們會(huì)對(duì)于 java 編譯等等的一些問題一片空白。
?
???? 現(xiàn)在已經(jīng)完全的把工作環(huán)境從 Eclipse 移植到 GVIM ,只要進(jìn)度能更得上,其實(shí)用什么編碼都無所謂。
???? 使用 VIM ,還是強(qiáng)烈推薦 linux 系統(tǒng),做 Java 開發(fā),也強(qiáng)烈建議盡早的接觸 linux 。推薦一下 Ubuntu 吧,在 linux 里面,Ubuntu 占有非常重要的一席地位,作為桌面版本的 linux ,界面美觀,使用起來也很方便,主要上手相對(duì)比較容易。對(duì)于還沒有接觸過 linux 又有意愿嘗試的朋友,建議安裝。
'總結(jié)
以上是生活随笔為你收集整理的VIM 打造 Java IDE 2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电大考试计算机应用基础考试试题,最新电大
- 下一篇: 小程序进入客服消息中心业务(一)