normal-mode – Definir límites de palabras

Pregunta:

Utilizo, por ejemplo, dw para eliminar una palabra basada en los límites de palabras definidos por el cambio de clases de caracteres, de modo que este comando aplicado en abc,def,ghi resultará en ,def,ghi . (Hasta ahora todo va bien, y me funcionó durante décadas). Ahora, desde hace poco, eso ya no funciona con los puntos ( . ); ese comando dw aplicado en abc.def;ghi dará como resultado ;ghi .

¿Alguien puede explicar lo que sucede aquí? tal vez si cambié algún ajuste por accidente. – ¿Cómo se puede arreglar esa mala conducta?

Actualización: siguiendo la pista de Peter en su respuesta obtuve:

  iskeyword=@,48-57,_,192-255,.
        Last set from /usr/share/vim/vim73/syntax/sh.vim

y encontré este contenido en /usr/share/vim/vim73/syntax/sh.vim :

" AFAICT "." should be considered part of the iskeyword.  Using iskeywords in
" syntax is dicey, so the following code permits the user to prevent/override
" its setting.
if exists("g:sh_isk")          " override support
 exe "setlocal isk=".g:sh_isk
elseif !exists("g:sh_noisk")   " prevent modification support
 setlocal isk+=.
endif

Ahora bien, esto parece ser una configuración del sistema. No tengo reservas en contra de cambiar ese archivo, solo que me temo que se volverá a cambiar en las actualizaciones del sistema. Pero como no estoy familiarizado con el lenguaje de secuencia de comandos de vim, me interesaría saber cuál sería la forma correcta de solucionarlo. Personalmente, simplemente eliminaría el . de modo que += convierte en una operación no operativa, pero supongo que la declaración if completa debe arreglarse. (¿Qué es ese "g:sh_noisk" ?)

Respuesta:

Parece que 'iskeyword' ha cambiado recientemente. Puede hacer :verbose set iskeyword? para ver dónde se configuró por última 'iskeyword' .

Su problema específico es con el tipo de archivo sh . Aquí hay un extracto de :hg:sh_isk :

The shell languages appear to let "." be part of words, commands, etc;
consequently it should be in the isk for sh.vim.  As of v116 of syntax/sh.vim,
syntax/sh.vim will append the "." to 'iskeyword' by default; you may control
this behavior with:
    let g:sh_isk  = '..whatever characters you want as part of iskeyword'
    let g:sh_noisk= 1  " otherwise, if this exists, the isk will NOT chg

De acuerdo con esto, deberá agregar lo siguiente a su vimrc :

let g:sh_noisk = 1

Para obtener más ayuda, consulte:

:h 'iskeyword'
:h :set-verbose
:h local-options
:h g:sh_isk
:h ft-sh-syntax

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım