2012-04-27 5 views
15

Ich habe die Antwort auf diese Frage beim Schreiben gefunden, also habe ich es ein wenig erweitert. Ich wollte auf das --servername Argument zugreifen, um dynamische Einstellungen in meiner .vimrc Datei zu erstellen.Ist es möglich, in vimscript auf die Befehlszeilenargumente von vim zuzugreifen?

Durch Vims Hilfe fand ich die v:servername Variable, und mein Skript funktioniert. Jetzt bin ich jedoch neugierig, ob es möglich ist, auf ein beliebiges Befehlszeilenargument zuzugreifen. Wenn ich beispielsweise wissen möchte, ob vim im Lisp-Modus (-l) oder im Debugging-Modus (-D) war, wie würde ich es tun? Es scheint keine entsprechende v: Variable für sie zu geben.

Hier sind die Variablen, die ich von Autovervollständigen :help v:<Tab> enter image description here

gefunden Gibt es eine allgemeine Art und Weise Befehlszeilenargumente von vimscript zugreifen?

Antwort

9

Seltsamerweise, ich denke, die Antwort kann sein "Nein, es gibt keinen direkten Weg, um Startoptionen in der Befehlszeile angegeben".

Der Befehl :args und argv() können verwendet werden, um auf die beim Start angegebenen Dateinamen zuzugreifen, aber das ist nicht das, was Sie wollen.

ich auf Vims Foren sehen, dass jemand diese Lösung angeboten, um die Startbefehlszeile unter Linux zu erhalten:

:exe '!tr "\0" " " </proc/' . getpid() . '/cmdline' 

Ich nehme an, es unter Windows analogen Befehl ist. . . .

Sie können diesem Forum-Thread schauen hier:

http://groups.google.com/group/vim_use/browse_thread/thread/43773f27cdc10265/ad17ae8180c0fb6e?show_docid=ad17ae8180c0fb6e

+0

Danke. Die Lösung entspricht der anderen Antwort und ist aufgrund des Zitats korrekt. – mwcz

7

Mein googeln zeigt an, dass diese Funktion aber nie umgesetzt wurde vorgeschlagen. Allerdings habe ich mit ein bisschen eine Flickschusterei kommen, die doch funktioniert: (. Getestet auf OS X Lion)

:echo split(system("ps -o command= -p " . getpid())) 
# => [ 'vim', ... arguments ... ] 

Die getpid() Funktion bekommt Vims PID, dann rufen wir ps extern mit Optionen Geben Sie nur den Wert "command" für den Prozess zurück und verwenden Sie dann split(), um den Befehl in eine Liste aufzuteilen.

+1

Danke, ich mag den Hack. – mwcz

Verwandte Themen