2015-12-28 47 views
0

通過按自動完成輸入,我有以下的地圖設置與neocomplete.vim工作:<Plug>功能失效,將作爲文字「<t_ý> S」

inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR> 
function! s:my_cr_function() 
    return pumvisible() ? "\<c-y>" : "\<CR>" 
endfunction 

這工作得很好。要解釋,當顯示neocomplete的PopUpMenu時,pumvisible()返回true。 <c-y>選擇所選單詞,將其插入插入模式光標後,並關閉網絡彈出窗口。

我想擴展這個映射,以便當自動完成的單詞是「片段」單詞時,neosnippet.vim插件將自動擴展它。這是我的嘗試:

inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR> 
function! s:my_cr_function() 
    return pumvisible() ? "\<c-y>\<Plug>(neosnippet_expand_or_jump)" : "\<CR>" 
endfunction 

而不是擴大片斷的話,這將導致以下直接插入到文本光標所在:

<t_ý>S(neosnippet_expand_or_jump)` 

我怎樣才能解決這個問題,使這行得通?

可能培訓相關注意事項:如果我回到代碼(上述第一個)的工作版本,點擊「進入」,然後手動輸入<C-k>(同時仍然在插入模式),該段這樣正確的擴展。這裏是映射設置爲<C-k>

imap <C-k> <Plug>(neosnippet_expand_or_jump) 
+0

插頭沒有意義的'inoremap'(我不知道它在表達式寄存器)嘗試使用'imap my_cr_function()'。 – FDinoff

回答

1

<Plug>沒有意義的noremap版本的命令,因爲他們自己都映射。所以你應該使用imap。第二件事是如果你想執行映射的結果,你應該使用表達式映射而不是表達式寄存器。

在總,這看起來像

imap <silent> <expr> <CR> <SID>my_cr_function() 

你可能想看看:help :map-expression

相關問題