2012-06-24 12 views
53

¿Hay algún movimiento para mover al principio o al final de una selección visual? Sé o mientras que en modo visual se alterna entre los dos, pero necesito poder seleccionar con precisión el inicio. El objetivo general es rodear un área seleccionada visualmente con paréntesis.Cómo saltar al inicio/final de la selección visual?


Basado en el comentario, pude implementar esto usando la siguiente macro. La idea es:

  1. <ESC> para salir del modo visual
  2. `< para ir al final de la selección visual anterior
  3. a) para anexar un cierre de paréntesis
  4. <ESC> para salir del modo de inserción
  5. `< para ir al inicio de la selección visual anterior
  6. i( para insertar una abertura paréntesis
  7. <ESC> para salir del modo de inserción nuevamente.

por ejemplo:

map \q <ESC>`>a)<ESC>`<i(<ESC> 

basado en otro comentario, tenemos una solución aún más concisa,

map \q c()<ESC>P 
+0

Error: el número 2 debe ser' '>' – JJoao

Respuesta

9

La forma más fácil de "rodear un área seleccionada visualmente con paréntesis" es:

c ambiar el área seleccionada visualmente a () y P ut de nuevo en el medio. = c()<ESC>P

Sugiero definir un nuevo comando en modo visual .vimrc (por ejemplo, "\ q") con que:

:vmap \q c()<ESC>P 

Este enfoque también trabaja con áreas rectangulares visuales (<C-V>): TI pone " ("") "alrededor de cada línea de bloque

+1

Cerrar, pero no del todo. Si el último carácter de la selección visual es el último carácter de la línea, el cursor se desplaza sobre el carácter que precede a la selección visual. En consecuencia, el uso de insertar ("i") da como resultado que el texto entre paréntesis se inserte un carácter más a la izquierda de lo previsto. – duckworthd

+0

@duckworthd, mi mal - estás en lo cierto. Por favor mira mi actualización ... – JJoao

70

Hay dos marcas relevantes incorporados en el almacenamiento de las posiciones de el primero y últimos caracteres de la última selección visual en el búfer actual. Para mover el cursor hacia donde apuntan estas marcas, use los comandos `< y `>, respectivamente. (Ver :help `>, :help `<.)

+4

Esta es exactamente la respuesta que estaba buscando. @duckworthd - debería considerar hacer clic en aceptar :-) –

+0

¿Pero cómo mantiene la selección igual? – Adrian

+17

@Adrian: ¿Quieres decir sin salir del modo Visual? Si es así, puede usar el comando 'o'. –

19

si lo que desea para rodear una selección visual se ha ya trabajan ha hecho, es decir, por Tim Pope, que escribió this plugin llamada surround. Rodea palabras o selección visual con delimitadores de su agrado.

seleccione su selección visual, dicen i like vim golpeó S) para obtener (i like vim) o S( para obtener (i like vim), para cambiar este tipo de [i like vim]cs] (modificar circundante) y para eliminar ds] para obtener i like vim al fin.

10

Si no puede utilizar Surrond.vim, aquí es una manera de hacerlo:

  1. Haga su selección visual con v o V.
  2. Salir de él con <Esc>.
  3. Tipo `>a)<Esc> para insertar un paréntesis de cierre después de el último carácter de la selección.
  4. Tipo `<i(<Esc> para insertar un paréntesis de apertura antes de primer carácter de la selección.
34

Mientras está en Visual Selection clic o. Cambiará la posición del cursor al otro extremo de la selección. Luego O para saltar hacia atrás.

Cuestiones relacionadas