Agregar paréntesis alrededor del texto resaltado en Vim

14

¿Hay una funcionalidad en Vim que permita agregar paréntesis alrededor del texto resaltado?

Por ejemplo, si Resalto n = getchar()en if (n = getchar() == '\n'), me gustaría poner paréntesis alrededor de eso.

mrQWERTY
fuente

Respuestas:

18

Necesita un envolvente de complemento impresionante y imprescindible . Luego, felizmente hará lo que quiera si selecciona texto y escribe Sb(llaves de sonido envolvente) o S)(¡tenga en cuenta la S mayúscula!).

En realidad, puede rodear mucho: varias comillas, etiquetas, etc. Le permite colocar el cursor en la palabra entre comillas dobles y cambiar las comillas dobles a comillas simples escribiendo: cs"'(cambiar-rodear "a '). O puede eliminar completamente las comillas escribiendo ds"(delete-surround ").

Lea los documentos por enlace, ¡es realmente increíble!

Dmitry Frank
fuente
1
Sin embargo, no explicaste cómo hacerlo con la selección. Me llevaron aquí porque no era obvio de inmediato.
JackHasaKeyboard
@JackHasaKeyboard, ¿qué quieres decir con que no te expliqué cómo hacerlo con la selección? El segundo sentense en mi respuesta dice:> A continuación, se estará feliz de hacer lo que quiera si selecciona texto y tipo sb(surround-llaves), o s).
Dmitry Frank
1
Entonces lo hiciste. Sin embargo, no funciona para mí, presionar ssolo elimina la selección y entra en modo de inserción.
JackHasaKeyboard
1
Significa que el complemento "envolvente" que mencioné en mi respuesta no está instalado correctamente.
Dmitry Frank
Impresionante de hecho. Lo he estado usando por un tiempo y puedo apostar.
biocyberman
20

Además de la sugerencia de Dmitry del complemento surround , se puede agregar paréntesis alrededor del texto resaltado con el siguiente comando:

xi()<Esc>P

Puede configurar un mapa en modo visual usando (por ejemplo) \sagregando lo siguiente a su ~/.vimrcarchivo:

xnoremap <leader>s xi()<Esc>P
dotancohen
fuente
1
Esto parece una solución agradable y simple. Si no encuentro ningún problema con esto en el futuro, preferiré esto sobre complementos adicionales. ¡Gracias!
Zelphir Kaltstahl el
3
Es una buena solución, pero no tan completa como usar el complemento surround, ya que no funciona si está seleccionando líneas enteras (usando en Vlugar de v). En este caso, solo pega las líneas debajo de sus padres.
Rohan Orton
1

Los corchetes simplemente se unen (para rodear la selección con los corchetes. A diferencia del sonido envolvente , no sigue la filosofía vim de combinación de teclas habitual como lo hace. En cambio, se requieren menos claves.

De lo contrario, hay muchas formas de proceder. Si no le importa desordenar el registro sin nombre, también use s(^R")<esc>(me ^Rgusta CTRL-R)

Luc Hermitte
fuente
0

Sobre la base de la respuesta dotancohens, puse lo siguiente en mi .vimrc:

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

Puede hacer fácilmente mapeos similares para [], {}, etc. Funciona saltando a los marcadores de inicio y fin establecidos implícitamente después de finalizar el modo visual. De esta forma, al seleccionar líneas completas, se agregarán los elementos parentales al inicio / final de la primera / última línea; no sobrescribirá su registro de extracción; y dejará el cursor justo antes del par abierto.

Vir
fuente