2011-01-23 1 views
1

Я пытаюсь написать vimscript, который что-то делает, когда пользователь нажимает <cr> (как в нормальном режиме, так и в режиме вставки), но который не мешает нормальному эффекту <cr>, который заключается в том, чтобы вставить разрыв строки и переместить курсор в правильное положение на следующей строке (в отношении интеллектуального отступа или любого другого режима отступов).Если вы переделаете <cr> в функцию, как вы можете назвать оригинал <cr> в функции?

Любые предложения?

ответ

1

Попробовать опускаем *map, где это возможно, и у вас не будет таких проблем. Это будет работать, как ожидалось:

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, он предотвращает <CR> возвращаемый s:DoSomething из заменяется снова.

0

Правую часть картографии необходимо начинать с <cr>. Например:

:imap <cr> <cr>sometext 

Тогда он не рекурсивно вызывает отображение.

Источник: http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-Tutorial%28Part_1%29#Nested_.28recursive.29_maps

Если {шк} на карте начинается с {LHS}, то не рекурсивно заменить. Например, следующая команда не будет создавать рекурсивные карту для GQ:

:nmap gq gq 
Смежные вопросы