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

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

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`

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.