Je souhaite créer une liste 'Quickfix' (voir Malheureusement, Vim n'aime pas le "tuyau" et la commande échoue. Quelle est la meilleure façon de faire cela de Vim? p> p> : Aide QuickFix CODE>) avec tous les fichiers contenant des lignes avec "ABC" mais non "XYZ". J'espérais pouvoir exécuter la commande Vim Ex suivante:
5 Réponses :
Vous pouvez définir Bien sûr, cela affecterait tous em> votre grepprg code>, qui définit la commande Vim utilise pour exécuter
: grep code>. Cela peut prendre un tuyau, bien que je ne l'ai pas essayé. P>
: grep code> s p>
Il ne semble pas prendre un tuyau. Ou du moins, cela ne fonctionne pas pour moi: "SET GREPPRG = GRPPRG = GRP \ -N \ $ * \ | \ \ CUT \ -C \ 1- $ colonnes" (également essayé avec un "\ 'avant le" |'. Il donne "non une commande d'éditeur: CUT -C 1- $ Colonnes". Peut-être] il doit être échappé correctement, mais je n'ai pas encore compris comment.
Pour une raison quelconque, je ne peux pas laisser celui-ci seul! p>
Que diriez-vous d'utiliser :! grep ...> Nom de fichier code> suivi de
: nom de fichier code>, qui ouvrira la sortie comme une liste Quickfix. P>
Vous pouvez le faire en deux étapes:
:call Mygrep("abc", "xyz")
J'aime le | coupon code> partie. Je ne savais pas que tu pouvais faire ça! Il n'apparaît pas que les parenthèses sont nécessaires pour la commande externe Grep.
Je viens de comprendre comment échapper Dans mon cas, mon Le tuyau nécessite une double échappée. Il semble que VIM finit par traiter la valeur de donc ce que j'ai maintenant dans mon : greppprg code> pour utiliser un tuyau.
: greppprg code> est basé sur l'utilitaire
couvercle code> de gnu idutils. Je souhaite que la sortie du programme code> Lid code> soit triée. C'est parce que lorsque j'utilise un motif,
couvercle code> trouve des correspondances en dehors de la commande. Je veux rechercher un motif comme, disons,
pthread. * Verrouillage code> et traverser les correspondances afin de suivre la nicheur de verrouillage et de ne pas sauter entre les fichiers d'une manière qui suit l'ordre interne de la
ID code> de base de données générée par
mkid code>, qui entremende les correspondances de différents fichiers. P>
BlockQuote>
greppprg code> comme matériau de commande. Si vous échappez à la pipe juste une fois, elle est interprétée comme syntaxe Vim. P>
.vimrc code> est-ce: p>
:g/xyz/d
C'est de nombreuses années plus tard, mais j'ai trouvé une alternative plus directe. ci-dessous est un exemple d'utilisation de mien qui utilise des pipes. Je préfixe toutes mes questions dans mes notes de travail avec extrait pertinent de l'aide VIM. P> CEXPR code> commande dans VIM. Il implémente à peu près les réponses de @jwd et @skeetpt, et est un peu plus flexible car elle accepte une liste.
q: code> pour les trouver rapidement. Je voulais utiliser Quickfix List and Vim pour parcourir des questions, affiché le premier premier. P>
:cex[pr][!] {expr} Create a quickfix list using the result of {expr} and
jump to the first error.
If {expr} is a String, then each new-line terminated
line in the String is processed using the global value
of 'errorformat' and the result is added to the
quickfix list.
If {expr} is a List, then each String item in the list
is processed and added to the quickfix list. Non
String items in the List are ignored.
See |:cc| for [!].
Examples: >
:cexpr system('grep -n xyz *')
Êtes-vous sûr de ne pas vouloir dire
:! ... code>? (point d'exclamation)
Oui. Si vous utilisez le "!", Il ne revient pas comme une liste "Quickfix".