【问题标题】:Dictionary suggestions in autopopup自动弹出的字典建议
【发布时间】:2017-05-16 21:12:33
【问题描述】:

我使用 Vim 已经很多年了,但我仍然不知道如何在启用自动弹出字典建议的情况下(例如在 notepad++ 或 google android 键盘中)在不按任何快捷键的情况下键入文本。

这些是我在 vimrc 中的选项:

set completeopt=longest,menuone  
set omnifunc=syntaxcomplete#Complete

简而言之,我想要的是:
1) 键入时自动弹出的仅字典建议。
2) 仅在 supertab 中缓冲单词建议(使用 tab 键)
(但是..不包括缓冲区名称)

我怎样才能得到这个?

【问题讨论】:

  • 您是否还在担心在 3 个字符后弹出的解决方案?
  • @Meninx-メネンックス,哇……它工作正常。这就是我想要的。但是..我注意到一个问题:我想将 PopUpDict() 与当前活动的拼写字典一起使用。如果我使用您的set dictionary+=/usr/share/dict/american-english,它不会给出任何建议。如果我只使用当前的拼写检查字典,它工作得很好,但我的问题是,如果当前的拼写检查字典没有被激活......[请参阅下一条评论]
  • (我默认不激活它,因为我使用不同的拼写检查字典),而不是非常奇怪的事情发生(例如光标向后移动)。 1) 只有在拼写检查字典处于活动状态时,我如何才能激活 PopUpDict()? 2) 有没有办法手动激活/取消激活 PopUpDict()(使用快捷方式)?
  • 我已经更新了我的代码我改变了函数PopUpDict() 现在更流畅了。等待您的反馈。 ;)
  • 目前还没有问题。非常感谢! :)

标签: dictionary vim popup spell-checking


【解决方案1】:
  1. 如果您使用的是 Linux,您可以将现有的英语词典设置为 /usr/share/dict/american-english 或只设置您自己的文件:
    :set dictionary+=/usr/share/dict/american-english

由于插入模式下字典补全的快捷方式是 CTRL-X CTRL-K,因此您需要添加以下设置:

    :set noshowmode
    :set completeopt+=noinsert
    :autocmd CursorHoldI * call feedkeys("\<c-x>\<c-k>")
    :set updatetime=500
  1. 您可以通过调用SuperTabSetDefaultCompletionType函数(实际上是默认的)来限制Supertab插件只弹出缓冲字:
    :call SuperTabSetDefaultCompletionType("<c-x><c-n>")

但你仍然需要在 TAB 之前按 CTRL-X

  1. 禁用 NeoComplete 插件
    :NeoCompleteDisable

:help ins-completion
(...)

Completion can be done for:

1. Whole lines                                          i_CTRL-X_CTRL-L
2. keywords in the current file                         i_CTRL-X_CTRL-N
3. keywords in 'dictionary'                             i_CTRL-X_CTRL-K
4. keywords in 'thesaurus', thesaurus-style             i_CTRL-X_CTRL-T
5. keywords in the current and included files           i_CTRL-X_CTRL-I
6. tags                                                 i_CTRL-X_CTRL-]
7. file names                                           i_CTRL-X_CTRL-F
8. definitions or macros                                i_CTRL-X_CTRL-D
9. Vim command-line                                     i_CTRL-X_CTRL-V
10. User defined completion                             i_CTRL-X_CTRL-U
11. omni completion                                     i_CTRL-X_CTRL-O
12. Spelling suggestions                                i_CTRL-X_s
13. keywords in 'complete'                              i_CTRL-N

编辑:

这与此答案下方的 cmets 有关:这是我编写的一个小脚本 PopUpDict.vim(可以改进),在输入 3 个字符后会自动弹出字典中匹配的单词,并且这使您能够在输入 ctrl-x tab 后弹出匹配的缓冲区关键字:(较新版本的 vim >= 7.4)

set dictionary+=/usr/share/dict/american-english
set completeopt+=noinsert
set cmdheight=2
call SuperTabSetDefaultCompletionType("<c-x><c-n>")
NeoCompleteDisable

augroup Main
autocmd!
autocmd InsertCharPre * call <SID>PopUpDict()
augroup END

let s:count=0
function! s:PopUpDict()
    let AsciiCode=char2nr(v:char)
    if (AsciiCode <=# 122 && AsciiCode >=# 97) || (AsciiCode <=# 90 && AsciiCode >=# 65)  
        let s:count+=1
        if s:count >=# 3
        call feedkeys("\<c-x>\<c-k>")   
        endif
    else
        let s:count=0
    endif
endfunction

Demo

【讨论】:

  • 您好 Meninx,感谢您的回复。我更新了我的问题。希望现在更清楚了。 :)
  • 谢谢,但我仍然在我的字典自动弹出窗口中看到其他缓冲区的建议。顺便说一句,我正在使用 Win10。
  • 你能解释一下“其他缓冲区”吗?
  • Meninx,对不起,我的意思是我仍然看到来自开放缓冲区的单词建议。 (您的弹出窗口在 0.5 秒的暂停后开始,但在您的弹出窗口之前会弹出另一个弹出窗口,其中包含来自打开缓冲区的单词建议)
  • 我认为这些词与Neocomplete plugin有关,您可以按:NeoCompleteDisable禁用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2015-02-13
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多