comment sélectionner un nième résultat en ligne de commande sans utiliser la souris


3

J'ai obtenu ce pseudonyme pour rechercher un fichier de manière récursive et sans distinction de casse

type fr
fr is aliased to `find . | grep -i'

et alors disons que je cherche un fichier

fr nsstring+util
./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.d
./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.dia
./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.o
./SmartTaxi/Classes/Categories/NSString+Util.h
./SmartTaxi/Classes/Categories/NSString+Util.m

et je veux sélectionner le dernier fichier .. sans avoir à quitter le clavier et à le surligner, etc. y a-t-il un raccourci pour cela sur le CLI?

Pour être plus précis .. le scénario entier est - rechercher un fichier - voir les résultats récupérés - Essentiellement, exécuter une commande sur l'un d'eux .. dans ce cas, je veux juste courir

vi SmartTaxi/Classes/Categories/NSString+Util.m

sans quitter le clavier

Mettre à jour:

L'idée est que cette commande doit être faite en deux parties:

  • fr nomfichier et voir manuellement les résultats renvoyés .. il pourrait y avoir beaucoup de résultats et celui désiré pourrait être en tout une des lignes
  • vi% résultat de la commande ci-dessus% sur une ligne spécifique

@vembutech je ne suis pas sûr de comprendre .. pouvez-vous répéter le point ci-dessus en utilisant mon exemple?
— abbood

J'utilise M-x grep-find dans emacs. Je ne sais pas comment faire ça en vi.
— umeboshi

Réponses:


2

Sans quitter le clavier, vous pouvez sélectionner des lignes spécifiques avec sedet envelopper la commande précédente dans $(...), comme ça:

vi "$(fr nsstring+util | sed -ne 3p)"

Pour sélectionner la dernière ligne, vous pouvez utiliser $ au lieu d'un nombre concret, mais alors vous devez citer le sed commander:

vi "$(fr nsstring+util | sed -ne '$p')"

De manière plus générale, vous pouvez définir une fonction:

nvi() { n=$1; shift; vi "$(eval "$*" | sed -n ${n}p)"; }

Ensuite, pour éditer la 5ème ligne de la sortie de la commande précédente, vous pouvez faire ceci:

fr nsstring+util
nvi 5 !!

c'est proche .. mais si je veux ouvrir NSString+Util.h au lieu? le résultat que je veux n'est pas garanti d'être dans la dernière ligne
— abbood

J'ai également modifié mon pseudonyme pour me débarrasser d'une partie du ballonnement .. de sorte que votre cut -d ne sera pas nécessaire .. mais je me demande toujours de choisir quelle ligne
— abbood

$ est la dernière ligne de sed. Vous pouvez utiliser un numéro de ligne à la place, par exemple 4p. Est-ce assez proche?
— janos

ça marche .. mais je ne dirais pas que c’est utilisable .. c’est plus difficile de taper tout ça au lieu de simplement souligner la ligne .. réponse
— abbood

Voir ma mise à jour, espérons que cela est plus utilisable. Dans tous les cas, il est plus efficace d'utiliser sed -n Np construire que head -N | tail -1
— janos

0

En gros, l’idée est de créer une fonction capable de prendre des arguments. Voir ici

voici les fonctions:

function fr { find . | grep -in "$1"; }
function vifr { vi "`find . | head -$1 | tail -1`"; }

un exemple d'utilisation est:

$ fr nsstring+util
9675:./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.d
9676:./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.dia
9677:./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.o
10232:./SmartTaxi/Classes/Categories/NSString+Util.h
10233:./SmartTaxi/Classes/Categories/NSString+Util.m

$ vifr 10233 

les dernières commandes font la même chose que

vi ./SmartTaxi/Classes/Categories/NSString+Util.m

0

Si tu as dialog alors vous pouvez faire ceci:

find . | grep -i "$1" | sed -e '/$/G' | xargs -d'\n' dialog --menu "text" 0 0 0 3>&1 1>&2 2>&3 | xargs vi

Vous pourriez faire quelque chose de similaire avec zenity si vous avez seulement cela et X sortie.

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.