I use Vim editor for programming and here's the problem that I am facing.
I am using multiple tabs to edit C++ and Python files simultaneously and I have added the following in my .vimrc file
filetype plugin indent on
au filetype python set mp=python3\ %
au filetype cpp set mp=g++\ -Werror\ -Wextra\ -Wall\ -ansi\ -pedantic-errors\ -g\ %
i.e all I want is that when I switch to a tab with a Python file and run :make, it should run :!python3 %, and when I switch to a tab with a C++ file and run :make it should run :!g++ -Werror -Wextra -Wall -ansi -pedantic-errors -g %
However it's not working, and everytime I switch the tab and run :make, it tries to execute !g++ -Werror -Wextra -Wall -ansi -pedantic-errors -g % and when I run :set ft? on the 2 files(i.e Python and C++) to check whether the filetypes have been correctly identified or not, I get the correct result i.e python and cpp.
Then why is this autocommand not working? Am I missing something? Thanks for your patience
Try using setlocal instead of 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\ %
If you read :help mp, you'll see that the setting is 'global or local to buffer global-local'. This means that you can use set to apply a makeprg globally, or setlocal to override it for a single buffer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With