Gibt es eine Möglichkeit, Text in Klammern (oder geschweiften Klammern) in vim einzuschließen?
Mit anderen Worten, wie würden Sie das tun?
Anfangszeichenfolge:
It is sunny outside.
Letzte Zeichenfolge:
It is (sunny) outside.
Lustigerweise habe ich nur gedrückt :w
, um diese Frage einzureichen.
Viel Spaß beim Schwimmen, SOCommunity!
vim
parentheses
Gl
quelle
quelle
Antworten:
Surround.vim sollte den Trick machen. Wenn Sie dies mit '.' Wiederholen möchten, lesen Sie hier .
quelle
Für ein Wort habe ich verwendet:
Gehen Sie also zum Wortanfang, schneiden Sie das Wort aus und wechseln Sie in den Einfügemodus, geben Sie die Klammern ein, beenden Sie den Einfügemodus und fügen Sie das Wort wieder ein.
Denken Sie daran, dass dies Ihr Ruckregister überschreibt.
Sie können bcw natürlich durch die gewünschten Bewegungs- und Auswahlarten ersetzen
quelle
qbcw()<Esc>Pq
dann,@q
um schnell Wörter zu wiederholen."0
Hier sind Beispiele mit Surround.vim . Platzieren Sie im normalen Vim-Modus den Cursor über dem gewünschten Wort (in diesem Fall sonnig) und geben Sie Folgendes ein:
Geben Sie dann ein
)
Damit:
Anfangszeichenfolge:
Letzte Zeichenfolge:
Zusätzlicher Platz: Verwenden Sie den öffnenden Paren oder die Klammer,
ysiw(
um ihn mit Parens und einem Leerzeichen zwischen Paren und Anfang + Wortende zu umgeben.Einfacher im visuellen Modus Rufen Sie den visuellen Modus auf, indem Sie drücken
v
. Wenn Sie jetzt tippenS(
, wird das Wort von Leerzeichen umgeben. Wenn Sie jedoch)
stattdessen das Schließen verwendenS)
, wird es nicht von Leerzeichen umgeben.Dies gilt für alle Bracket-Pair-Umgebungen
<> [] {} ()
, nicht nur für()
. Das Verhalten vonS<
ist so, dass es ein Tag-Gehäuse erwartet, das nurS>
als umgeben kann<>
.Mehr:
Typ ,
ysiw
gefolgt von}
den gleichen für curlies zu tunHier können Sie noch einige Beispiele hinzufügen:
Typ
cs('
auf [c] hange [s] mgebung von (zu "cs'(
von 'Umgebung zu ()ds(.
[d] elete(
[s] urroundings insgesamt zu eleteSogar mehr:
Und warum nicht den Rest der Tpope-Seite zitieren, um uns vor dem Klicken auf den Link zu bewahren?
// Zitat beginnen:
Es ist am einfachsten mit Beispielen zu erklären.
- -
- -
- -
- -
- -
- -
- -
- -
Dieses Plugin ist sehr leistungsfähig für die HTML- und XML-Bearbeitung, eine Nische, die derzeit in Vim Land unterfüllt zu sein scheint. (Im Gegensatz zum Einfügen von HTML / XML, für das viele Plugins verfügbar sind). Das gleichzeitige Hinzufügen, Ändern und Entfernen von Tagspaaren ist ein Kinderspiel.
Der
.
Befehl funktioniert mitds
,cs
undyss
wenn Sie installieren repeat.vim .quelle
Sie können eine einfache Zuordnung für diese Art von Dingen definieren. Das sollte es tun. Geben Sie im normalen Modus z ein, um ein Wort in Klammern zu umgeben.
quelle
:nnoremap <leader>( bi(<esc>eli)<esc>
Oder habe ich etwas verpasst? Übrigens sehr gute Antwort.Warum nicht verwenden
:s//
( suchen und ersetzen )?Z.B:
Sie haben wahrscheinlich etwas anderes im Sinn, aber ich kann anhand Ihrer Frage nicht sagen, was es ist.
(
&
ist eine Abkürzung für den übereinstimmenden Text)quelle
Surround.vim
quelle
Sie können die folgenden Befehle verwenden:
Der Vorteil ist, dass Sie den Punktbefehl verwenden können, um diese Aktion für verschiedene Wörter zu wiederholen. Dies funktioniert auch für benutzerdefinierte Gehäuse, zum Beispiel:
Vor dem Wechsel:
Verwenden Sie dann den Befehl:
Endergebnis:
quelle
v
und dann ganzc(<C-r><C-o>")<ESC>
offensichtlich verwenden. Das Einfügen des Standardregisters oder des unbenannten Registers mit dem Text des letzten Löschens oder Ziehens (siehe:help i_^r
) an die letzte Position des Cursors (:help ^o
) und das sofortige Einfügen einer schließenden Klammer ist sehr praktisch.Ich bevorzuge es, keine Plugins zu verwenden und möchte alles auf meine Punktedateien beschränken, um die Portabilität zu vereinfachen. Der einfachste Weg, den ich mir vorstellen kann, besteht darin, ihn einfach aufzunehmen und wiederzugeben. Wenn Sie vorhaben, es über mehrere Sitzungen hinweg häufiger zu verwenden, können Sie den Schlüssel auch in Ihrem .vimrc zuordnen, aber das musste ich nicht (und ich bin wirklich schlecht darin, herauszufinden, welchem Tastenanschlag ich zuordnen soll).
Angenommen, Sie haben ein Anfängerverständnis für vim. Nehmen wir an, ich habe eine Linie (der Einfachheit halber), die ich mit eckigen Klammern umgeben möchte. z.B
hello world
Gehen Sie in den normalen Modus.
q1
um die Aufnahme zu starten. Gehen Sie nun wie folgt vorESC ^i[ ESC $a] ESC
Dadurch bleibt die aktuelle Zeile in Klammern. Jetzt können Sie eine beliebige Zeile auswählen und drücken
@1
, um sie zu wiederholen.Wenn Sie beispielsweise möchten, dass das aktuelle Wort in Klammern gesetzt wird, nehmen Sie einfach das folgende Rezept auf und spielen Sie es ab:
ESC bi[ ESC ea] ESC
Sie können natürlich versuchen, für Tastenanschläge zu optimieren, aber das dient mir vorerst.
quelle
Ich weiß, dass dies eine alte Frage ist, aber eine so komplexe Lösung wie diese wurde hier noch nicht erwähnt und ich bin sicher, dass sie jemandem helfen könnte. In meiner .vimrc- Datei habe ich eine Zeile wie folgt:
Es reicht aus, im visuellen Modus Text auszuwählen und zu drücken
(
. Diese Zuordnung funktioniert auch im zeilenweisen und blockweisen visuellen Modus.Wie funktioniert es?
<ESC>
beendet den visuellen Modus:let p = &paste<CR>:set paste<CR>...:exe "let &paste=".p<CR>
stellt sicher, dass das Makro im Einfügemodus ausgeführt wird (da Autoindent und ähnliche Verbesserungen einige zusätzliche Leerzeichen enthalten können, die wir nicht möchten), während der Einfügestatus nach dem Makro derselbe bleibt wie vor der Ausführung des Makros:let a = line2byte(line('.')) + col('.')<CR>
findet den aktuellen Byte-Offset (1-basiert)gv
wählt den zuvor ausgewählten Text erneut ausc
löscht die Auswahl und bringt uns in den Einfügemodus, um die Auswahl zu ersetzen()<ESC>
wird in die gewünschten Klammern gesetzt und den Einfügemodus verlassen:if getregtype()==#'V'<CR>call setreg('"',substitute(@",'\n$','',''),'c')<CR>endif<CR>
entfernt das Trailing\n
aus dem"
unnamed () -Register und ändert seinen Typ in zeichenweise, jedoch nur, wenn es zuvor zeilenweise war (um das Einfügen aus der Registrierung in Klammern zu ermöglichen).P
fügt zuvor ersetzten Text in die Klammern ein:exe "goto ".a<CR>
bringt den Cursor zurück auf die vorherige Position (goto
verwendet einen 0-basierten Versatz, sodass wir die zuvor aufgezeichnete Position aufgrund der eingefügten linken Klammer nicht um eins erhöhen müssen).quelle
Für so etwas ist es wahrscheinlich besser, mit Bereichen und Gruppen zu spielen, als externe Plugins zu verwenden:
Im obigen Abschnitt wird nach einem Wort mit 5 Buchstaben gefolgt von einem Leerzeichen gesucht, die Übereinstimmung mit () gruppiert und durch umgebende Klammern um die gruppierte Übereinstimmung ersetzt.
quelle
Ein weiterer nützlicher Leckerbissen, den ich in anderen Antworten noch nicht gesehen habe:
In einer Abbildung, die Verwendung
expand("<cword>")
(oder einem anderen ähnlichen<cWORD>
,<cexpr>
usw.). Dadurch erhalten Sie Zugriff auf das "Wort unter dem Cursor".So ersetzen Sie beispielsweise alle Vorkommen in der aktuellen Zeile "Wort unter dem Cursor" durch Versionen in Klammern:
Es gibt einige Nachteile:
<cword>
ein Ausrufezeichen darin steht, wird dies unterbrochen (Sie könnens///
natürlich ein anderes Zeichen auswählen )./g
Flag) ausführen. Sie können sogar alle Vorkommen in einer Datei mit ausführen%s...
.quelle