2 votes

Les limites des mots changent lorsque je modifie un fichier *.sh

J'utilise gVim 7.4 pour Windows.

Si j'ai le texte firstWord.secondWord dans un fichier *.txt et, en mode normal, entrez * , il ne mettra en évidence que les firstword .

Mais si je fais cela alors que je suis dans un fichier *.sh, l'ensemble du fichier *.sh sera mis en surbrillance. firstWord.secondWord chaîne de caractères.

Je n'aime pas ce comportement. Je veux que cela fonctionne toujours comme dans un fichier *.txt.

J'ai supposé que cela était dû à la sh.vim dans le fichier ftplugin mais je n'y trouve rien qui permette de le faire. Mon sh.vim est identique à celui que l'on trouve à l'adresse http://dwsharp.users.sourceforge.net/vim/ftplugin/sh.vim

Comment faire pour que les fichiers *.sh n'aient pas de limites de mots différentes de celles des fichiers *.txt ?

4voto

bgoldst Points 15113

Ce phénomène est dû à la 'iskeyword' option.

Il s'agit de la valeur par défaut de 'iskeyword' pour un tampon *.txt :

iskeyword=@,48-57,_,192-255

Il s'agit de la valeur par défaut pour un tampon *.sh :

iskeyword=@,48-57,_,192-255,.

Vous pouvez supprimer manuellement le point supplémentaire de la valeur de l'option dans un tampon *.sh en exécutant la commande suivante :

setlocal iskeyword-=.

Pour une solution permanente, vous pouvez ajouter ce qui suit à votre vimrc :

au! BufRead *.sh setlocal iskeyword-=.

Je crois avoir trouvé la source de cette particularité. Sur mon système, j'ai le code suivant dans les lignes 19-28 de /usr/share/vim/vim74/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
"  g:sh_isk set to a string     : specify iskeyword.
"  g:sh_noisk exists            : don't change iskeyword
"  g:sh_noisk does not exist    : (default) append "." to iskeyword
if exists("g:sh_isk") && type(g:sh_isk) == 1  " user specifying iskeyword
    exe "setl isk=".g:sh_isk
elseif !exists("g:sh_noisk")                  " optionally prevent appending '.' to iskeyword
    setl isk+=.
endif

Il semble donc que le fichier de syntaxe soit le coupable, et il fournit quelques alternatives pour passer outre son altération de l'élément 'iskeyword' option.

Par exemple, pour utiliser le g:sh_noisk ajoutez-la à votre vimrc :

let g:sh_noisk = 1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X