2016-07-18 9 views
0

私はdeopleteオートコンプリートプラグインでneovimを使用しています。私は自動自動完了が気に入らないので、<Tab>を使って作業を完了しようとしています。ドキュメントが示すように:これは私が行の先頭にしていても、もはや字下げしないこと<Tab>除いて...素晴らしい作品Vim:カスタム関数でオブジェクトメソッドを呼び出す

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

(またはカーソルの下のスペースがあります)。私はこれを回避するための機能を(悪い)書いた:

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()を呼び出すにはどうすればよいですか?

答えて

1

:callコマンドを使用して関数を呼び出します。あなたがdeoplete#manual_complete()の結果を返すために必要がある場合は

call deoplete#manual_complete() 

その後、:return使用:

return deoplete#manual_complete() 

をより多くのヘルプを参照してください:

:h :call 
:h :return 
+0

これは、関数を呼び出すにつながるんが、それはように見えます'deoplete'関数呼び出しを実際にプロキシするのではなく、関数' 0'の戻り値を使用してください。助言がありますか? –

関連する問題