Question

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).

Was it helpful?

Solution

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

OTHER TIPS

autocmd BufRead,BufNewFile preamble Explore

There are two problems with the examples in the original post:

  1. 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()

  2. 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

Additional Info Using '@%' with autocmd

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>')
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top