zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/Nstd/p/2447828.html
Copyright © 2011-2022 走看看