Me asignan zza 1z=, que es grande la mayor parte del tiempo, pero de vez en cuando la primera sugerencia no es la correcta.
Así que me gustaría seguir repitiendo zz(o .) para recorrer las otras sugerencias.
Un segundo zzen la misma palabra, entonces, funcionaría como u2z=, un tercero zzfuncionaría como u3z=y así sucesivamente.
¿Alguna idea sobre cómo hacer eso?
Editar:
Basado en la increíble respuesta de @nobe4, logré hacer lo que quiero, pero lo dejaré aquí por un tiempo en caso de que alguien tenga alguna mejora o sugerencia:
let s:spell_position = []
let s:spell_count = 0
let s:spell_word = ""
function! LoopSpell()
if s:spell_position != getpos('.') ||
\ (s:spell_count > 0 && s:spell_word !~ expand("<cword>"))
let s:spell_count = 0
let s:spell_position = getpos('.')
endif
if s:spell_count > 0
silent execute "normal! u"
endif
let s:current_word = expand("<cword>")
if len(s:current_word) <= 0
return
endif
let s:spell_suggestions = spellsuggest(expand(s:current_word))
if len(s:spell_suggestions) <= 0
return
endif
if s:spell_count >= len(s:spell_suggestions)
let s:spell_word = s:current_word
let s:spell_count = 0
else
let s:spell_word = s:spell_suggestions[s:spell_count]
let s:spell_count += 1
endif
silent execute "normal! ciw" . s:spell_word
let s:spell_position = getpos('.')
endfunction
nnoremap <c-m> :call LoopSpell()<CR>
(Cambié el mapeo <c-m>por el comentario de @ Vitor. Además, esto me permite mantener presionadas esas teclas y desplazarme por las sugerencias realmente rápido. Estoy pensando en ello como <c-mistake>).

:Correctcomando: serás capaz de navegar a través de las palabras correctas connyN, una ventana dividida se abre con todas las sugerencias de corrección puede simplemente navegar a través de ellos conjyky<CR>voluntad Aplica la corrección.zzcomando arregle cosas específicas rápidamente.zzcentra la ventana alrededor de la línea actual. Es probablemente uno de los atajos que uso con más frecuencia. También debe pagarzbyzt.scrolloffbastante alto, pero eso todavía parece útil, consideraré otra asignación. ¡Gracias!Respuestas:
Esto es lo que se me ocurrió:
Rotar hechizo
Caracteristicas
'[y']se utilizan para realizar un seguimiento del texto en el que se trabaja. Hacer un cambio en otra parte efectivamente "aceptará" el cambio sugerido.zp'<y'>marca para realizar un seguimiento del texto.:SpellRotateSubAllpara reemplazar todo el texto que coincida con el original con la sugerencia actual.Plugin: spellrotate.vim
fuente
Como sugirió @statox, puede usar el complemento que escribí: vimcorrect .
Explicaré básicamente cómo funciona, así que si quieres reutilizar alguna parte, puedes hacerlo.
Para centrarme en la siguiente palabra mal escrita, uso directamente
]sy a[smedida que saltan al siguiente / anterior partido. Definí una función de coincidencia personalizada para resaltar la palabra actual:Que agregan al grupo de coincidencia
errorla palabra actual en la línea / columna actual (para evitar coincidencias múltiples en la misma línea).La
spellbadword()función devuelve una lista de posibles correcciones para la palabra debajo del cursor.Simplemente visualizo esta lista en un búfer, y la asigno
<CR>para reemplazar la palabra mal escrita por la línea actual (es decir, una posible palabra corregida).También mapeo
nyNhacia]sy[s, ya que estoy acostumbrado a presionarlos para buscar.qse asigna para salir del complemento, cerrar la división y eliminar el resaltado.Nota : todavía es muy inestable, pero planeo hacer algún cambio pronto. Si cree que puede / desea mejorar este complemento, no dude en bifurcar / abrir una solicitud de extracción.
fuente
zzcomando, por lo que puedo arreglar las cosas rápidamente sin entrar en un modo especial. Tal vez podamos agregar esovimcorrectsi alguna vez lo descubro. :)Aquí hay una función que debería funcionar:
La idea básica es asignar cada palabra cambiada a un par de línea / columna (para que no funcione solo para un elemento) y verificar si el elemento ya se ha modificado.
Para hacer el reemplazo, es más o menos lo que hace mi complemento:
Al usar esto, si desea volver a la palabra mal escrita, simplemente presione
u.La
LoopConfirmfunción restablece el diccionario, por lo que si cambia el texto, puede llamarlo para evitar colisiones.Avíseme si tiene algún problema / si tiene alguna pregunta.
fuente
z=parte extra , pero probablemente podría encontrar una manera de evitarlo si el resto funciona. Sin embargo, esto se está acercando mucho a lo que quiero. Seguiré intentando arreglarlo. ¡Gracias!z=. Pero con este método debe mantener una referencia de dónde se encuentra. Pero si no necesita mantener todas las referencias al mismo tiempo, puedo simplificar eso :)Aparte de las otras respuestas, en realidad hay una manera construido en el derecho a Vim:
<C-x>s. Esto usará el menú de finalización del modo de inserción de Vim.Al presionar
<C-x>sdesde el modo de inserción, se debe corregir la palabra debajo del cursor hasta la primera sugerencia y mostrar el menú de finalización con más sugerencias (si corresponde). Puede usar la'completeopt'configuración para personalizar algunas configuraciones para el menú de finalización.Es un poco molesto que esto solo funcione desde el modo de inserción y usarlo
<C-x><C-s>puede ser problemático (consulte la nota a continuación), por lo que puede definir su propia asignación para esto:<C-@>es Control + Espacio.Ver también
:help ins-completion:help i_CTRL-X_sPersonalmente uso una versión más avanzada que "adivinará" si queremos revisar la ortografía del trabajo o usar el autocompletado regular para el código:
Creo que también hay algunos complementos que hacen cosas más o menos similares (como SuperTab, que es bastante popular), pero nunca pude hacer que se comporten como quiero.
Advertencia : si está utilizando Vim desde un terminal,
<C-s>significará "detener salida". Es por eso que ambos<C-x><C-s>y<C-x>sestán asignados por defecto. Use<C-q>para continuar la salida si presiona<C-s>por accidente. También puede deshabilitarlo<C-s>si no lo usa (vea esta pregunta ). Si está utilizando GVim, puede ignorar esto.fuente