Ajustar el otro extremo de una selección visual.

14

Creo que esto permitiría que la función de selección visual de vim supere la eficiencia incluso del mouse al proporcionar la capacidad de "cambiar" el término actual de la selección:

Ilustrado ( |representará el cursor (Vim lo hace funcionar en el lado izquierdo del carácter en el que se encuentra) y [text]representa el texto seleccionado, solo pretende que ocupan ancho cero. El fondo del espacio entre se [ ]ve gris y el carácter inmediatamente siguiendo el |es verde):

Empezar con

Some |text here
Some second line of text
Some more text in the third line 

Prensa v2j; tenga en cuenta que el mcarácter está incluido en la selección (ahora está resaltado por el cursor):

Some [text here
Some second line of text
Some |m]ore text in the third line 

Prensa 10l:

Some [text here
Some second line of text
Some more text |i]n the third line 

Es en este punto que podría decidir que quería comenzar a seleccionar desde una ubicación diferente. por ejemplo, incluyendo el "Some"en la primera línea.

No tengo elección en un editor / IDE típico. Probablemente tendría que mover la mano hacia el mouse, por lo general, es demasiado doloroso seleccionar texto usando métodos tradicionales, el uso de saltos de palabras Ctrly subir / bajar páginas ayuda un poco, pero no importa qué, tengo que comprometerme a uno de mis puntos finales de la selección antes de comenzar la selección .

Entonces, en Vim, me encantaría tener la capacidad de tomar mi estado actual y llevarlo a esto golpeando un enlace misterioso:

Some [|text here
Some second line of text
Some more text i]n the third line 

Luego puedo presionar ^o <Home>(ambos hacen lo mismo en este caso donde no hay espacios en blanco iniciales) para convertirlo en

[|Some text here
Some second line of text
Some more text i]n the third line 

Digo que cambie de opinión una vez más , quiero ajustar el otro extremo!

[Some text here
Some second line of text
Some more text |i]n the third line 

Golpe e:

[Some text here
Some second line of text
Some more text i|n] the third line 

¡Hermosa! Ahora puedo hacer lo que quiera con esta selección.

Entonces, ¿qué es este misterio vinculante?

Además, aún más eficiente sería un conjunto de enlaces alternativos para algunos de los comandos de movimiento más utilizados a otra fila de teclas, y estos (cuando esté en modo visual) siempre moverían el otro extremo de la selección. Entonces, en esa operación de selección del modo visual, si las teclas de movimiento para el otro extremo de la selección estuvieran configuradas en "yuio" (probablemente no sea una buena opción ya que necesitamos yalgo, pero tengan paciencia conmigo) podríamos haber escrito

v2j10l5ye

más bien que

v2j10lX^Xe

Oye, sabes qué, eso ni siquiera es una gran mejora. Solo dame esa característica X. :)

Las respuestas perfectas que estoy buscando:

  • Hey mira hacia arriba :help some_awesome_vim_feature_that_just_does_this
  • Hey mira https://github.com/awesome_user/vim_plugin_that_does_this
  • Hey mira :help vimscript_functions_that_allow_mutation_of_visual_selections

Soy bastante nuevo en esta fascinación con Vim, así que soy muy verde cuando se trata de Vimscript, y sinceramente, me gustaría evitar tratar de aprender otro idioma, así que espero no me obligue a construir esto como un complemento

Steven Lu
fuente
Bueno. Ahora no sé qué está pasando aquí (la pregunta se movió misteriosamente de ninja de SO a SU), pero originalmente publiqué esto en SO y realmente preferiría que permaneciera allí. Con el debido respeto a los no programadores, solo los programadores podrían preocuparse tanto por la edición de texto. Por supuesto, todos los usuarios de vim podrían beneficiarse al aprender cómo podría funcionar esto, solo creo que obtendría más globos oculares y una mejor oportunidad de obtener respuestas allí donde están los desarrolladores de complementos.
Steven Lu
¿A veces lees el :help? :help visual-modetiene toda la información que pueda necesitar sobre el modo visual, incluido o.
romainl
A veces lo leo, pero probablemente me haya tomado casi el mismo tiempo escribir mis pensamientos. Es una tarea más definida que adivinar cuál es la cadena de ayuda.
Steven Lu
Aprender es mejor que adivinar. La respuesta de Heptite te enseñó dos cosas, ¿puedes nombrarlas?
romainl
Sí, quiero decir que hay muchas cosas que aprender, pero ya he olvidado lo que hace el Ocapital O, pero lo recordaré o. La segunda cosa a la que te refieres es probablemente usar :helpmás. Y lo he estado usando más que cuando comencé.
Steven Lu

Respuestas:

49

No estoy seguro de entender realmente lo que quieres, pero tal vez sea esto:

:help v_o

Básicamente, mientras el texto se resalta visualmente, puede presionar oy saltará al otro "final" de la región visual sin modificarlo.

Heptita
fuente
2
Santa mierda, sí! Eso es incluso mejor de lo que esperaba, ya está vinculado a una sola tecla , así que lo Xanterior es en realidado
Steven Lu
1
Permítanme también señalar que el clic derecho del mouse (si tiene su terminal configurado para pasarlo a Vim) le permitirá ajustar de manera inteligente el extremo más cercano de la selección visual actual a la ubicación del cursor. Esto lo convierte en un método mucho menos inductor de dolor para ajustar el área de selección porque no descarta la ubicación del extremo opuesto de la selección.
Steven Lu
@StevenLu: De todos modos, no se tira. Puede tocar de onuevo y regresar.
Heptita
@StevenLu Esta probablemente debería ser la respuesta aceptada, dado que no solo resolvió su problema, tiene un montón de votos a favor, también sucedió exactamente lo que necesitaba en el primer resultado de Google, y en realidad es la única respuesta presentada por cualquier persona ...
Kingdon
Sí, creo que nunca lo acepté porque se publicó tan rápido que todavía no se me permitía hacerlo en ese momento, y he estado felizmente usando esta función de Vim durante casi cinco años desde entonces, sin necesidad de recordarme qué La clave es, ya que es muy fácil de recordar.
Steven Lu