Wie verwende ich einen variablen Inhalt als Argument für den Befehl vim?


12

Nehmen wir zum Beispiel an, ich hätte es getan

:let foo=pattern

und jetzt möchte ich ausführen, Ggrep patteraber Variable fooanstelle der Literalzeichenfolge verwenden patter.

:echo foo

Ausgänge pattern, aber

:Ggrep foo

sucht nur nach foo

AKTUALISIEREN:

Erstellen Sie eine Befehlsfolge und führen Sie sie dann aus: Die Ausführung ist keine Lösung, sondern ein Hack. Und es bricht mit nicht trivialen Variablenwerten.


Was ist Ggrep(Hauptstadt G?)?
Akira

Git Grep vom 'flüchtigen' Vim-Plugin
Vitaly Kushner

Beispielbefehl ist falsch. es sollte foo = 'pattern' sein. Sagen Sie das: Ausführen ist ein Hack ist völlig falsch. Das ist die Lösung: Sie möchten, dass vim den Befehl auswertet, bevor er ausgeführt wird
albfan

Antworten:


2

Es geht nicht um Variablen, aber vielleicht kann der Befehl vim abbreviate helfen. Versuchen Sie es über die Befehlszeile:

:abbreviate foo pattern

Dann

:Ggrep foo<space>

Es wird 'foo' zu Ihrem 'Muster' vervollständigen.


Versuchen Sie nun zu rennen echo foo. Opps, echo patterndie keine Variable ist. Dies ist ein Hack und eine Fehlleitung.
Albfan

7

wie wäre es mit:

:execute ':grep ' . foo

Wie entkomme ich dem Inhalt von foo richtig? es könnte Sonderzeichen wie ", ', /, \ usw. enthalten
Vitaly Kushner

1
@Vitaly Kushner: Siehe ": help Flucht ()" und ": Hilfe fnameescape ()".
Garyjohn

Ich weiß Escape (), bin mir aber nicht sicher, welchen Charakteren ich entkommen soll
Vitaly Kushner

fnameescape () ist nicht gut, es ist kein Dateinamenargument, es ist eine Argument-zu-Plugin-Funktion. Angenommen, ich: lass foo = "aaa \" bbbb'cccc "
Vitaly Kushner

1
Ich ziehe mir auch darüber die Haare aus. Sie können nicht einen Befehl wie erteilen let xyz = tabpagenr()dann tabnext xyz. Die Skriptsprache von Vim ist ebenso fehlerhaft wie die modale Umgebung fehlerfrei.
Puk

2

Wenn Ihnen die :exeLösung nicht gefällt , können Sie den Inhalt einer Variablen mithilfe des =Ausdrucksregisters in die Befehlszeile "einlesen" . Geben Sie beispielsweise ein und drücken Sie :Ggrepdann Ctrl- rund geben Sie dann ein =foound drücken Sie Enter. Angenommen, die Variable fooenthält "Muster", sollte Ihre Befehlszeile nun wie folgt aussehen:

:Ggrep pattern

Dies hat den Vorteil, dass Sie den tatsächlich ausgeführten Befehl sehen und sogar ändern können, bevor Sie Enterein zweites Mal drücken .

Sehen:

:help "=
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.