Ist es möglich, in vim ein Textobjekt zu definieren, das auf einen rechteckigen Bereich einwirkt?
Angenommen, ich habe vertikal ausgerichtete Textspalten wie folgt:
column 1 co column 2 col
lumn 1 colu umn 2 column
mn 1 column 2 column 2 c
1 column 1 olumn 2 colu
Wäre es möglich, ein Textobjekt c
für Spalten zu definieren , dac
das eine Spalte löscht, yac
sie zerrt, cac
ändert und so weiter?
(Ich weiß , über Ctrl-V für einen rechteckigen Bereich auswählen und ich weiß , Sie dann verwenden kann d
, y
usw. zu löschen, yank etc der ausgewählten Region. Aber ich bin speziell gespannt , was möglich Textobjekte verwenden.)
cursor-motions
custom-text-object
Leah Velleman
quelle
quelle
Antworten:
Ja, das ist möglich. @PeterRincker schlägt das Plugin textobj Wort-Spalte , die vier Textobjekte definiert (
ic
,ac
,iC
undaC
) für wortbasierten Spalten.Die Idee hinter dieser Funktionalität besteht darin, eine Funktion zu erstellen, die eine spaltenbasierte Bewegung definiert, und diese Funktion dann entsprechend den Zuordnungen des visuellen / ausgewählten Modus und den ausstehenden Zuordnungen des Bedieners zuzuordnen. Um das oben genannte Plugin als Beispiel zu verwenden, werden die folgenden Zuordnungen erstellt:
Hier wird
TextObjWordBasedColumn(...)
die Spaltenbewegung definiert und sowohl dem visuellen / Auswahlmodus mitxnoremap
als auch dem vom Bediener anstehenden Modus mit zugeordnetonoremap
. Beachten Sie, dass die Funktion etwas komplex ist, um mit Indendationen umzugehen und die entsprechenden Bewegungsgrenzen zu finden.quelle
Ist es möglich? Absolut! Groß- und Kleinschreibung und Text : textobj-word-column.vim .
So erstellen Sie Ihre eigenen Textobjekte
Normalerweise wird der visuelle Modus verwendet, um ein neues Textobjekt zu erstellen. Der visuelle Modus kann zeilenweise, zeichenweise (normalerweise) oder visuell blockiert sein. Hier sind die Grundlagen dessen, was Sie benötigen:
a{char}
oderi{char}
wo{char}
sowohl beschreibend als auch nicht verwendet. zBi/
als Beispieltextobjekt zwischen/
's.T/
t/
v
xnoremap
.onoremap
und verwendet:normal
.Nun zu einem Beispiel unserer einfachen,
i/
die ein Textobjekt zwischen/
's erstellt:Solange Sie den Grundzutaten folgen, können Sie Textobjekte für alle möglichen Dinge erstellen.
Erweiterte Erstellung von Textobjekten mit vim-textobj-user
Das vim-textobj-user- Plugin bietet eine gängige Methode, um benutzerdefinierte Textobjekte deklarativer zu definieren. Zum Beispiel ist hier ein PHP-Tag-Textobjekt:
Weitere Hilfe zu vim-textobj-user finden Sie in der Hilfe doc :
:h textobj-user-introduction
.Für weitere Hilfe
Sowie die Vim-Wiki-Seite Neue Textobjekte erstellen.
quelle