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