ユーザーが<cr>
(通常モードと挿入モードの両方)を押したときに何かをするvimscriptを書き込もうとしていますが、改行を挿入してカーソルを移動する通常の効果を妨げません(スマートインデントまたは他のインデントモードを考慮して)次の行の正しい位置に移動します。<cr>を関数に再マップした場合、関数内の元の<cr>をどう呼び出すことができますか?
提案がありますか?
ユーザーが<cr>
(通常モードと挿入モードの両方)を押したときに何かをするvimscriptを書き込もうとしていますが、改行を挿入してカーソルを移動する通常の効果を妨げません(スマートインデントまたは他のインデントモードを考慮して)次の行の正しい位置に移動します。<cr>を関数に再マップした場合、関数内の元の<cr>をどう呼び出すことができますか?
提案がありますか?
てみてください。これは期待通りに動作します:
function s:DoSomething()
echom "Inside DoSomething"
return "\<CR>"
" return "\n" also works "
endfunction
inoremap <expr> <CR> <SID>DoSomething()
" If DoSomething function cannot be executed inside a textlock: "
inoremap <CR> <C-o>:call <SID>DoSomething()<CR><CR>
はnore
に注意してください、それが再び置き換えられてからs:DoSomething
によって返さ<CR>
を防止します。
マッピングの右側は<cr>
で始まる必要があります。このように:
:imap <cr> <cr>sometext
次に、再帰的にマッピングをトリガーしません。
出典: http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-Tutorial%28Part_1%29#Nested_.28recursive.29_maps
マップの{RHSが} {LHS}で始まる場合は、それは再帰的に置換されていません。たとえば、次のコマンドは、GQのための再帰的なマップを作成することはありません:あなたはこのような問題を持っていない可能性や*map
を省略する
:nmap gq gq