2009-01-14 621 views
24

En muchas interfaces gráficas de usuario cuando selecciono una sección de texto y después haga clic en la ficha o Shift +Tab botón de la sección seleccionada indentará adentro o hacia afuera.Tabbing selección visual en VIM

En VIM puedo seleccionar una sección visual y después haga clic en la tecla < o > para cambiar la sangría, sin embargo una vez llegué a la < clave en mi selección se borra así me ha pegado la selección de la sección de una y otra golpeando < otra vez. Esto se vuelve realmente molesto cuando intento sangrar algo, algunos se detienen y quieren comentarios visuales.

¿Hay alguna forma de insertar y quitar sangrías en vim mientras se mantiene seleccionado el texto seleccionado actualmente?

¿Hay un truco para re-mapa Tab y Shift +Tab por lo que se comportan de esta manera en el modo visual?

+0

Para reasignar claves, consulte la ayuda: mapa – derobert

Respuesta

31
vmap <Tab> >gv 
vmap <S-Tab> <gv 
+1

Tenga en cuenta que si bien esto funciona bien para gVim, puede que no funcione para consola vim a menos que vim y su terminal acuerden cómo representar la pulsación de tecla Shift-Tab. –

+0

Como referencia, funciona en el terminal desplegable Tilda. –

+0

Puedo confirmar esto, y también el mapa usando vmap también funciona en gnome terminai en Ubuntu. – Arda

41

Puede prefijar un número, es decir. "2>" para sangrar dos tabulaciones. O bien, puede usar ">" para sangrar una vez, luego "." para sangrar de nuevo (esto funciona aunque el bloque ya no esté resaltado). Si vas demasiado lejos, "u" deshace un paso a la vez.

Otro comando útil es "gv" para restaurar el último bloque visual, si necesita aplicar un comando diferente.

+0

¡Este es un gran consejo! –

3

O bien, puede ir al corsé más cercano y escribir =% en modo normal - sangra el bloque cubierto por el corsé y su correspondiente. Pero no estoy seguro de cómo esto es útil en un lenguaje como Python.

0

Desde que he abandonado vi a vim, nunca he usado> ni < nuevamente. Exploto muesca automatizado vim que puede activarse explícitamente =

Funciona muy bien a los movimientos como un = {que es incluso más eficiente que =%

De lo contrario, si uno> no es suficiente, simplemente rehacer con., o deshacer el cambio con u.

5

Otra forma es seleccionar un bloque e insertar un guión al principio de la línea utilizando esta secuencia:

  1. ctrl+V + teclas de flecha para seleccionar el bloque.
  2. I para cambiar al modo de inserción de forma que el texto insertado se inserte al comienzo de la selección en cada línea en el bloque seleccionado.
  3. ctrl+T para aumentar la sangría o ctrl+D para disminuir la sangría. Puede agregar cualquier cantidad de sangrías como esta. Nota: La sangría se verá solo en la primera línea del bloque, pero cuando se salga del modo de inserción, la sangría se replicará en todas las líneas del bloque.
+0

Esto funciona ... Estoy aprendiendo mucho hoy :) –

+0

no funciona para mí – hB0

1

Pruebe >} para 'sangrar el siguiente párrafo de un nivel'.

4

Intente utilizar "." para repetir el comando. Recuerda el rango, y puedes usar "u" para deshacer un nivel si vas demasiado lejos. No se necesita configuración

3

El siguiente mapa de teclas funciona como la solución de Brian, Pero también mantenga la posición del cursor relacionada con la palabra.

" tap indent movement (use mark `m' for cursor position) 
vmap <S-Tab> mm<`m:<C-U>exec "normal ".&shiftwidth."h"<CR>mmgv`m 
vmap <Tab> mm>`m:<C-U>exec "normal ".&shiftwidth."l"<CR>mmgv`m 
0

Con la selección bloque visual

Pasos:
Seleccione el bloque (Ctrl + v)
tipo c (modificar)
tipo necesario espacio
tipo esc

enter image description here

Cuestiones relacionadas