Вызов функции vimscript с помощью setline () из отображения в нормальном режиме - PullRequest
4 голосов
/ 16 сентября 2011

У меня есть функция, которая использует setline ().Для простоты давайте назовем это

function! MyFunc()
    call setline( ".", "test" )
endfunc

Я хочу вызвать эту функцию из отображения (используя ,,).Я знаю, что map <expr> ,, MyFunc() не работает из-за вызова setline ().imap ,, <C-R>=MyFunc() в принципе работает, но я бы обычно вызывал эту функцию из обычного режима, а не из режима вставки.

Есть ли что-нибудь, что позволит мне либо вызывать функцию, либо использовать регистр выражений из обычного режима?

1 Ответ

5 голосов
/ 16 сентября 2011

Чтобы вызвать функцию, измените отображение следующим образом.

:nnoremap ,, :call MyFunc()<cr>

Обычно отображение выражений полезно использовать в режиме вставки, поскольку оно позволяет динамически изменять последовательность нажатий клавиш в соответствии с частный случай. Если вы хотите использовать регистр выражений для вставки текста в буфер в нормальном режиме, вы должны использовать соответствующую команду нормального режима вставить или изменить текст (например, i, I, a, A) с последующим регистр выражений, оценивающий текст для вставки. Итак, отображение

:nnoremap ,, cc<c-r>=MyFunc()<cr><esc>

будет иметь тот же эффект, что и первый, если функция MyFunc() вернет строка, содержащая текст для вставки:

function! MyFunc()
    ...
    return 'text for inserting'
endfunction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...