2

У меня есть файл filename.fs с C-подобным содержанием синтаксиса. Vim открывает его как источник Forth, и я использую :set syntax=cpp чтобы получить правильное выделение. Но позже, когда я пытаюсь перейти между словами, я сталкиваюсь с тем, что почти каждый набор символов является словом, поэтому w почти всегда идет до конца строки или около того. Я понял, что это связано с настройкой iskeyword , и :verbose set iskeyword? дает мне

iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
       Last set from /usr/share/vim/vim74/syntax/forth.vim

Так что, похоже, это также из-за Forth-подобного суффикса. Я пытаюсь сделать set filetype=cpp , но это не приносит мне обычного значения isk как @,48-57,_,192-255 . Похоже, что обычный *.cpp -specific установлен из /usr/share/vim/vim74/debian.vim , поэтому он не зависит от того, является ли файл cpp . Но если я , :e newfile.cpp то isk действительно получить устанавливается значение по умолчанию этого , даже если до этого я редактировал *.fs файл.

Итак, мой вопрос, как я могу (повторно) открыть свой файл *.fs как файл не-Forth, но без нарушения настроек по умолчанию для реальных файлов Forth и без необходимости вручную устанавливать isk в желаемое значение?

1 ответ1

2

Вы должны использовать :setlocal filetype=cpp вместо :set syntax=cpp , но это все равно вам здесь не поможет.


Проблема в том, что 'iskeyword' установлен в $VIMRUNTIME/syntax/forth.vim , но он не использует механизм b:undo_ftplugin для отмены этого при изменении типа файла (на cpp), поэтому измененная опция сохраняется.

Исправить A

Если вам никогда не нужно редактировать файлы *.fs как Forth, вы можете переопределить обнаружение типа файла по умолчанию. По сути, создайте файл ~/.vim/filetype.vim со следующим содержимым:

augroup filetypedetect
    au BufNewFile,BufRead *.fs         setf cpp
augroup END

Смотрите :help filetype-detect (и следующие параграфы) для подробностей. Это самая эффективная настройка.

Исправить B

В качестве альтернативы вы можете исправить пропущение синтаксическим скриптом через файл ~/.vim/ftplugin/forth.vim со следующим содержимым:

let b:undo_ftplugin = 'setlocal iskeyword<'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .