Могу ли я сделать подсветку синтаксиса vim для заголовков С++, у которых нет расширений?

У меня есть проект с кучей файлов заголовков С++, которые следуют стандартным правилам именования заголовков С++; то есть класс Foo будет объявлен в файле с именем Foo, а не Foo.h или Foo.hh. Есть ли хороший способ настроить vim для выделения синтаксиса только для этих файлов? Немного менее приятный резерв будет состоять в том, чтобы включить подсветку стиля С++ для всех файлов, у которых нет расширения. Я не уверен, есть ли более сложный способ определить тип файла вместо того, чтобы полагаться только на его расширение.

Ответы

Ответ 1

Для этого вы можете использовать функцию modeline. Modelines позволяет вам устанавливать определенные параметры из комментария в первой/последней строке строки вашего файла.

Это отличное место для установки параметров для правил кодирования, складывания. Некоторые параметры не могут быть установлены по соображениям безопасности. Подробнее см. документацию.

Поместите это вверху или внизу файла:

/* vim: setlocal ft=cpp: */

EDIT: более подробная информация, вызванная комментариями:):

Он будет работать, только если modeline включен. В обычных обстоятельствах это должно быть по умолчанию. Чтобы убедиться, что он включен или изменить размер области, в которой он обнаружен, установите параметр modeline в .vimrc:

set modeline=5

убедитесь, что строка, подобная приведенной выше, будет обнаружена в первых пяти или последних пяти строках каждого файла.

Внутри моделирования setlocal означает установку параметров буфера, в который загружен файл. Параметр ft, также известный как filetype, определяет язык подсветки синтаксиса. Значение cpp - это тот, который используется файлами С++.

РЕДАКТИРОВАТЬ 2: Без моделирования, с немного большей работой, если вы можете определить магический шаблон:

au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif

Значение: каждый раз, когда вы открываете файл, проверьте, есть ли там "MagicPattern". Если это так, рассматривайте его как С++. Аргумент шаблона находится в vim-диалекте регулярных выражений; проверьте help pattern для деталей.

Ответ 2

С настройками vim по умолчанию добавьте это в начало файла, чтобы vim забирал тип файла:

/* vim: set filetype=cpp: */

Если вы находитесь на другом языке, настройте соответствующим образом, например:

# vim: set filetype=python:

modeline Versus modelines Разъяснение

В ответе fooobar.com/info/373044/...,

set modeline=5

Должно быть:

set modelines=5

См. документы: fooobar.com/info/373044/.... В частности, modeline является флагом логического разрешения, который по умолчанию включен http://vimdoc.sourceforge.net/htmldoc/options.html#%27modeline%27, а modelines принимает целочисленный аргумент (по умолчанию в любом случае 5), который задает количество строк, на которые нужно смотреть, если модельна включена http://vimdoc.sourceforge.net/htmldoc/options.html#%27modelines%27.

Ничего из этого не представляет интереса для OP, но я добавляю его сюда для всех, кто приходит из поиска, чтобы напомнить себе, как сообщить vim о типе файла в верхней части файла.