编辑* .sh文件时,字边界会发生变化

时间:2016-05-27 16:59:14

标签: vim

我正在使用gVim 7.4 for Windows。

如果我在* .txt文件中有firstWord.secondWord文字,而在正常模式下输入*,则只会突出显示firstword

但如果我在* .sh文件中这样做,它会突出显示整个firstWord.secondWord字符串。

我不喜欢这种行为。我希望它始终像* .txt文件一样工作。

我认为这是由sh.vim目录中的ftplugin文件引起的,但在那里找不到任何可以做到这一点的内容。我的sh.vim文件与http://dwsharp.users.sourceforge.net/vim/ftplugin/sh.vim

中的文件相同

如何使* .sh文件与* .txt文件没有不同的字边界?

1 个答案:

答案 0 :(得分:4)

这是由'iskeyword'选项引起的。

这是* .txt缓冲区的默认值'iskeyword'

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

这是* .sh缓冲区的默认值:

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

通过运行以下命令,您可以在* .sh缓冲区中手动删除选项值中的额外点:

setlocal iskeyword-=.

对于永久性解决方案,您可以将以下内容添加到vimrc:

au! BufRead *.sh setlocal iskeyword-=.

我相信我已经找到了这种特质的来源。在我的系统上,我在/usr/share/vim/vim74/syntax/sh.vim的第19-28行中有以下代码:

" 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

所以看起来语法文件是罪魁祸首,它提供了一些替代方法来覆盖它对'iskeyword'选项的篡改。

例如,要使用g:sh_noisk全局变量,请将其添加到vimrc:

let g:sh_noisk = 1