Me asignan zz
a 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 zz
en la misma palabra, entonces, funcionaría como u2z=
, un tercero zz
funcionarí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>
).
:Correct
comando: serás capaz de navegar a través de las palabras correctas conn
yN
, una ventana dividida se abre con todas las sugerencias de corrección puede simplemente navegar a través de ellos conj
yk
y<CR>
voluntad Aplica la corrección.zz
comando arregle cosas específicas rápidamente.zz
centra la ventana alrededor de la línea actual. Es probablemente uno de los atajos que uso con más frecuencia. También debe pagarzb
yzt
.scrolloff
bastante 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.:SpellRotateSubAll
para 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
]s
y a[s
medida que saltan al siguiente / anterior partido. Definí una función de coincidencia personalizada para resaltar la palabra actual:Que agregan al grupo de coincidencia
error
la 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
n
yN
hacia]s
y[s
, ya que estoy acostumbrado a presionarlos para buscar.q
se 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
zz
comando, por lo que puedo arreglar las cosas rápidamente sin entrar en un modo especial. Tal vez podamos agregar esovimcorrect
si 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
LoopConfirm
funció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>s
desde 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_s
Personalmente 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>s
está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