ecilpse使用tab选择补全

(转帖)本文转自:

scue

Jason Sun

  使用eclipse的自动补全,有时候要选的字不是第一个,需要在proposal中向下移动光标选择,但是eclipse只能按方向键完成,没有tab补全来的爽,找过似乎也没有这样的插件,只好找到一个修改一点源码的方法:

1.首先,打开Eclipse,打开window->show view,选择Plug-ins,再找到org.eclipse.jface.text,右键单击,选择import as-> Source Project,导入完成后,在你的workspace就可以看到这个project了。

2.在project中找到“org.eclipse.jface.text.contentassist.CompletionProposalPopup#verifyKey()”函数

将整个verifyKey()函数修改为:

/*
     * @see IContentAssistListener#verifyKey(VerifyEvent)
     */
    public boolean verifyKey(VerifyEvent e) {
        if (!Helper.okToUse(fProposalShell))
            return true;

        char key= e.character;
        if (key == 0 || key == ‘\t‘) {
            int newSelection= fProposalTable.getSelectionIndex();
            int visibleRows= (fProposalTable.getSize().y / fProposalTable.getItemHeight()) - 1;
            int itemCount= fProposalTable.getItemCount();

            //Shift + Tab
            if ( (e.stateMask == SWT.SHIFT ) && (e.keyCode == SWT.TAB) ) {
                newSelection -= 1;
                if (newSelection < 0)
                    newSelection= itemCount - 1;

                selectProposal(newSelection, (e.stateMask & SWT.CTRL) != 0);
                e.doit= false;
                return false;
            }
            switch (e.keyCode) {

                case SWT.ARROW_LEFT :
                case SWT.ARROW_RIGHT :
                    filterProposals();
                    return true;

                case SWT.ARROW_UP :
                    newSelection -= 1;
                    if (newSelection < 0)
                        newSelection= itemCount - 1;
                    break;

                case SWT.ARROW_DOWN :
                    newSelection += 1;
                    if (newSelection > itemCount - 1)
                        newSelection= 0;
                    break;

                case SWT.TAB :
                        newSelection += 1;
                        if (newSelection > itemCount - 1)
                            newSelection= 0;
                        break;

                case SWT.PAGE_DOWN :
                    newSelection += visibleRows;
                    if (newSelection >= itemCount)
                        newSelection= itemCount - 1;
                    break;

                case SWT.PAGE_UP :
                    newSelection -= visibleRows;
                    if (newSelection < 0)
                        newSelection= 0;
                    break;

                case SWT.HOME :
                    newSelection= 0;
                    break;

                case SWT.END :
                    newSelection= itemCount - 1;
                    break;

                default :
                    if (e.keyCode != SWT.CAPS_LOCK && e.keyCode != SWT.MOD1 && e.keyCode != SWT.MOD2 && e.keyCode != SWT.MOD3 && e.keyCode != SWT.MOD4)
                        hide();
                    return true;
            }

            selectProposal(newSelection, (e.stateMask & SWT.CTRL) != 0);

            e.doit= false;
            return false;

        }

        // key != 0
        switch (key) {
            case 0x1B: // Esc
                e.doit= false;
                hide();
                break;

            case ‘\n‘: // Ctrl-Enter on w2k
            case ‘\r‘: // Enter
            case ‘ ‘: //Space
                e.doit= false;
                insertSelectedProposalWithMask(e.stateMask);
                break;

//            case ‘\t‘:
//                e.doit= false;
//                insertSelectedProposalWithMask(e.stateMask);
//                return false;

            default:
                ICompletionProposal p= getSelectedProposal();
                if (p instanceof ICompletionProposalExtension) {
                    ICompletionProposalExtension t= (ICompletionProposalExtension) p;
                    char[] triggers= t.getTriggerCharacters();
                    if (key!=‘=‘&&key!=0x20&&key!=‘.‘&&key!=‘;‘&&contains(triggers, key)) {
                        e.doit= false;
                        hide();
                        insertProposal(p, key, e.stateMask, fContentAssistSubjectControlAdapter.getSelectedRange().x);
                    }
            }
        }

        return true;
    }

