Wie verwende ich eine Variable im Ausdruck eines "normalen" Befehls?


13

Wie kann man eine Variable verwenden, wenn man etwas über normal!in Vimscript ausführt?

Beispiel:

function! MyFunction(someArg)
   normal! (a:someArg)l
endfunction

Dies sollte den Cursor someArgnach rechts bewegen .


4
Sie müssen verwendenexe "norm!" variable
Christian Brabandt

Antworten:


21

Die executeFunktion nimmt einen String als Argument, erweitert den String und führt ihn als regulären ex-Befehl aus. So können Sie:

function! MyFunction(someArg) 
    execute "normal! ". a:someArg. "l" 
endfunction

Das .ist ein Standard vimscript Operator verketten Saiten.

executekann auf gekürzt werden exe.

Sehen :h :execute


BEARBEITEN Ich werde einen Punkt über den Kommentar von @Christian Brabandt über die Verkettung mit einem hinzufügen ..

Der Arzt sagt:

Mehrere Argumente werden mit einem Leerzeichen dazwischen verkettet. Um das zusätzliche Leerzeichen zu vermeiden, verwenden Sie das "." Operator zum Verketten von Strings zu einem Argument.

Der Befehl könnte also sein:

execute "normal!" a:someArg . "l"

Der ausgeführte Befehl lautet:

normal! 2l

8
du brauchst das '.' nicht. Exe verkettet Zeichenfolgen mit einem Leerzeichen ohne es.
Christian Brabandt

1
@ChristianBrabandt Ernsthaft warten? Das wusste ich nicht.
Tumbler41

@ChristianBrabandt Das wusste ich nicht, danke!
statox
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.