¿Puedo hacer que vim cambie su comportamiento del cursor?

11

He estado usando vim durante algunos años como editor secundario, pero por varias razones, me encuentro usando cada vez más, incluso cuando mi editor principal está disponible. Un problema que siempre me ha molestado vimy que me impide usarlo más es la forma en que maneja la colocación del cursor. El cursor solo puede estar en un carácter, en lugar de entre caracteres, como sería el caso con cualquier editor creado desde 1984.

Solo para un ejemplo de por qué esto es un problema, si quiero eliminar la última palabra en una línea, presiono $para ir al final de la línea y luego dbpara eliminar hacia atrás. Esto deja un carácter para eliminar, porque realmente$ no fue al final de la línea, fue al último carácter de la línea y eliminó solo lo que estaba antes del carácter actual. El problema no es que tenga que escribir un personaje adicional, es el pensamiento adicional que implica hacer lo que debería ser simple, lo que distrae mi atención de lo que realmente estoy tratando de lograr.db

Me parece que la colocación del cursor de la idea más moderna es en todos los sentidos superior, y me gustaría cambiar vimpara usar ese enfoque. Estoy seguro de que algunos vimfanáticos incondicionales no estarán de acuerdo con mi opinión al respecto, pero dado que uno de los argumentos estándar para vimla superioridad es su infinita configurabilidad:

  • ¿Puede entregar en este caso?
  • ¿Se vimpuede hacer para colocar el cursor entre los caracteres?
iconoclasta
fuente
2
Parece que estás buscando el Insertmodo o te falta el punto del normalmodo. Lo haría $dawo $bdwpara eliminar la última palabra en una línea en modo normal. En Insertmodo lo haría A<Ctrl-w>.
jw013
3
Para el registro, como alguien que está asustado por la idea misma de un inframundo "entre personajes", la secuencia de teclas correcta para eliminar la última palabra en la línea actual es$bD
Alan Curry
1
Usar un mouse no es lo ideal, pero las ineficiencias significativas se producen cuando tienes que detenerte y pensar en cómo hacer lo que quieres hacer. Lo real que es precioso no es un segundo aquí y allá, sino un enfoque . Cuando pierdes el foco, pierdes mucho más que unos pocos segundos.
iconoclasta
2
Según los comentarios hasta ahora, parece que la respuesta a la pregunta es "No, este modelo de movimiento del cursor está irrevocablemente incrustado en el diseño de vim y no se puede cambiar". ¿Es eso correcto?
iconoclasta
2
@iconoclast Esa es mi conclusión también. Por lo que puedo decir, es imposible en vi o vim tratar a todos los caracteres de una línea de manera uniforme, siempre hay una excepción para el primer o el último carácter.
Gilles 'SO- deja de ser malvado'

Respuestas:

5

Puedes :set virtualedit+=onemore, lo que te permite ir más allá del último personaje. Desafortunadamente para ti, $todavía va al último personaje; tienes que pasar el cursor para pasarlo. Por otro lado, puede usar g$, que normalmente va al último carácter de la línea de la pantalla en una línea que se ajusta; en onemoremodo también pasa el último carácter de una línea no ajustada (o la última línea de pantalla de una línea ajustada).

:h 'virtualedit' dice que esta opción puede arruinar los scripts, pero no sé qué tan grande es el riesgo en realidad.

Echristopherson
fuente