vim не собирает новые файлы синтаксиса

454
spraff

Я скопировал этот синтаксис GLSL файл на /usr/share/vim/vim74/syntax/glsl.vim, его права являются так -rw-r--r--же, как и другие файлов синтаксиса.

Я, gvim /tmp/x.glslно он не активирует подсветку синтаксиса GLSL, как я ожидал.

Я иду в Syntax > Show fileypes in menuи полный спектр признанных языков открывается. Нет ничего под «G» для «GLSL», и нет ничего под «O» для «OpenGL».

Что мне нужно сделать, чтобы Vim обратил внимание на новую glsl.vimспецификацию подсветки синтаксиса?

1

1 ответ на вопрос

0
Ingo Karkat

Источники Syntax > Show filetypes in menuакции $VIMRUNTIME/synmenu.vim. Если вы откроете это, вы увидите, что

 " The following menu items are generated by makemenu.vim. 

Таким образом, кажется, что это статичная вещь, созданная во время сборки Vim. К сожалению, он не принимает добавленные или специфичные для пользователя синтаксисы.

Каталог /usr/share/vim/управляется менеджером пакетов вашего дистрибутива. Если вы поместите туда файлы, они могут потеряться при переустановке или обновлении Vim. Не делай этого. Простое решение состоит в том, чтобы вставить это ~/.vim/syntax/; тогда это относится только к вам. [1]

Vim различает подсветку синтаксиса и типы файлов . Чтобы применить добавленный синтаксис, вам необходимо обнаружить файлы GLSL. :help new-filetypeговорит вам, как это сделать.

Один (модульный) способ сделать это - создать ~/.vim/ftdetect/glsl.vimсо следующим содержимым:

au BufRead,BufNewFile *.glsl set filetype=glsl 

Вы нуждаетесь :filetype onи :syntax onв своих ~/.vimrcтоже, но это очень распространенные настройки, так что, вероятно, они уже есть.


[1] Если у вас действительно многопользовательская система и вам нужно сделать ее доступной для всей системы, включите ее где-нибудь еще 'runtimepath'. В зависимости от вашего дистрибутива, возможно, уже есть предварительно настроенный путь (например, в /etc/vim/vimrcDebian) или возможность получить конфигурацию, специфичную для системы (например /etc/vim/vimrc.local), и вы можете дополнить ее 'runtimepath'.