Hinzufügen von Klammern um hervorgehobenen Text in Vim

14

Gibt es in Vim eine Funktion, mit der Klammern um den hervorgehobenen Text eingefügt werden können?

Wenn ich hervorheben Zum Beispiel n = getchar()in if (n = getchar() == '\n'), ich möchte Klammer um das setzen.

mrQWERTY
quelle

Antworten:

18

Sie benötigen einen fantastischen und unverzichtbaren Plugin- Surround . Dann wird es gerne tun, was Sie wollen, wenn Sie Text auswählen und eingeben Sb(Klammern), oder S)(beachten Sie die Großbuchstaben S!).

Tatsächlich kann es viel umschließen: verschiedene Anführungszeichen, Tags usw. Sie können den Cursor in das Wort mit doppelten Anführungszeichen setzen und doppelte Anführungszeichen in einfache Anführungszeichen cs"'ändern, indem Sie Folgendes eingeben: (change-surround "to '). Oder Sie können Anführungszeichen durch Eingabe von ds"(delete-surround ") vollständig löschen .

Lesen Sie die Dokumente per Link, es ist wirklich super!

Dmitry Frank
quelle
1
Sie haben jedoch nicht erklärt, wie dies mit der Auswahl geschehen soll. Ich wurde hierher geführt, weil es nicht sofort offensichtlich war.
JackHasaKeyboard
@JackHasaKeyboard, was meinst du, ich habe nicht erklärt, wie es mit der Auswahl gemacht wird? Der zweite Satz in meiner Antwort lautet:> Dann macht er gerne, was Sie wollen, wenn Sie Text und Typ auswählensb (Klammern) oder s).
Dmitry Frank
1
Also hast du es getan. Funktioniert bei mir jedoch nicht, wenn Sie auf sdrücken, wird die Auswahl gelöscht und der Einfügemodus aufgerufen.
JackHasaKeyboard
1
Dies bedeutet, dass das in meiner Antwort erwähnte "Surround" -Plugin nicht korrekt installiert ist.
Dmitry Frank
Ehrfürchtig in der Tat. Ich benutze es schon eine Weile und kann wetten.
Biocyberman
20

Zusätzlich zu Dmitry's Vorschlag für das Surround-Plugin kann das Hinzufügen von Klammern um hervorgehobenen Text mit dem folgenden Befehl erfolgen:

xi()<Esc>P

Sie können eine Karte im visuellen Modus festlegen, indem Sie beispielsweise \sFolgendes zu Ihrer ~/.vimrcDatei hinzufügen :

xnoremap <leader>s xi()<Esc>P
dotancohen
quelle
1
Das sieht nach einer schönen und einfachen Lösung aus. Wenn ich in Zukunft keine Probleme damit finde, ziehe ich dies zusätzlichen Plugins vor. Vielen Dank!
Zelphir Kaltstahl
3
Es ist eine gute Lösung, aber nicht ganz so vollständig wie die Verwendung des Surround-Plugins, da es nicht funktioniert, wenn Sie ganze Zeilen auswählen ( Vstatt mit v). In diesem Fall werden nur die Zeilen unter Ihren Eltern eingefügt.
Rohan Orton
1

lh-Klammern werden einfach gebunden (, um die Auswahl mit den Klammern zu umgeben. Im Gegensatz zu Surround folgt es nicht der vim-Philosophie der üblichen Tastenkombination. Stattdessen werden weniger Schlüssel benötigt.

Ansonsten gibt es viele Möglichkeiten, um fortzufahren. Wenn es Ihnen nichts ausmacht, das unbenannte Register durcheinander zu bringen, verwenden Sie auch s(^R")<esc>( ^Rlike CTRL-R).

Luc Hermitte
quelle
0

Aufbauend auf der Antwort von dotancohen habe ich folgendes in meine .vimrc:

xnoremap <leader>( <ESC>`>a)<ESC>`<i(<ESC>

Sie können auf einfache Weise ähnliche Zuordnungen für [], {} usw. vornehmen. Dies funktioniert, indem Sie zu den Start- und Endmarkierungen springen, die implizit nach dem Beenden des visuellen Modus festgelegt wurden. Auf diese Weise werden bei Auswahl ganzer Zeilen die Parens am Anfang / Ende der ersten / letzten Zeile hinzugefügt. es überschreibt nicht Ihr Ruckregister; und es wird den Cursor direkt vor dem Eröffnungsparen verlassen.

Vir
quelle