Автокоманда не работает в Vim, как установить makeprg в зависимости от типа файла? - PullRequest
3 голосов
/ 26 мая 2010

Я использую редактор Vim для программирования, и вот проблема, с которой я сталкиваюсь.

Я использую несколько вкладок для одновременного редактирования файлов C ++ и Python, и я добавил следующее в мой файл .vimrc

filetype plugin indent on
au filetype python set mp=python3\ %
au filetype cpp set mp=g++\ -Werror\ -Wextra\ -Wall\ -ansi\ -pedantic-errors\ -g\ %

то есть все, что мне нужно, это чтобы я переключался на вкладку с файлом Python и запускал :make, он должен запускать :!python3 %, а когда я переключался на вкладку с файлом C ++ и запускал :make, он должен пробег :!g++ -Werror -Wextra -Wall -ansi -pedantic-errors -g %

Однако это не работает, и каждый раз, когда я переключаю вкладку и запускаю :make, он пытается выполнить !g++ -Werror -Wextra -Wall -ansi -pedantic-errors -g % и когда я запускаю :set ft? на 2 файлах (то есть Python и C ++), чтобы проверить, есть ли типы файлов был правильно определен или нет, я получаю правильный результат, то есть python и cpp.

Тогда почему эта автокоманда не работает? Я что-то пропустил? Спасибо за ваше терпение

1 Ответ

7 голосов
/ 26 мая 2010

Попробуйте использовать setlocal вместо set. e.g.:

filetype plugin indent on
au filetype python setlocal mp=python3\ %
au filetype cpp setlocal mp=g++\ -Werror\ -Wextra\ -Wall\ -ansi\ -pedantic-errors\ -g\ %

Если вы прочитаете :help mp, вы увидите, что параметр 'глобальный или локальный для буфера global-local '. Это означает, что вы можете использовать set, чтобы применить makeprg глобально, или setlocal, чтобы переопределить его для одного буфера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...