3.这样会取消“=”,空格,“.”和“;”的自动补全,加入TAB的自动补全。 最后就是导出修改后的插件,右键点击你的workspace里的工程,选择Export->Deployable plugins and fragments,点击Next,选择Destination选项卡,选择Directory,选择一个要保存插件的目录,然后Finish,这样会得 到一个zip包,打开,plugins里会有一个jar包,替换Eclipse的目录下的plugins里的同名文件(最好先把原plugins目录下的 org.eclipse.jface.text_3.7.2.v20111213-1208.jar(因为Eclipse版本的不同这个文件的名字可能不 同)备份)。

ecilpse使用tab选择补全

时间: 2024-07-30 10:00:10

ecilpse使用tab选择补全的相关文章

python的tab自动补全

很久不写blog了. 最近发现python的自动补全是个好东西. 分享一下. 参考了:http://www.cnblogs.com/allenblogs/archive/2011/04/21/2023288.html 和 软件手册 下载地址:http://vim.sourceforge.net/scripts/script.php?script_id=850 直接粘贴了. ------------------------------ vim编辑器中 #mkdir -p ~/.vim/after/

mysql中使用tab键补全

在mysql中默认不能使用tab键自动补全.设置自动不全如下: 这里的补全是表名,列名,数据库名.不是数据库中的命令,变量等. 在mysql命令行中,使用\#来暂时启用tab键补全. 在mysql的配置文件my.cnf中的[mysql]区段中添加no-auto-rehash该字段来达到补全,需要重启mysql数据库 可以使用一个mycli的工具.

Python基础 (tab自动补全)

Python 自动补全 1.添加python自动补全的脚本 vim ~/.pythonstartup #添加如下 #!/usr/bin/python import sys import readline import rlcompleter import atexit import os # tab completion readline.parse_and_bind('tab: complete') # history file histfile = os.path.join(os.envir

python2.7 tab,自动补全

python <tab>自动补全 一.这个方法可以修改shell命令行的自动补全 1.获取python目录[我使用的是64位ubuntu系统] [~$]python Python 2.7.3 (default, Apr 10 2013, 06:20:15) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more 

在Ubuntu中实现python按tab键补全

刚学习python,其实一切都很好接受,因为有过C语言的基础,感觉一切都来得那么自然,python极其精简的语法,让我真心是爱上这种语言!相信往后python一定会在我的IT生涯中大放光彩! 好,废话说完了,入正题. 1.问题引出:默认情况下python交互界面的tab键     在linux下,或在路由器.交换机上,按tab键按得很爽,什么不完整的,tab一下都出来了,无奈,在linux中安装的python,默认情况是没有tab功能的,也就是在python的交互界面中,tab是没有办法补全的,

CentOs6.5 更新python2.7,以及tab自动补全

#安装python2.7之前,准备工作: yum install python-devel gcc patch readline* -y #解压并安装: tar xf Python-2.7.10.tar.xz cd Python-2.7.10 sed -i 's/#readline/readline/g' Modules/Setup.dist ./configure --prefix=/usr/local/python make && make install #更改系统python调用

sudo和man的tab自动补全

要加入sudo和man的tab自动补全功能,只需在~/.bashrc中加入: #Enabling tab-completioncomplete -cf sudocomplete -cf man

Mac系统之Python命令行tab键补全

新建~/.pythonstartup文件并写入以下内容: $ cat ~/.pythonstartup  import sys import readline import rlcompleter if sys.platform == 'darwin' and sys.version_info[0] == 2:     readline.parse_and_bind("bind ^I rl_complete") else:     readline.parse_and_bind(&qu

python交互模式下的tab自动补全

python在交互模式下,输入命令的时候按tab键就按时间tab键的功能输出,在书写python时多有不便. 把下面的代码写入一个文件tab.py,放到/usr/lib/python2.6/site-packages/下 #!/usr/bin/env python import sys import readline import rlcompleter import atexit import os readline.parse_and_bind('tab:complete') histfil