vim下Java自动补全插件javacomplete

PS1:

现在真是越来越喜欢vim了,习惯后越发觉得vim强大得令人五体投地。

PS2:

本人系统 ubuntu 11.04

 

(4/14)最近没什么目标和方向,闲来无事想敲敲Java解解闷,苦于vim中默认没有自动补全,网上搜了下,javacomplete正和我意。

这里是下载地址。

 

网上有很多安装的教程,起初看了好多(因为大多数人给出的安装路径都不太一样),纠结了一下,干脆在他们说的路径下都装一遍,结果都不行。后来摆弄了好久,才弄明白,原来是因为vimrc文件文件中的javacomplete#Complete被我写成了javacomplete#Complet,少了个e一直没看出来了,使用的时候,vim中报错说没找到javacomplete#Complet这个函数,补全不能,没想到是我自己脑残了。。。

 

这两个教程都可以试试吧:教程1教程2

 

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

截图1

 

输入一半时的状态,按下回车自动选择高亮项:

截图2

posted @ 2012-04-14 23:36  Nstd  阅读(5597)  评论(1编辑  收藏  举报