当前位置:  开发笔记 > 开发工具 > 正文

Ctrl + Space用于在vim中进行omni和关键字完成

如何解决《Ctrl+Space用于在vim中进行omni和关键字完成》经验,为你挑选了2个好方法。

我想在vim中使用Ctrl+ Space进行omni-completion(如果没有omni-completion ,则使用关键字完成).我试过这个,我在网上找到了一个地方:

inoremap   pumvisible() ? "\" : "\\\\\=pumvisible() ? \"\\\" : \"\\\""

但它不起作用.任何使用Ctrl+ Space的人都可以告诉我正确的方法(有效)吗?

值得注意的是,它需要在vim NOT gvim的终端版本中工作.



1> sykora..:

试试这个:

inoremap   pumvisible() \|\| &omnifunc == '' ?
\ "\C-n>" :
\ "\C-x>\C-o>=pumvisible() ?" .
\ "\"\\c-n>\\c-p>\\c-n>\" :" .
\ "\" \\bs>\\C-n>\"\"
imap  



2> Dave Halter..:

上面的方式是"有点"工作,但它是如此难以理解,几乎没有人能说出它实际上做了什么.上面的解决方案并不好.

简答 - 使用此:

function! Auto_complete_string()
    if pumvisible()
        return "\"
    else
        return "\\\=Auto_complete_opened()\"
    end
endfunction

function! Auto_complete_opened()
    if pumvisible()
        return "\"
    end
    return ""
endfunction

inoremap   Auto_complete_string()
inoremap   Auto_complete_string()

这个答案还表示Ctrl + Space有两个可能的值(取决于终端/ gvim用法):.

我使用类似于jedi-vim中的第一个方法,但更可定制.


答案很长 - 以上是做什么的:

完全逃避上述答案是如此令人困惑,我将上述答案分成可读格式:

function! Auto_complete_string()                               
    if pumvisible()                                            
        return "\"                                        
    else                                                       
        return "\\\=Auto_complete_opened()\"
    end                                                        
endfunction                                                    

function! Auto_complete_opened()                               
    if pumvisible()                                            
        return "\\\"                            
    else                                                       
        return "\\"                                   
    end                                                        
endfunction                                                    

inoremap   Auto_complete_string()

这清楚地表明了它在做什么.发生了一些奇怪的事情Auto_complete_opened.它不只是完成,它在尝试完成之后还做了两件事:

当试图使用omnicompletion时,它会以某种方式执行,这可能是恕我直言的缩写.

如果完成不成功,它会使用退格并再次完成,但不会,但这并没有多大意义.

我不是说这不是某些用户可能想要的,但它可能不是大多数用户想要的!我的简短回答以信用为主,并为您提供了一种简单的编辑方式.现在,您只需轻松改变的事情,如果你想(例如,如果你想从一开始写在第一个条目).

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有