3 votes

Appel d'une fonction vimscript avec setline() à partir d'un mapping en mode normal

J'ai une fonction qui utilise setline(). Pour simplifier, appelons-la

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

Je veux appeler cette fonction à partir d'un mapping (en utilisant ,, ). Je sais que les map <expr> ,, MyFunc() ne fonctionne pas, à cause de l'appel à setline(). imap ,, <C-R>=MyFunc() fonctionne en principe, mais je devrais normalement appeler cette fonction en mode normal, et non en mode insertion.

Y a-t-il quelque chose qui me permette d'appeler une fonction ou d'utiliser le registre d'expression en mode normal ?

4voto

ib. Points 14520

Afin d'appeler la fonction, modifiez le mappage comme suit.

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

En règle générale, un mappage d'expression est utile en mode insertion, car il car elle permet de modifier dynamiquement la séquence de touches en fonction d'un d'un cas particulier. Si vous souhaitez utiliser le registre d'expressions pour insérer du texte dans la mémoire tampon en mode normal, vous devez utiliser la commande appropriée du mode normal appropriée pour insérer ou modifier du texte (par exemple, i , I , a , A ) suivi par le évaluant le texte à insérer. Ainsi, la correspondance

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

aurait le même effet que la première si la fonction MyFunc() renvoie le contenant le texte à insérer :

function! MyFunc()
    ...
    return 'text for inserting'
endfunction

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X