我正在使用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文件没有不同的字边界?
答案 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