¿Cómo uso un contenido variable como argumento para el comando vim?

12

por ejemplo, supongamos que hice

:let foo=pattern

y ahora quiero realizar Ggrep patterpero usar variable en foolugar de la pattercadena literal .

:echo foo

salidas pattern, pero

:Ggrep foo

solo busca foo

ACTUALIZAR:

construir una cadena de comando y luego ejecutar: ejecutar en él no es una solución, es un hack. Y se rompe con cualquier valor de variable no trivial.

Vitaly Kushner
fuente
¿Qué es Ggrep(G mayúscula)?
akira
git grep del complemento vim 'fugutive'
Vitaly Kushner
El comando de ejemplo está mal. se debe dejar foo = 'patrón'. Diga eso: ejecutar es un hack está totalmente mal. Esa es la solución: quieres que vim evalúe el comando antes de ejecutarlo
albfan

Respuestas:

2

No se trata de variables, pero tal vez el comando vim abreviado puede ayudar. Probar desde la línea de comando:

:abbreviate foo pattern

Entonces

:Ggrep foo<space>

Completará 'foo' a su 'patrón'.

alexche8
fuente
Ahora intenta correr echo foo. Opps echo patternque no es una variable. Este es un truco y un error.
albfan
7

qué pasa:

:execute ':grep ' . foo
akira
fuente
¿Cómo escapo correctamente el contenido de Foo? puede contener caracteres especiales como ", ', /, \, etc.
Vitaly Kushner
1
@Vitaly Kushner: Consulte ": help escape ()" y ": help fnameescape ()".
garyjohn
Sé escape (), pero no estoy seguro de qué personajes escapar
Vitaly Kushner
fnameescape () no es bueno, no es un argumento de nombre de archivo, es una función arg para el complemento. supongamos que: let foo = "aaa \" bbbb'cccc "
Vitaly Kushner
1
Me estoy sacando el pelo por esto también. No puede emitir un comando como let xyz = tabpagenr()entonces tabnext xyz. El lenguaje de secuencias de comandos de Vim es tan defectuoso como su entorno modal es impecable.
puk
2

Si no le gusta la :exesolución, puede "leer" el contenido de una variable en la línea de comando utilizando el =registro de expresión. Por ejemplo, escriba, :Ggrepluego presione Ctrl- ry luego escriba =fooy presione Enter. Suponiendo que la variable foocontenía "patrón", su línea de comando ahora debería verse así:

:Ggrep pattern

Esto tiene la ventaja de que puede ver el comando real que se ejecutará e incluso modificarlo antes de presionar Enterpor segunda vez.

Ver:

:help "=
Heptita
fuente