Verwenden Sie vim in pipeline, um die aktuelle Zeile beim Beenden auf stdout auszugeben.

467
Brad Parks

Kann ich so etwas tun:

$ ls | vim | xargs ... 

und haben vim alle Zeilen, die beim Beenden visuell ausgewählt wurden, zu stdout?

Wenn es einfacher wäre, einfach die "aktuelle Zeile" auszugeben, dann funktioniert das auch.

Ich bin natürlich offen für die Übergabe einiger Befehlszeilenargumente an vim oder eines benutzerdefinierten vimrc, damit es funktioniert.

ANMERKUNG: Ich möchte dies verwenden, um mir zu ermöglichen, einen beliebigen Text, interaktiv in der Befehlszeile mit VIM auszuwählen, unabhängig davon, ob es sich um eine vollständige Zeile oder um Teile einer einzelnen Zeile handelt.

1

2 Antworten auf die Frage

2
Ingo Karkat

Sie choose.shimplementieren grundsätzlich den Befehl vipe( vi pipe ) von moreutils neu :

SYNOPSIS command1 | vipe | command2  DESCRIPTION vipe allows you to run your editor in the middle of a unix pipeline and edit the data that is being piped between programs. Your editor will have the full data being piped from command1 loaded into it, and when you close it, that data will be piped into command2. 
Sicher! Guter Punkt. Der einzige wirkliche Unterschied, den ich sehe, ist, dass Vipe Sie zwingt, den Inhalt zu bearbeiten und alles zu löschen, was Sie wollen. Bei meiner obigen Vorgehensweise kann ich einfach den gewünschten Text visuell auswählen, F4 drücken, und das wird an die Ausgabe gesendet - also weniger Tastaturarbeit, meiner Meinung nach. Ich bin auf dieses Skript gestoßen, als ich nach vipe info suchte. Brad Parks vor 5 Jahren 0
1
Brad Parks

Ich habe eine Lösung gefunden, die mit vim ziemlich leicht funktioniert, also kann ich jetzt solche Dinge tun

$ ls | choose.sh | xargs .... 

Dadurch wird vim gestartet, ich kann den gewünschten Text visuell auswählen und den ausgewählten Text an stdout übergeben, wenn ich auf drücke F4. Beachten Sie, dass ich den Puffer auch einfach bearbeiten und so ändern kann, dass er nur den Text enthält, den ich auswählen, speichern und beenden möchte, und der Inhalt des Puffers an stdout übergeben würde. Also die ganze Kraft von vim, interaktiv etwas an der Kommandozeile zu "wählen"!

Ich kann, indem folgenden meiner dies mit Vim tun .vimrc(verhakt von hier )

map <F4> "*yggdG"*pZZ 

und Folgendes in einem Skript speichern ( von hier abgehängt )

wähle.sh

#!/bin/bash # create temporary file TMPFILE=`mktemp /tmp/vipe.bashXXXXXXXX` cat > $ vim $ < /dev/tty > /dev/tty cat $ rm $