从正常模式打开完成弹出窗口

时间:2015-05-31 12:35:19

标签: vim omnicomplete

给出了这个脚本(包装建议被简化,原始照顾< cword>)

function! CompleteImport()
  let packages = ['java.util.Vector','java.lang.String']
  call complete(col('.'),packages)
  return ''
endfunction

inoremap <F8> import <C-R>=CompleteImport()<CR>

在插入模式下,您可以添加导入并在按 F8

的建议包之间进行选择

但是我希望能够从普通模式

到达弹出窗口选择
function! InsertImport() 
   exe "normal iimport \<C-R>=CompleteImport()\<CR>"
   "this commented line would work too
   "exe "normal i\<F8>" 
endfunction 

map <Leader>ji :call InsertImport()<CR> 

所以从正常模式,ji(代表java导入)添加导入到光标下的单词(如果找到)

(移到正确的位置不是问题所以我在这里省略)

到目前为止,ji从弹出窗口添加了第一个建议并且存在插入模式

我试过:startinsert但没有运气。

http://vimdoc.sourceforge.net/htmldoc/eval.html#:execute上查看建议的代码:

:execute "normal ixxx\<Esc>"

但最终的 Esc 根本不重要(至少我的vim安装)这对我来说完全一样:

:execute "normal ixxx"

如果我没有在docs上找到它,我认为这是不可能的。那么,是否可以通过函数保持弹出调用?

其他感兴趣的文档:

http://vimdoc.sourceforge.net/htmldoc/various.html#:normal http://vimdoc.sourceforge.net/htmldoc/insert.html#:startinsert

1 个答案:

答案 0 :(得分:1)

g(f(x)) = c (a x + b) + d = ac x + cb + d = (ac) x + (cb + d)通常是正确的方法,但它确实将控制权交还给用户,因此您无法自动触发完成。

通过a x + b功能,您可以发送任意键“就像输入一样”。这允许您开始插入模式触发完成:

:startinsert

PS:You should use :noremap也用于正常模式映射;它使映射不受重映射和递归的影响。