Sie sollten verwenden getpos()
:
So speichern Sie Ihre Position in einer Variablen:
let save_pos = getpos(".")
getpos()
Nimmt als Argument eine Marke, "."
repräsentiert hier die aktuelle Position Ihres Cursors.
Und um es wiederherzustellen:
call setpos('.', save_pos)
Hier zeigt das erste Argument an, dass Sie die Marke der aktuellen Position Ihres Cursors verschieben (daher Ihre aktuelle Position) und das zweite ist, wo die Marke platziert werden soll (die Position, die Sie zuvor gespeichert haben).
Ihre Funktion würde so aussehen:
function! DollarSplit()
let save_pos = getpos(".")
normal! 6|r$ " replaces the 6th caracter in line with a $
call setpos(".", save_pos)
endfunction
Weitere Einzelheiten finden Sie unter: :h getpos()
und:h setpos()
Für weitere Informationen zu Ihrer Verwendung von execute
: Diese Funktion nimmt einen String und führt ihn aus. Ihre Zeichenfolge kann nur aus hartcodierten Zeichen zwischen doppelten Anführungszeichen oder dem Inhalt von Variablen bestehen.
Wenn du schreibst
execute col_number."|"
Wenn Sie sich in der 12. Spalte befinden, wird die erweiterte Zeichenfolge angezeigt 12|
. Execute versucht, diesen Befehl 12|
auszuführen, funktioniert aber nicht, da es sich nicht um eine Vimscript-Funktion handelt, sondern um einen Befehl im normalen Modus.
Um es von einem Vimscript auszuführen, muss man sagen "Führe es so aus, als hätte ich es im normalen Modus getippt", dafür wird normal verwendet.
Also ohne das Ausführen hättest du geschrieben:
normal 12|
Damit Ihr execute
Anruf funktioniert, müssen Sie das normal
Schlüsselwort wie folgt zu Ihrer erweiterten Zeichenfolge hinzufügen :
execute "normal " . col_number . "|"
Diese Funktion führt auch Ihr Suchregister. So können Sie Ihren Befehl als Argument übergeben.
Eine Erklärung
Beispielsweise:
Quelle: https://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps-your-state/
quelle
finally
Block erfolgen. Andernfalls wirda:command
nichts wiederhergestellt , wenn das fehlschlägt.