come posso usare un contenuto variabile come argomento per il comando vim?


12

per esempio supponiamo di averlo fatto

:let foo=pattern

e ora voglio esibirmi Ggrep patterma uso la variabile fooanziché la patterstringa letterale .

:echo foo

uscite pattern, ma

:Ggrep foo

cerca solo foo

AGGIORNARE:

costruire una stringa di comando e quindi eseguirlo: eseguirlo non è una soluzione, è un hack. E si rompe con qualsiasi valore variabile non banale.


che cos'è Ggrep(maiuscola G?)?
Akira

git grep dal plugin vim 'fugutive'
Vitaly Kushner

il comando di esempio è sbagliato. dovrebbe essere lasciato foo = 'pattern'. Dì che: esegui è un hack è totalmente sbagliato. Questa è la soluzione: vuoi che vim valuti il ​​comando prima di eseguirlo
albfan

Risposte:


2

Non si tratta di variabili ma forse il comando abbreviate di vim può aiutare. Prova dalla riga di comando:

:abbreviate foo pattern

Poi

:Ggrep foo<space>

Completerà 'pippo' il tuo 'modello'.


Ora prova a correre echo foo. Opps echo patternche non è una variabile. questo è un trucco e una guida sbagliata.
Alban

7

che dire:

:execute ':grep ' . foo

come posso sfuggire correttamente al contenuto di foo? potrebbe contenere caratteri speciali come ",", /, \, ecc.
Vitaly Kushner

1
@Vitaly Kushner: vedi ": help escape ()" e ": help fnameescape ()".
garyjohn,

Conosco escape (), ma non sono sicuro di quali personaggi fuggire
Vitaly Kushner

fnameescape () non è buono, non è un argomento di nome file, è una funzione arg to plugin. supponiamo I: let foo = "aaa \" bbbb'cccc "
Vitaly Kushner

1
Mi sto strappando i capelli anche per questo. Non è possibile emettere un comando come let xyz = tabpagenr()allora tabnext xyz. Il linguaggio di scripting di Vim è imperfetto quanto il suo ambiente modale è impeccabile.
puk

2

Se non ti piace la :exesoluzione, puoi "leggere" il contenuto di una variabile nella riga di comando usando il =registro delle espressioni. Ad esempio, digitare :Ggrepquindi premere Ctrl- re quindi digitare =fooe premere Enter. Supponendo che la variabile foocontenesse "pattern", la riga di comando ora dovrebbe apparire come:

:Ggrep pattern

Ciò ha il vantaggio di poter vedere il comando effettivo che verrà eseguito e persino modificarlo prima di premere Enteruna seconda volta.

Vedere:

:help "=
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.