10

我想写一些自动命令来检查文件名是这个还是那个..

我一直在尝试:

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

但这都不行吗?

我该怎么办?

(这个例子过于简单了,注意我还想要一个 else 语句)。

4

4 回答 4

13

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

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

autocmd VimEnter * if @% == 'preamble' | echo 'hello' | else | echo 'world' | endif
于 2011-05-15T17:29:39.787 回答
7
autocmd BufRead,BufNewFile preamble Explore
于 2011-05-15T16:36:49.923 回答
4

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

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

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

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

于 2011-05-15T17:28:54.893 回答
2

附加信息将“@%”与 autocmd 一起使用

某些autocmd事件不支持@% 命名寄存器读取当前文件名。在这些情况下,最好使用<afile>

expand('<afile>')
于 2016-01-21T11:39:20.553 回答