Fast jeden Tag mache ich Folgendes
- Führe einen Fund aus (
find -name somefile.txt
) - Öffnen Sie das Ergebnis in
vim
Das Problem ist, dass ich das Ergebnis von kopieren und find
in den vim
Befehl einfügen muss . Gibt es eine Möglichkeit, dies zu vermeiden? Ich habe ein bisschen experimentiert ( find -name somefile.txt | vim
), aber nichts gefunden, was funktioniert.
Danke im Voraus
vim `find -name somefile.txt`
. @StuartPowers Alternativ können Sie verwenden,vim `!-1`
wenn Sie diesen Fund bereits als vorherigen Befehl verwendet habenVersuche dies:
:r!find /<path> -name 'expression'
Die Ergebnisse sollten in vim angezeigt werden, wenn die Suche abgeschlossen ist.
Oder
Versuchen:
quelle
Wenn es Ihnen nichts ausmacht, den Befehl erneut Upauszuführen, drücken Sie und fügen Sie einen
xargs
Befehl hinzu. Oder verwenden Sie die Protokollersetzung und führen Sie sie ausEs gibt eine einfache Möglichkeit, die Ausgabe eines Befehls zu speichern, die in ksh und zsh funktioniert, jedoch nicht in bash (dazu muss die Ausgabeseite einer Pipeline in der übergeordneten Shell ausgeführt werden). Rohr der Befehl in die Funktion
K
(zsh Definition unten), die k seine Ausgabe in der Variablen EEPs$K
.Das automatische Speichern der Ausgabe jedes Befehls ist mit der Shell allein nicht möglich. Sie müssen den Befehl in einem emulierten Terminal ausführen. Sie können dies tun, indem Sie das
script
BSD-Dienstprogramm (das auf den meisten Unices, einschließlich Linux und Solaris, verfügbar ist) ausführen, wodurch die gesamte Ausgabe Ihrer Sitzung über eine Datei gespeichert wird ).quelle
Ich benutze gerne die Back Ticks (auf der gleichen Taste wie das ~)
Die hinteren Häkchen führen den Befehl innerhalb der Häkchen aus und die Ausgabe kann dann vom Befehl verwendet werden. Oben finden Sie alle Dateien somefile.txt, mit denen Sie
:next
sich durch alle Dateien bewegen können.Es ist sehr nützlich, wenn Sie den Befehl einige Male verfeinern, da Sie dann die Protokollersetzung verwenden können, um den Befehl für den Editor zu wiederholen.
quelle
Ich muss den Punkt hier verpasst haben, weil ich verwenden würde:
(wenn ich wüsste, dass es nur einen in meinem gibt
:echo &path
) oder wenn ich sie alle haben wollte:Bearbeiten: Whoa! Ok, also ich habe vermissen den Punkt - Sie finden die Liste wollen, nicht die eigentlichen Dateien geöffnet? Versuchen Sie (erneut, aus Vim heraus):
-- mein Fehler :)
quelle
Wie @davidmh in den Kommentaren zeigte, können Sie
xargs
mit dem Flag verwenden,-o
wenn Sie eine interaktive Anwendung verwenden möchten.Wenn Sie dies nicht tun
-o
, werden Sie wahrscheinlich den Terminalstatus durcheinander bringen, nachdem Sie vim verlassen haben. Wenn Sie dies getan haben, sollten Sie in der Lage sein, Ihr Terminal mit dem folgenden Befehl zurückzusetzen:quelle
Ich habe eine Funktion geschrieben,
pvim
die macht, was Sie wollen. Wenn mehrere Zeilen zupvim
ihm geleitet werden, werden alle bis auf die erste ignoriert, es könnte jedoch erweitert werden, um mehrere Dateien in vim zu öffnen.Verwenden Sie es wie folgt:
Das wird die erste "foo.txt" in vim laden, als ob Sie Folgendes eingegeben hätten:
vim $(find . -name "foo.txt | head -n1")
quelle
Hier ist eine einfachere
xargs
Lösung als die bereits erwähnten:Die
-p
Option teiltvim
mit, dass jede Datei auf einer separaten Registerkarte geöffnet werden soll. Ich finde das praktischer als die Verwendung von Puffern.quelle
Ich fand, dass das Öffnen einer Datei mit Hilfe von
locate
in vim extrem bequem und viel schneller ist alsfind
.Der folgende Befehl durchsucht eine Datei, die
app.py
in dem Pfad aufgerufen wird, der das Verzeichnis enthältMyPythonProject
.quelle