I want to write some autocmd's that check if the filename is this or that..
I've been trying:
autocmd VimEnter * if % is "preamble" | Explore | endif
autocmd VimEnter * if %=="preamble" | Explore | endif
autocmd VimEnter * if &filename == "preamble" | Explore | endif
but none of this works?
WHat should I do?
(this example is over-simplified, note that I'd also like to have an else statement).
You should get the current file name as @%
. For e.g., echo @%
will give you the filename, whereas echo %
will not. However, for actions on the file, use %
, e.g. source %
.
This should probably work for what you want to do:
autocmd VimEnter * if @% == 'preamble' | echo 'hello' | else | echo 'world' | endif
Some autocmd
events do not support the @%
named register to read the current file name. In these cases it is better to use <afile>:
expand('<afile>')
autocmd BufRead,BufNewFile preamble Explore
There are two problems with the examples in the original post:
Neither the %
nor &filename
will return the filename as you've used them.
Look at the help for the expand()
function to see how to get the filename: :h expand()
You're ignoring the slot in autocmd where a file-matching-pattern would ordinarily be specified. The third slot in the autocmd (*
in your versions) is actually a pattern to match filenames. See :h autocmd-patterns
. It should work okay if you want to ignore the pattern slot, but if so, you've got to fix the problem in paragraph 1 above. E.g.,
autocmd BufRead,BufNewFile * if expand('%') =~ "preamble" | Explore | endif
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