Если вы переназначаете <cr>в функцию, как вы можете вызвать оригинал <cr>в функции? - PullRequest
1 голос
/ 23 января 2011

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

Есть предложения?

Ответы [ 2 ]

1 голос
/ 23 января 2011

Попробуйте опустить *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 голосов
/ 23 января 2011

Правая часть отображения должна начинаться с <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:

:nmap gq gq
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...