In anderen Editoren hat sich Folgendes als nützlich erwiesen:
- Nimm den ausgewählten Text
- Führen Sie einen externen Befehl aus und übergeben Sie die Auswahl an den entsprechenden Befehl
stdin
- Nimm die externen Befehle
stdout
und ersetze die aktuelle Auswahl damit.
Auf diese Weise können Sie nützliche Textwerkzeuge schreiben, die die Auswahl in jeder Sprache bearbeiten, die grundlegende Funktionen unterstützt.
Wie geht das mit vim über die Auswahl? ... ein einzelnes Zeichen, Wort, Absatz ... usw.
(Direkt in der Kommandozeile oder über eine Tastaturbindung?)
Hinweis
Befehle wie die !sort
Arbeit auf Leitungsebene, der Grund, warum ich diese Frage stelle, ist, dass ich die Auswahl bearbeiten möchte. (dh der Text, der entfernt würde, wenn x
gedrückt würde).
quelle
sort
Befehl.:sort
?Ich habe ein Plugin namens express.vim geschrieben , das dabei helfen kann. Das Plugin definiert einen Operator
g=
, mit dem Sie einen VimScript-Ausdruck über eine Bewegung (oder eine visuelle Auswahl) auswerten können. Sie werden zur Eingabe eines Ausdrucks aufgefordert, in dem Siev:val
den Text, der von der Bewegung (oder auch von der visuellen Auswahl) abgedeckt wird, als Platzhalter verwenden können .In diesem Fall würde ein nützlicher Ausdruck die
system()
Funktion verwenden, die einen externen Befehl ausführt.(Hier habe ich
tr
als einfaches Beispiel einen externen Befehl verwendet.)Die Möglichkeit, express.vim für dieses Problem zu verwenden, besteht darin, den Text im visuellen Modus auszuwählen, ihn
g=
gefolgt von diesem Ausdruck einzugeben und dann zu drückenEnter
:Ich gebe zu, es ist nicht einfach zu bedienen. (Tatsächlich verwende ich dieses Plugin selbst selten!) Ich überlege, eine Verknüpfung zum Aufrufen eines externen Befehls hinzuzufügen, beispielsweise den Ausdruck mit
!
. Ich werde hier ein Update veröffentlichen, wenn ich das mache.BEARBEITEN
Ich habe express.vim so geändert, dass Ausdrücke, die mit beginnen,
!
als externe Befehle behandelt werden. Wenn Sie sich also an dastr
Beispiel halten, wird das oben Genannte viel einfacher. Geben Sie nach einer visuellen Auswahl Folgendes ein:Erläuterung:
g=
!tr a-z A-Z
als Ausdruck einEnter
quelle
Sie suchen nach den Filterbefehlen in Vim. Sehen
:help filter
. Hier ist die relevante Dokumentation:Wenn Sie also tippen,
5!!sort
werden die nächsten 5 Zeilen ab dem Cursor sortiert.quelle
tr [:lower:] [:upper]
wird nicht nur dieses Wort, sondern die gesamte Zeile in Großbuchstaben geschrieben.Beachten Sie, dass dies mit Folgendem durchgeführt werden kann:
s^R=system('tr a-z A-Z', @")[:-2]^M
(^R
wobei STRG + R und ^ M EINGABE ist)Es könnte auch mit allem funktionieren, was Auswahl + Ersetzen mag
ci"^R=...
.quelle
v
und Bewegen des Cursors) erhalte ich den FehlerE16: Invalid range\nE16: Invalid range\nE476: Invalid command
(unter Linux gibt es alsotr
und andere grundlegende Befehle).s
dass in den Einfügemodus oder:s
den Befehl geht?s
aus dem visuellen Modus oder triffst du:
zuerst?:
An der Reihenfolge der Tasten, die ich geschrieben habe, ist nichts beteiligt. Eine Zuordnung wäre:vnoremap µ s<c-r>=system('tr a-z A-Z', @")[:-2]<cr>
.