Adicionando parênteses ao redor do texto destacado no Vim


14

Existe uma funcionalidade no Vim que permite adicionar parênteses ao redor do texto destacado?

Por exemplo, se eu destacar n = getchar()em if (n = getchar() == '\n'), eu gostaria de colocar parênteses em torno disso.

Respostas:


18

Você precisa de uma incrível e must-HAVE plugin de som surround . Em seguida, ele fará o que quiser, se você selecionar texto e tipo Sb(chaves), ou S)(observe S maiúsculo).

Na verdade, ele pode envolver muitas coisas: várias aspas, tags, etc. Ele permite que você coloque o cursor na palavra entre aspas duplas e altere aspas duplas para aspas simples digitando: cs"'(change-surround "to '). Ou você pode excluir completamente as aspas digitando ds"(delete-surround ").

Leia os documentos por link, é realmente incrível!


1
Você não explicou como fazê-lo com a seleção. Fui levado para cá porque não era imediatamente óbvio.
JackHasaKeyboard

@JackHasaKeyboard, o que você quer dizer com eu não expliquei como fazer isso com a seleção? O segundo sentido na minha resposta diz:> Então, ele fará o que quiser com prazer, se você selecionar texto e digitar sb(chaves), ou s).
Dmitry Frank

1
Então você fez. Porém, não funcionando para mim, pressionar sapenas exclui a seleção e entra no modo de inserção.
JackHasaKeyboard

1
Isso significa que o plug-in "surround" mencionado na minha resposta não está instalado corretamente.
Dmitry Frank

Impressionante mesmo. Estou usando há um tempo e posso apostar.
biocyberman

20

Além da sugestão de Dmitry do plugin surround , adicionar parênteses ao redor do texto destacado pode ser feito com o seguinte comando:

xi()<Esc>P

Você pode definir um mapa no modo visual usando (por exemplo) \sadicionando o seguinte ao seu ~/.vimrcarquivo:

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

1
Parece uma solução simples e agradável. Se não encontrar nenhum problema com isso no futuro, prefiro isso a plug-ins adicionais. Obrigado!
Zelphir Kaltstahl,

3
É uma boa solução, mas não tão completa quanto usar o plug-in surround, pois não funciona se você estiver selecionando linhas inteiras (usando em Vvez de v). Nesse caso, apenas cola as linhas abaixo de seus parênteses.
Rohan Orton

1

Os colchetes lh simplesmente se vinculam (para cercar a seleção com os colchetes. Ao contrário do surround, ele não segue a filosofia usual de vinculação de teclas do vim, como segue. Em vez disso, são necessárias menos chaves.

Caso contrário, existem várias maneiras de prosseguir. Se você não se importa de mexer no registro sem nome, também usa s(^R")<esc>( ^Rcomo CTRL-R)


0

Com base na resposta de dotancohens, coloquei o seguinte no meu .vimrc:

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

Você pode facilmente fazer mapeamentos semelhantes para [], {}, etc. Ele funciona saltando para os marcadores de início e fim definidos implicitamente após o término do modo visual. Dessa forma, a seleção de linhas inteiras adicionará os parênteses no início / fim da primeira / última linha; não sobrescreverá seu registro de arranco; e deixará o cursor logo antes do ponto de abertura.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.