Etwas, was ich häufig tue, ist, einen Suchbefehl auszuführen und dann alle in vi zu bearbeiten, was ungefähr so aussieht:
> find . "*.txt"
./file1.txt
./file2.txt
./path/to/file3.txt
> vi ./file1.txt ./file2.txt ./path/to/file3.txt
Gibt es eine clevere und einfache Möglichkeit, dies alles in einer Befehlszeile zu erledigen?
xargs
mein Shell-Terminal zu zerstören. Die richtige Lösung ist die folgende von @ DevSolarAntworten:
Dies sollte den Trick machen:
Verwenden Sie Vim, es ist besser für Ihre Gesundheit. :-)
Die oft übersehene
+
Option-exec
lässt alle Dateinamen (bis zu Zeilenlängenbeschränkungen) in einer Zeile erscheinen, dh Sie erhalten weiterhin alle Dateien, die in einervim
Sitzung geöffnet wurden (navigiert mit:n
für die nächste und:N
für die vorherige Datei).Mit erhalten
vim -p
Sie eine Registerkarte für jede Datei. Überprüfen Sie:help tab-page-commands
für weitere Details.Mit erhalten
vim -o
Sie horizontal geteilte Fenster für jede Datei,vim -O
vertikal geteilte Fenster. Überprüfen Sie:help window-move-cursor
für weitere Details.Beachten Sie, dass die vorherige Version dieser Antwort
vim $(find . -name "*.txt")
nicht mit Leerzeichen in Dateinamen funktioniert und Auswirkungen auf die Sicherheit hat.Piping in
xargs vi
gibt einWarning: Input is not from a terminal
, plus ein Terminal mit komplett falschem Verhalten danach. User Grawity hat in einem Kommentar unten und in dieser Frage etwas ausführlicher erklärt, warum .quelle
/dev/tty
Fall ioctl () öffnen und aufrufen; dazu ist es einfach zu faul.) Wenn es von xargs aufgerufen wird, erhält vim/dev/null
als Standardeingabe, die nur Terminal-Control-Ioctls ignoriert.vim -p
Wenn Sie Dateiregisterkarten möchten. (gt
Und umgT
zu navigieren oder mit der Maus zu klicken.)vim
, geben Sie einfach-
wie in als erstes Argument anecho foobar | vim -
.find . -name "*.txt" | vim -
gibt Ihnen eine Vim-Sitzung für eine unbenannte Datei mit den Namen der gefundenen Dateien, was nicht das ist, wonach das OP gefragt hat ...Oder laufen Sie vim und von dort:
quelle
Wenn Sie möchten, dass sie einzeln geöffnet werden, können Sie auch find -exec oder eine einfache for-Schleife verwenden. Bearbeitet nach Cevings Kommentar.
oder
quelle
-name
es fehlt. Und zweitens: Der Befehl schlägt kläglich fehl, sobald ein Dateiname ein Leerzeichen enthält. -1 für eine schlecht beratene Antwort.Wenn Sie Ihren
find
Befehl bereits eingegeben haben, ist dasxargs
Öffnen der Suchergebnisse möglicherweise viel einfacher :Die
-p
Option weist vim an, jede Datei in einer neuen Registerkarte zu öffnen. Ich finde das praktischer als die Verwendung von Puffern, aber wenn nicht, lassen Sie diese Option einfach weg.quelle
So bearbeiten Sie alle
*.txt
können Sie einfach laufen:vim *.txt
.find
Lesen Sie weiter, um die von zurückgegebenen Dateien zu bearbeiten .Unter Unix / macOS können Sie
find
BSD verwendenxargs
(siehe:)man xargs
, zSiehe auch : Das Terminal wurde nach dem Aufrufen von Vim mit xargs auf Vim.SE gesprengt.
quelle