So öffnen Sie eine Datei in vim mit Pipe

3768
Krishna

Ich kann den locateBefehl extrem 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 
12

3 Antworten auf die Frage

19
periket2000

Sie sind fast fertig:

$ locate updatedb | head -1 | xargs vim 

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

$ reset 
Wahrscheinlich haben Ihre Versionen von `locate` die Option -l` /` --limit` / `-n`, sodass Sie` head -1` nicht benötigen: `locate -n 1 aktualisiertb | xargs vim` Dmitry Alexandrov vor 9 Jahren 2
Warum passiert diese terminale Korruption? Gibt es eine Möglichkeit, dies zu vermeiden? Jacobo de Vera vor 9 Jahren 1
14
Ingo Karkat

Als interaktiver Editor benötigt Vim sowohl stdin als auch stdout. Daher ist die Verwendung innerhalb einer Pipe problematisch und macht Vim davor gewarnt. Für eine einzelne Datei löst die Prozessersetzung dies leicht:

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 Zeichenfolgen mit Leerzeichen, was für Dateinamen wie "Version 2 - final.csv" hilfreich ist. Alex Moore-Niemi vor 6 Jahren 0
0
Tebe

Ich weiß, dass dies eine schlechte Lösung ist, aber ich habe dies zum Erstellen von Aliasnamen in .bashrc verwendet:

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

Nachteile: hässlich

Vorteil: Keine Nebenwirkungen bei Terminal