Як зробити так, щоб vim по-справжньому відкрив файл як файл cpp?


2

У мене є файл filename.fsіз вмістом синтаксису, подібного С. 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

Тож це, мабуть, також через суфікс, що нагадує Форт. Я намагаюся робити 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потрібне значення?

Відповіді:


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(Та наступні параграфи). Це найефективніша установка.

Виправити В

Крім того, ви можете виправити упущення синтаксичним сценарієм через файл ~/.vim/ftplugin/forth.vimіз цим вмістом:

let b:undo_ftplugin = 'setlocal iskeyword<'

setlocal isk<працює після того, як я це зробити set filetype=cpp, але написання вашої повної команди ~/.vim/ftplugin/forth.vimне здається автоматично викликати це. Я неправильно розумію, що це насправді має робити?
Руслан

Чи є :filetype plugin onу вас .vimrc? Без цього вам доведеться писати autocmd FileType forth let b:undo_ftplugin ...у своєму .vimrc.
Інго Каркат

Ні, я цього не роблю, і коли я спробував це додати, це, здається, нічого не змінило ...
Руслан,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.