Aggiunta di parentesi attorno al testo evidenziato in Vim


14

Esiste una funzionalità in Vim che consente di aggiungere parentesi attorno al testo evidenziato?

Per esempio, se evidenzio n = getchar()in if (n = getchar() == '\n'), vorrei mettere parentesi intorno a quello.

Risposte:


18

Hai bisogno di un fantastico plugin surround indispensabile . Quindi, farà felicemente quello che vuoi se selezioni il testo e digiti Sb(parentesi graffe) o S)(nota la S maiuscola!).

In realtà può fare molto circostante: varie virgolette, tag, ecc. Ti permette di posizionare il cursore nella parola tra virgolette doppie e di cambiare le virgolette doppie tra virgolette digitando: cs"'(cambia-surround "in '). Oppure puoi eliminare completamente le virgolette digitando ds"(delete-surround ").

Leggi i documenti tramite link, è davvero fantastico!


1
Non hai spiegato come farlo con la selezione, però. Sono stato condotto qui perché non era immediatamente ovvio.
JackHasaKeyboard,

@JackHasaKeyboard, cosa vuol dire che non ho spiegato come fare con la selezione? La seconda frase nella mia risposta dice:> Quindi, farà felicemente quello che vuoi se selezioni testo e tipo sb(parentesi graffe), oppure s).
Dmitry Frank,

1
Così hai fatto. Tuttavia, non funzionando per me, spremere semplicemente cancella la selezione ed entra in modalità inserimento.
JackHasaKeyboard,

1
Significa che il plug-in "surround" che ho citato nella mia risposta non è installato correttamente.
Dmitry Frank,

Davvero impressionante. Lo sto usando da un po 'e posso scommettere.
biocyberman

20

Oltre al suggerimento di Dmitry sul plugin surround , l'aggiunta di parentesi attorno al testo evidenziato può essere fatta con il seguente comando:

xi()<Esc>P

Puoi impostare una mappa in modalità visiva usando (ad esempio) \saggiungendo quanto segue al tuo ~/.vimrcfile:

xnoremap <leader>s xi()<Esc>P

1
Questa sembra una soluzione piacevole e semplice. Se in futuro non dovessi riscontrare problemi, preferirò questo rispetto a plugin aggiuntivi. Grazie!
Zelphir Kaltstahl,

3
È una buona soluzione, ma non è così completa come usare il plugin surround in quanto non funziona se si selezionano intere linee (usando Vinvece di v). In questo caso, incolla solo le linee sotto le parentesi.
Rohan Orton,

1

Le parentesi graffe si legano semplicemente (per circondare la selezione tra parentesi. A differenza di surround , non segue la solita filosofia di legatura dei tasti. Sono invece necessarie meno chiavi.

Altrimenti, ci sono molti modi per procedere. Se non ti dispiace pasticciare il registro senza nome, usi anche s(^R")<esc>( ^Rcome CTRL-R)


0

Sulla base della risposta dotancohens, ho inserito quanto segue nel mio .vimrc:

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

Puoi facilmente creare mappature simili per [], {}, ecc. Funziona saltando ai marcatori di inizio e fine impostati implicitamente dopo aver terminato la modalità visiva. In questo modo selezionando intere righe verranno aggiunte le parentesi all'inizio / alla fine della prima / ultima riga; non sovrascriverà il tuo registro yank; e lascerà il cursore proprio prima della parentesi aperta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.