在vim中autocmd检查文件名?

时间:2011-05-15 16:31:39

标签: vim if-statement autocmd

我想编写一些autocmd来检查文件名是否为..

我一直在努力:

autocmd VimEnter * if % is "preamble" | Explore | endif
autocmd VimEnter * if %=="preamble" | Explore | endif
autocmd VimEnter * if &filename == "preamble" | Explore | endif

但这一切都不起作用?

我该怎么办?

(这个例子过于简化,请注意我也想要一个else语句。)

4 个答案:

答案 0 :(得分:11)

您应该将当前文件名称设为@%。例如,echo @%将为您提供文件名,而echo %则不会。但是,对于文件上的操作,请使用%,例如source %

这可能适用于您想要做的事情:

autocmd VimEnter * if @% == 'preamble' | echo 'hello' | else | echo 'world' | endif

答案 1 :(得分:7)

autocmd BufRead,BufNewFile preamble Explore

答案 2 :(得分:4)

原帖中的示例有两个问题:

  1. %&filename都不会返回您使用过的文件名。
    查看expand()函数的帮助,了解如何获取文件名::h expand()

  2. 您忽略了autocmd中通常指定文件匹配模式的插槽。 autocmd中的第三个插槽(版本中为*)实际上是一个匹配文件名的模式。见:h autocmd-patterns。如果你想忽略模式槽,它应该可以正常工作,但如果是这样,你必须解决上面第1段中的问题。如,

    autocmd BufRead,BufNewFile * if expand('%') =~ "preamble" | Explore | endif

答案 3 :(得分:1)

使用'@%'和autocmd

的附加信息

一些autocmd个事件do not support @% named register来读取当前文件名。在这些情况下,最好使用<afile>

expand('<afile>')