I have a file called
.aliases for bash and zsh, I put this line
# vim: set filetype=bash:
but if I make
: echo &ft
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.Sign up to join this community
That should work. I tried that line myself and it worked. I could be that your 'modeline' option got set to 'nomodeline'. Try executing this and see what you get.
:verbose set modeline?
That will tell you the value of the 'modeline' option and if not the default, where it was last set.
Some Linux distributions set 'nomodeline' in /etc/vimrc or /usr/share/vim/vimrc as a security measure, even though the security problems with 'modeline' have long been fixed.
I describe a full debug checklist in this other answer.
I was REALLY stumped on this one because the documentation is not entirely true.
It turns out that in version 8 (and maybe earlier) you cannot use the word
set in your modeline. The documentation describes "the second form" as being
/* vim: set ai tw=75: */ but this does not work. You have to use "the first form"
// vim: ai tw=75
Note: You can use either of those kinds of comment indicators. Or none at all.
Since this seems to come up in searches:
I had the same problem:
# vim: set filetype=sh:
didn't work, resulting in ft=conf as well. without the modeline in my ~/.bash_alias, ft is empty, so something changes.
# vim: filetype=sh:
worked. the last ":" presence seems to be irrelevant.
I'm on OSX with a Vim8 brewed version, for the records.
it's weird because from the modeline help both
seem to be supported.
The output of
verbose set ft?
with "vim:filetype=sh" is
filetype=sh Last set from modeline
with "vim:set filetype=sh"
filetype=conf Last set from /usr/local/Cellar/vim/8.0.1350/share/vim/vim80/filetype.vim
There might be a side effect somewhere in my conf, but the non compatible modeline syntax is the only one that works as expected for me.
vim-common on Debian-based distros disables
modeline by default.
" modelines have historically been a source of security/resource " vulnerabilities -- disable by default, even when 'nocompatible' is set set nomodeline
You have to enable
modeline explicitly in your
To make sure it works, set both options in your
.vimrc file (and towards to bottom in case you have a more complicated
set modeline set modelines=10
The 2nd option will control how many lines to check when searching for potential modeline lines. In case you need to use more than 10 such modeline lines, increase the value (
10 in the example above)
And read also the NOTE in the documentation:
NOTE: 'modeline' is set to the Vi default value when 'compatible' is set and to the Vim default value when 'compatible' is reset.
Now depending how complicated
.vimrc files one might have, changing the value of the
compatible option (either directly or indirectly by certain plugins, could also influence the modeline behaviour.
But your file should listen now to such comment lines (here an example from my
# vim: tabstop=2 shiftwidth=2 expandtab
Most probably that's due to modeline being disabled.
I work around that by:
In this case, the default whitelisted commands include