Определение типа файла для стандартных заголовков C++ с помощью vim
Стандартные заголовки для C++ обычно устанавливаются в /usr / include/c++ / 4.x (в Linux). Так как большинство заголовков не имеют никакого расширения (.ч, .ГЭС и др.), vim не может распознать формат этих файлов как C++.
Я видел этот другой Вопрос в SO, но решения, размещенные там, не решают мою проблему. Одно из решений здесь включает использование modeline
, но стандартные заголовки C++ не включают дружественную к vim сигнатуру. Вместо этого они включают в первую строку что-то например:
// <algorithm> -*- C++ -*-
Я думаю, что мог бы найти этот шаблон (-*- C++ -*-
), чтобы определить тип файла. Другое решение, опубликованное в ранее упомянутом вопросе SO, фактически идет в этом направлении. Ответ предлагает использовать:
au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif
Поэтому я попытался сделать:
au BufRead * if search('-*- C++ -*-', 'nw') | setlocal ft=cpp | endif
Но это не работает (т. е. тип файла не определяется).
Можно ли определить тип файла, используя этот подход? Существует ли какой-либо плагин или какой-либо другой способ решить эту проблему?
2 ответа:
Ответ Н. м делает трюк, но это лучше:
au BufRead * if search('\M-*- C++ -*-', 'n', 1) | setlocal ft=cpp | endif
Дополнительным аргументом к
search
является стоп-линия , и гарантирует, что это правило будет применяться только к файлам с шаблоном в строке 1.Это важно, потому что без стоп-линии любые файлы, содержащие шаблон, , включая ваш vimrc , будут соответствовать соответствию и потенциально будут выделены с использованием неправильных правил синтаксиса.
Также, используя стоп-линию флаг
w
является ненужный.Посмотрите на
:help search
для получения дополнительной информации.