Vim:自定义函数中的调用对象方法

时间:2016-07-18 14:32:50

标签: vim

我正在使用带有deoplete自动完成插件的neovim。我不喜欢自动自动完成,因此我尝试使用<Tab>完成工作。正如文档所示:

inoremap <silent><expr> <Tab>
    \ pumvisible() ? "\<C-n>" : deoplete#manual_complete()

这很有用......除了<Tab>不会缩进,即使我在一行的开头(或者光标下面有空格)。我写了一个函数(很差)来解决这个问题:

function! Smart_TabComplete()
    if pumvisible()
        return "^N"
    endif
    let line = getline('.')                         " current line

    let substr = strpart(line, -1, col('.')+1)      " from the start of the current
    " line to one character right
    " of the cursor
    let spaces = strpart(line, -1, col('.'))

    let substr = matchstr(substr, '[^ \t]*$')       " word till cursor
    let spaces = matchstr(spaces, '[^ \t]*$')
    if (strlen(substr)==0)                          " nothing to match on empty string
        return "        "
    endif
    if (strlen(spaces)==0)                          " nothing to match on empty string
        return "        "
    endif
    deoplete#manual_complete()
endfunction

我之所以称之为deoplete#manual_complete()而不是<Tab>。看起来这修复了使用Not an editor command: deoplete#manual_complete()缩进问题,但现在我总是得到函数内部:

  

deoplete

我不确定该如何处理,我甚至尝试将Smart_TabComplete作为参数传递给<Tab>,但它不起作用。

  • 是否有更好的方法可以将deoplete#manual_complete()用于自动填充和间距?
  • 否则,如何在自定义函数中调用destroy

1 个答案:

答案 0 :(得分:1)

使用:call命令调用函数。

call deoplete#manual_complete()

如果您需要返回deoplete#manual_complete()的结果,请使用:return

return deoplete#manual_complete()

如需更多帮助,请参阅:

:h :call
:h :return