Je me retrouve à faire ce qui suit presque tous les jours
- Lancer une recherche (
find -name somefile.txt
) - Ouvrir le résultat dans
vim
Le problème est que je dois copier et coller le résultat de find
dans la vim
commande. Y a-t-il un moyen d'éviter d'avoir à faire cela? J'ai expérimenté un peu ( find -name somefile.txt | vim
) mais n'ai rien trouvé qui fonctionne.
Merci d'avance
vim `find -name somefile.txt`
. @StuartPowers Alternativement, vous pouvez utiliservim `!-1`
si vous avez déjà utilisé cette recherche était votre commande précédenteEssaye ça:
:r!find /<path> -name 'expression'
Les résultats devraient apparaître dans vim une fois la recherche terminée.
Ou
Essayer:
la source
Si cela ne vous dérange pas de réexécuter la commande: appuyez sur Upet ajoutez une
xargs
commande. Ou utilisez la substitution d'historique et exécutezIl existe un moyen léger d’enregistrer la sortie d’une commande qui fonctionne en ksh et zsh mais pas en bash (il faut que le côté sortie d’un pipeline soit exécuté dans le shell parent). Tuyau de la commande dans la fonction
K
(définition zsh ci - dessous), qui k EEP sa sortie dans la variable$K
.L'enregistrement automatique de la sortie de chaque commande n'est pas vraiment possible avec le shell seul; vous devez exécuter la commande dans un terminal émulé. Vous pouvez le faire en exécutant à l'intérieur
script
(un utilitaire BSD, mais disponible sur la plupart des ordinateurs, y compris Linux et Solaris), qui enregistre toutes les sorties de votre session dans un fichier (il faut encore un peu d'effort pour détecter de manière fiable la dernière invite dans le script ).la source
J'aime utiliser les ticks arrières `(c'est sur la même touche que le ~)
Les ticks arrière exécutent la commande à l'intérieur des ticks et la sortie peut alors être utilisée par la commande. Ce qui précède trouvera tous les fichiers somefile.txt, vous permettant ainsi de vous
:next
déplacer dans tous les fichiers.C'est très utile si vous passez quelques essais à affiner la commande, car vous pouvez alors utiliser la substitution d'historique pour répéter la commande pour l'éditeur.
la source
Je dois avoir manqué le point ici, parce que je voudrais utiliser:
(si je savais qu'il n'y en avait qu'un
:echo &path
) ou si je les voulais tous:Edit: Whoa! Ok, donc j'ai bien manqué le point - vous voulez que la liste de recherche, pas les fichiers réels soient ouverts? Essayez (encore une fois dans Vim):
-- ma faute :)
la source
Comme @davidmh l'a souligné dans les commentaires, vous pouvez utiliser
xargs
l'indicateur-o
si vous souhaitez utiliser une application interactive.Si vous ne l'utilisez pas
-o
, vous allez probablement gâcher l'état du terminal après avoir quitté vim. Si vous l'avez fait, vous devriez pouvoir réinitialiser votre terminal avec la commande suivante:la source
J'ai écrit une fonction
pvim
qui fait ce que tu veux. Si plusieurs lignes sont acheminées vers ce dernier,pvim
il ignore tout sauf le premier. Il pourrait être étendu pour ouvrir plusieurs fichiers dans vim.Utilisez-le comme:
qui chargera le premier "foo.txt" dans vim comme si vous aviez tapé:
vim $(find . -name "foo.txt | head -n1")
la source
Voici une
xargs
solution plus simple que celles déjà mentionnées:L'
-p
option indiquevim
d'ouvrir chaque fichier dans un onglet séparé. Je trouve cela plus pratique que d'utiliser des tampons.la source
J'ai trouvé que l'ouverture d'un fichier à l'aide de
locate
in vim est extrêmement pratique et beaucoup plus rapide quefind
.La commande suivante recherche un fichier appelé
app.py
dans le chemin contenant le répertoireMyPythonProject
.la source