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.