¿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.


¿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'.


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

¿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 "=
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.