2016-05-27 5 views
2

Я использую gVim 7.4 для Windows.Изменение границ Word при редактировании файла * .sh

Если у меня есть текст firstWord.secondWord в файле * .txt и в нормальном режиме введите *, он выделит только firstword.

Но если я это сделаю в файле * .sh, он выделит всю строку firstWord.secondWord.

Мне не нравится это поведение. Я хочу, чтобы он всегда работал так, как в файле * .txt.

Я предположил, что это вызвано файлом sh.vim в каталоге ftplugin, но не может найти что-нибудь там, что сделало бы это. Мой файл sh.vim идентичен файлу, найденному по адресу http://dwsharp.users.sourceforge.net/vim/ftplugin/sh.vim

Как сделать так, чтобы файлы * .sh не имели разных границ слов, чем * .txt-файлы?

+0

Вы можете дать: установить iskeyword, чтобы проверить, какие символы включены для границы слова. Вы можете попробовать в файлах оболочки следующую команду ': set iskeyword - =.', Чтобы удалить точку из этого. После выполнения этой команды попробуйте w, b или * и проверьте, работает ли она или нет. Если это сработает, дайте мне знать. – SibiCoder

+1

Кроме того, попробуйте ': verbose set isk?' - он сообщит вам файл, который его последний задал. – 1983

+0

Будет установлен по умолчанию ftplugin по пути, подобному/usr/bin/vim/vim74/plugin. Проверь это. – SibiCoder

ответ

4

Это вызвано опцией 'iskeyword'.

Это значение по умолчанию 'iskeyword' для * .txt буфера:

[email protected],48-57,_,192-255 

И это значение по умолчанию для * .sh буфера:

[email protected],48-57,_,192-255,. 

Вы можете вручную удалить дополнительную точку из значения параметра, если в буфере * .sh выполняется следующее:

setlocal iskeyword-=. 

Для постоянного решения, вы можете добавить следующую строку в ваш vimrc:

au! BufRead *.sh setlocal iskeyword-=. 

Я считаю, что я разыскал источник этой идиосинкразии. В моей системе, у меня есть следующий код в строках 19-28 из /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 

Так выглядит файл синтаксис является виновником, и это обеспечивает несколько альтернатив для подмены его подделки опциона 'iskeyword' ,

Например, чтобы использовать глобальную переменную g:sh_noisk, добавьте в ваш vimrc:

let g:sh_noisk = 1 
+0

Используемый опцией sh.vim ftplugin не устанавливает «iskeyword». Это должно происходить откуда-то еще. – 1983

+1

Ах, хорошее место. На самом деле это не должно быть так, как мне кажется, автор знает. – 1983

+0

Что мне нужно сделать, чтобы установить g: sh_noisk, из которого синтаксис/sh.vim отключается? – PortMan

Смежные вопросы