Vous devez utiliser getpos()
:
Pour enregistrer votre position dans une variable:
let save_pos = getpos(".")
getpos()
prend comme argument une marque, "."
représente ici la position actuelle de votre curseur.
Et pour le restaurer:
call setpos('.', save_pos)
Ici, le premier argument indique que vous allez déplacer la marque de la position actuelle de votre curseur (d'où votre position actuelle) et le second est l'endroit où placer la marque (la position que vous avez enregistrée précédemment).
Votre fonction ressemblerait à ceci:
function! DollarSplit()
let save_pos = getpos(".")
normal! 6|r$ " replaces the 6th caracter in line with a $
call setpos(".", save_pos)
endfunction
Pour plus de détails, voir: :h getpos()
et:h setpos()
Pour plus de détails sur votre utilisation de execute
: cette fonction prendra une chaîne et l'exécutera. Votre chaîne ne peut être que des caractères codés en dur entre guillemets doubles ou le contenu des variables.
Quand tu écris
execute col_number."|"
Si vous êtes sur la 12e colonne, la chaîne développée sera 12|
. Execute essaiera d'exécuter cette commande mais cela ne fonctionnera pas car il 12|
ne s'agit pas d'une fonction vimscript mais d'une commande en mode normal.
Pour l'exécuter à partir d'un vimscript, vous devez dire "l'exécuter comme si je l'avais tapé en mode normal", c'est à cela que sert la normale.
Donc sans l'exécution, vous auriez écrit:
normal 12|
Maintenant, pour que votre execute
appel fonctionne, vous devez ajouter le normal
mot - clé à votre chaîne développée, comme ceci:
execute "normal " . col_number . "|"
Cette fonction conserve également votre registre de recherche. Vous pouvez donc passer votre commande comme argument dessus.
Quelques explications
Par exemple:
source: https://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps-your-state/
la source
finally
bloc. Sinon, en cas d'a:command
échec, rien ne serait restauré.