2016-10-23 11 views
0

私は、その初期化で複数の*noremap操作を実行するプラグインを使用しています。私はYCM/UltiSnipsに次のマッピングを追加した後:私は<Enter>キーを参照するには、他のプラグインの能力を壊れました、というか私はオーバーライド新しいinoremapシーケンスで以前のinoremapシーケンスを再利用

inoremap <expr> <CR> pumvisible() ? "<C-R>=<SID>ExpandSnippetOrReturn()<CR>" : "\<CR>" 

を/元inoremapを破壊しました。私はその機能を有効にしたいが、Enterキーを使ってオートコンプリートメニューからスニペットを選択する機能を無効にしない。このキーマップは、「メニューが表示されている場合はオプションを選択し、それ以外の場合は<Enter>キーをシミュレートする」と効果的です。代わりに「メニューが表示されている場合はオプションを選択し、そうでなければ何でもコマンドを実行してください」というメッセージが表示されます。<Enter>キーは既にマップされています。したがって、基本的には、このinoremapの宣言時に、このキー用の既存のinoremapをelseに拡張する必要があります。

私は<C-R>=feedkeys('<CR>')<CR><C-R>=mapcheck('\<CR>', 'i')<CR>を見ましたが、どちらも動作できませんでした。誰かが私を助けることができますか?

答えて

0

最後にこれを理解しました。これは、私が1日必要だったよりもvimのトラブルシューティングの方法です。機能でそれを投げ

function! LoadPumvisibleEnter() 
    let smartmap = maparg("<Enter>", "i") 
    execute printf('inoremap <script> <expr> <CR> pumvisible() ? "<C-R>=<SID>ExpandSnippetOrReturn()<CR>" : %s', smartmap) 
endfunction 
au VimEnter * :execute LoadPumvisibleEnter() 
  • は私がエスケープで正気に滞在させ、私はvimのは明らかに任意のプラグイン(Does Vim load plugins after loading vimrc?)をロードする前に、vimrcが実行されるためのないよう、必要とされている
  • オートコマンドでどのモードだったことマップはまだ設定されていません。
+1

私はこのマップを.vim/after/plugin/に入れています。マップを繰り返し設定するオートコマンド。 –

+0

マッピングされた機能はプラグインの一部ではありません。これは、既存のプラグインマッピングを壊さずに作業したい私のvim設定の一部です。元のプラグイン(これは私が維持していない、またはフォーク/維持したくない)をバンドルすることは、きれいな解決策ではありません。将来、そのプラグインを切り替えることを選択する必要がありますが、私はExpandSnippetマッピングが消えないようにしたいと思います。 vimrcからExpandSnippet関数を削除しても、プラグインを中断しないようにしてください。 –

+0

Steven Luのコメントは正しくです。 _after_ディレクトリは、 '' runtimepath''のどこにでも置くことができます。プラグインの隣にある必要はありません。 'VimEnter'を使うよりもきれいです。また、 '.vimrc'で':runtime plugin/original.vi'を実行して、そこで再マッピングすることもできます。 –

関連する問題