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 .

statox
quelle
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
statox
quelle
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