So öffnen Sie eine Datei in vim mit Pipe

14

Ich kann den locateBefehl sehr oft verwenden.

Also, wenn ich den folgenden Befehl ausführen.

locate updatedb | head -1

Dann gibt es mir das O/p

/usr/updatedb.conf

Ich frage mich, ob es einen solchen Befehl gibt, mit dem ich diese Datei direkt öffnen kann.

Ich hoffe auf so etwas.

locate updatedb | head -1 | vim
Krishna
quelle

Antworten:

21

Du bist fast fertig:

$ locate updatedb | head -1 | xargs vim

Manchmal (unter bestimmten Terminals) müssen Sie das Terminal nach der Bearbeitung zurücksetzen.

$ reset
periket2000
quelle
2
Höchstwahrscheinlich Ihre Version von locatehaben -l/ --limit/ -nOption, so dass Sie nicht brauchen head -1:locate -n 1 updatedb | xargs vim
Dmitry Alexandrov
1
Warum tritt diese Terminalbeschädigung auf? Gibt es eine Möglichkeit, dies zu vermeiden?
Jacobo de Vera
16

Als interaktiver Editor benötigt Vim sowohl stdin als auch stdout. Daher ist die Verwendung innerhalb einer Pipe problematisch und Vim warnt davor. Die Prozessersetzung für nur eine einzelne Datei löst dies auf einfache Weise:

vim "$(locate updatedb | head -1)"

Sie können auch Backticks verwenden, und das funktioniert sogar in Vim selbst:

:edit `locate updatedb | head -1`
Ingo Karkat
quelle
Dies funktioniert auch bei Strings mit Leerzeichen, was für Dateinamen wie "version 2 - final.csv" gut ist.
Alex Moore-Niemi
0

Ich weiß, dass dies eine schlechte Lösung ist, habe dies jedoch zum Erstellen eines Alias ​​in .bashrc verwendet:

locate updatedb  > /tmp/vimForTempDontTouch && vim /tmp/vimForTempDontTouch

Nachteile: hässlich

Vorteil: Keine Nebenwirkungen mit Terminal

Tebe
quelle