PS1:
現在真是越來越喜歡vim了,習慣后越發覺得vim強大得令人五體投地。
PS2:
本人系統 ubuntu 11.04
(4/14)最近沒什么目標和方向,閑來無事想敲敲Java解解悶,苦於vim中默認沒有自動補全,網上搜了下,javacomplete正和我意。
這里是下載地址。
網上有很多安裝的教程,起初看了好多(因為大多數人給出的安裝路徑都不太一樣),糾結了一下,干脆在他們說的路徑下都裝一遍,結果都不行。后來擺弄了好久,才弄明白,原來是因為vimrc文件文件中的javacomplete#Complete被我寫成了javacomplete#Complet,少了個e一直沒看出來了,使用的時候,vim中報錯說沒找到javacomplete#Complet這個函數,補全不能,沒想到是我自己腦殘了。。。
PS3:
一開始想在vim的insert模式下敲入 . 就能自動補全(像其他IDE那樣),寫vimrc的時候,加的是:
autocmd FileType java inoremap . .<C-X><C-O>
結果每次輸入.的時候他都會自動幫你自動選擇第一個匹配的下拉項,比如說你你輸入:System. 他會自動幫你選擇第一項class,變成System.class。
感覺很別扭,要么按Ctrl + p或者Ctrl + n往前往后選擇,要么把class刪掉重新輸(他會幫你自動匹配)才行,覺得不是很智能。
我想肯定是自己哪里設置錯了。就想去看幫助文件。輸入:help javacomplete,看了個遍,沒發現什么有用信息。然后就又上網查了(找到了這篇翻譯過的幫助文件,其實也沒什么幫助=。=)。后來讓我找到了教程1,發現里面有個東西寫挫了,應該吧之前的autocmd改成:
autocmd FileType java inoremap <buffer> . .<C-X><C-O><C-P>
這樣就差不多OK了(話說我加不加那個<buffer>好像都沒什么問題,不知到哪位路過的大大能告訴我下,這個<buffer>到底有什么用)。之所以說差不多是因為還有個功能沒實現,就是匹配項敲到一半的時候按個回車不能真正的直接補全,照理說,像別的IDE那樣,輸入System.ou后如果按回車,他會自動幫你完成System.out,現在這個javacomplete卻做不到,可能還要繼續深入了解vim才能寫配置實現吧。
后記:
當初javacomplete不能實現自動補全,我還以為是沒裝omnicppcomplete的原因,想,反正也要寫c/c++程序,干脆把這個也一起裝了。按照網上的教程下了壓縮包,解壓后就迷茫了。。網上有多少個教程差不多就有多少個不同的安裝路徑,沒法子。。他們講的那些路徑我全裝了(把源文件拷貝過去)。
PS4:
記得有個教程說要裝在~/.vim下,我cd到用戶目錄下ls -a發現更本沒這個文件夾。。是因為安裝vim沒有自動創建嗎?不知到怎么回事,反正后來自己建了個。。
結果裝了也沒用,后來意識到傻叉的我以為ctags是默認安裝的,原來是忘裝了ctags,下了一個,安裝之(好象是要編譯安裝的,這個倒是沒什么問題)。安裝完后還是不能起作用。結果后來發現我cp過去的時候是用su做的(管理員狀態),cp過去的那些文件夾都是帶叉的(我以為只有管理員才能操作,可能在普通狀態下,vim讀取不了),后來就把拷貝過去的文件全刪了,用sudo mkdir在安裝路徑下新建了所有同名文件夾,然后在sudo cp過去的,這樣才搞定。試了試結構體和類什么都可以正常補全,可是。。調用系統函數的時候卻不能自動補全。。 我創建了個字符串變量String str; 結果用str.的時候他提示找不到,后來試了個map同樣沒用。。大概我又配置錯了或者ctags使用不當。哪位路過的大大能幫忙解決下嗎?小菜我真是不勝感激T_T
PS5:
今天(4/15)終於搞定了jc中按回車自動補全的鍵映射問題,只要把之前的鍵映射改為:
autocmd FileType java inoremap <buffer> . .<C-X><C-O><C-P><Down>
就可以了。這樣做之后他能像一般IDE那樣,當敲到一半時(eg:System.ou),如果按下回車,他會自動幫你完成(System.out),不過有格小bug,輸入小數的時候會跳到下一行,覺得不方便的話也可以不加這個。。
之前的想法是:<C-X><C-O>會直接幫你選第一項,要是第一項不是你需要的,還要按好多退格,很麻煩,后來發現加個<C-P>變成<C-X><C-O><C-P>就能解決要退格的問題,但是輸入一半,就算目標項已經出來了,按回車他都不會自動幫你選擇,感覺這樣還是不如一般的IDE。記得<C-N>能選擇下一項,就在之后又加了個<C-N>,變成<C-X><C-O><C-P><C-N>,雖然能選擇下一項了,但是和<C-X><C-O>差不多,他會自動幫你選擇第二項,似乎又回到了原點。幾次嘗試下來,發現,在<C-X><C-O><C-P>的狀態下,如果直接按上下鍵,他會選中彈出列表中的項(高亮當前項),此時當你輸入一半后再按個回車,就能自動完成了。大喜,遂在<C-X><C-O><C-P>后加了個<Down>(表示下方向鍵),真的YES了。
廢話了不少,不過總算完成了一個基本功能~
PS6:
如果按回車沒有用的話,可以在你的vimrc文件中加下面這句試試(參考自Easwy的博客):
autocmd FileType java inoremap <expr> <CR> pumvisible()?"\<C-Y>":"<CR>"
PS7:
下面是兩張截圖:
輸入System.后,高亮選中的項,此時如果按回車,則選擇class,變成:System.class
輸入一半時的狀態,按下回車自動選擇高亮項: