comment utiliser un contenu variable comme argument pour la commande vim?


12

par exemple, supposons que je l'ai fait

:let foo=pattern

et maintenant je veux effectuer Ggrep pattermais utiliser une variable fooau lieu de la patterchaîne littérale .

:echo foo

sorties pattern, mais

:Ggrep foo

cherche juste foo

METTRE À JOUR:

construire une chaîne de commande puis exécuter: exécuter dessus n'est pas une solution, c'est un hack. Et cela rompt avec toutes les valeurs de variables non triviales.


qu'est-ce que Ggrep(majuscule G?)?
akira

git grep du plugin vim 'fugutif'
Vitaly Kushner

l'exemple de commande est incorrect. il faut laisser foo = 'pattern'. Dire que: exécuter est un hack est totalement faux. Voilà la solution: vous voulez que vim évalue la commande avant de l'exécuter
albfan

Réponses:


2

Il ne s'agit pas de variable, mais peut-être que la commande abrégée vim peut aider. Essayez depuis la ligne de commande:

:abbreviate foo pattern

ensuite

:Ggrep foo<space>

Il complètera 'foo' à votre 'pattern'.


Essayez maintenant de courir echo foo. Opps echo patternqui n'est pas une variable. c'est un piratage et une erreur.
albfan

7

qu'en est-il de:

:execute ':grep ' . foo

comment puis-je correctement échapper au contenu de foo? il peut contenir des caractères spéciaux comme ", ', /, \, etc
Vitaly Kushner

1
@Vitaly Kushner: Voir ": help escape ()" et ": help fnameescape ()".
garyjohn

Je connais escape (), mais je ne sais pas quels personnages échapper
Vitaly Kushner

fnameescape () n'est pas bon, ce n'est pas un argument de nom de fichier, c'est une fonction arg à plugin. supposons que je: laisse foo = "aaa \" bbbb'cccc "
Vitaly Kushner

1
J'arrache mes cheveux aussi. Vous ne pouvez pas exécuter une commande comme let xyz = tabpagenr()alors tabnext xyz. Le langage de script de Vim est aussi imparfait que son environnement modal est impeccable.
puk

2

Si vous n'aimez pas la :exesolution, vous pouvez "lire" le contenu d'une variable dans la ligne de commande en utilisant le =registre d'expression. Par exemple, tapez :Ggreppuis appuyez sur Ctrl- rpuis tapez =fooet appuyez sur Enter. En supposant que la variable foocontienne "pattern", votre ligne de commande devrait maintenant ressembler à:

:Ggrep pattern

Cela a l'avantage que vous pouvez voir la commande réelle qui sera exécutée, et même la modifier avant d'appuyer Enterune deuxième fois.

Voir:

:help "=
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.