tecla - ¿Cómo corrijo errores de ortografía Vim más rápido?
cómo corregir la ortografia y gramatica (6)
Esto funciona bastante bien:
imap ^L <Esc>[s1z=`]a
[s
mueve hasta el último error de ortografía
1z=
elige la primera sugerencia
`]
mover al último punto de inserción
a
texto adjunto
Mi flujo de trabajo Vim habitual es:
En el modo de inserción, deletrea algo mal.
Presione
^X s
para obtener algunas sugerencias.Presiona Esc para aceptar el primero.
Después de esto, estoy en el modo de comando en el centro de la línea, en lugar del modo de inserción donde estaba antes. Podría usar A
, pero eso solo funciona si estaba escribiendo al final de la línea. ¿Hay alguna forma alternativa? De manera óptima, me gustaría un comando que corrija el último error de la primera sugerencia sin mover el cursor.
He creado un complemento solo para este caso de uso https://github.com/arecarn/vim-spell-utils
Proporciona la asignación de modo de inserción CTRL-A que hace exactamente lo que se le pidió y corrige la última falta de ortografía con la primera sugerencia y luego regresa al modo de inserción donde lo dejó la última vez. También tiene en cuenta los cambios en las longitudes de línea debido a correcciones ortográficas, mientras que gi y `] no.
Lo arreglé con la siguiente reasignación en mi .vimrc
.
imap <F2> <Esc>mti<C-X>s<Esc>`tla
Presione F2 en el modo de inserción para corregir el último error y vuelva al modo de inserción donde estaba. Sobrescribe el marcador t
.
No puedo ofrecer una solución "óptima" (aunque sospecho que hay una manera).
Sin embargo, puede usar g i para ingresar al modo de inserción en el lugar en el archivo donde lo dejó por última vez. ( help gi
explica esto más elocuentemente).
Puede usar Ctrl + Y para aceptar un elemento en un menú emergente. Ver :help complete_CTRL-Y
.
Una mejora en la respuesta de PDug: para hacer que la corrección de ortografía se pueda deshacer por separado de las inserciones, use esto:
imap <c-l> <c-g>u<Esc>[s1z=`]a<c-g>u
<cg>u
inserta un deshacer-break
El resto es el mismo.
De esta manera, si no le gusta la corrección elegida, puede deshacerla usando <Esc>u
. Sin las interrupciones de deshacer, esto desharía la inserción completa. Tenga en cuenta que el deshacer-romper al final de la asignación garantiza que el texto agregado después de la corrección se pueda deshacer por separado de la corrección misma.
Además, me pareció conveniente asignar esto a CTRL + F (que es fácil de alcanzar) tanto en modo de inserción como normal:
imap <c-f> <c-g>u<Esc>[s1z=`]a<c-g>u
nmap <c-f> [s1z=<c-o>
De esta manera, puede corregir rápidamente el último error (relativo al cursor).