Dodanie nawiasu wokół podświetlonego tekstu w Vimie

14

Czy w Vimie jest funkcja pozwalająca na dodawanie nawiasów wokół podświetlonego tekstu?

Na przykład, jeśli podkreślają n = getchar()w if (n = getchar() == '\n'), chciałbym umieścić nawiasów wokół tego.

mrQWERTY
źródło

Odpowiedzi:

17

Potrzebujesz niesamowitej i obowiązkowej wtyczki surround . Następnie z radością zrobi to, co chcesz, jeśli zaznaczysz tekst i napiszesz Sb(nawiasy klamrowe) lub S)(zwróć uwagę na duże S!).

W rzeczywistości potrafi dużo otaczać: różne cudzysłowy, tagi itp. Pozwala umieścić kursor w słowie z podwójnym cudzysłowem i zmienić podwójne cudzysłowy na pojedyncze cudzysłowy, wpisując: cs"'(zmień otaczanie "na '). Lub możesz całkowicie usunąć cytaty, wpisując ds"(delete-surround ").

Przeczytaj dokumentację przez link, to naprawdę niesamowite!

Dmitry Frank
źródło
1
Nie wyjaśniłeś jednak, jak to zrobić przy wyborze. Zaprowadzono mnie tutaj, ponieważ nie było to od razu oczywiste.
JackHasaKeyboard,
@JackHasaKeyboard, co masz na myśli, że nie wyjaśniłem, jak to zrobić z zaznaczeniem? Drugi sentyment w mojej odpowiedzi brzmi:> Wtedy z radością zrobi, co chcesz, jeśli wybierzesz tekst i wpisz sb(nawiasy klamrowe) lub s).
Dmitry Frank
1
Tak zrobiłeś. Jednak dla mnie nie działa, naciśnięcie spowoduje jedynie usunięcie zaznaczenia i przejście do trybu wstawiania.
JackHasaKeyboard
1
Oznacza to, że wtyczka „surround”, o której wspomniałem w mojej odpowiedzi, nie jest poprawnie zainstalowana.
Dmitry Frank
Rzeczywiście niesamowite. Używam go od jakiegoś czasu i mogę się założyć.
biocyberman
20

Oprócz sugestii Dmitry'ego dotyczącej wtyczki surround , dodawanie nawiasów wokół podświetlonego tekstu można wykonać za pomocą następującego polecenia:

xi()<Esc>P

Możesz ustawić mapę w trybie wizualnym, używając (na przykład) \s, dodając następujące elementy do ~/.vimrcpliku:

xnoremap <leader>s xi()<Esc>P
dotancohen
źródło
1
To wygląda na ładne i proste rozwiązanie. Jeśli w przyszłości nie znajdę z tym żadnych problemów, wolę to niż dodatkowe wtyczki. Dzięki!
Zelphir Kaltstahl
3
To dobre rozwiązanie, ale nie tak kompletne, jak użycie wtyczki surround, ponieważ nie działa, jeśli wybierasz całe linie (używając Vzamiast v). W tym przypadku po prostu wkleja linie poniżej twoich parens.
Rohan Orton
1

Lewe nawiasy po prostu wiążą się, (aby otoczyć zaznaczenie nawiasami. W przeciwieństwie do surround , nie jest zgodny z typową dla Vima filozofią kluczowania. Zamiast tego wymaganych jest mniej kluczy.

W przeciwnym razie istnieje wiele sposobów postępowania. Jeśli nie masz nic przeciwko zepsuciu nienazwanego rejestru, możesz również użyć s(^R")<esc>( ^Rjak CTRL-R)

Luc Hermitte
źródło
0

Opierając się na odpowiedzi dotancohens, umieszczam w moim .vimrc:

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

Możesz łatwo tworzyć podobne odwzorowania dla [], {} itd. Działa to poprzez przeskakiwanie do początkowych i końcowych znaczników domyślnie ustawionych po zakończeniu trybu wizualnego. W ten sposób zaznaczenie całych linii doda pareny na początku / końcu pierwszej / ostatniej linii; nie zastąpi twojego rejestru szarpnięć; i opuści kursor tuż przed otwierającym paren.

Vir
źródło