我想编写一些autocmd来检查文件名是否为..
我一直在努力:
autocmd VimEnter * if % is "preamble" | Explore | endif
autocmd VimEnter * if %=="preamble" | Explore | endif
autocmd VimEnter * if &filename == "preamble" | Explore | endif
但这一切都不起作用?
我该怎么办?
(这个例子过于简化,请注意我也想要一个else语句。)
答案 0 :(得分:11)
您应该将当前文件名称设为@%
。例如,echo @%
将为您提供文件名,而echo %
则不会。但是,对于文件上的操作,请使用%
,例如source %
。
这可能适用于您想要做的事情:
autocmd VimEnter * if @% == 'preamble' | echo 'hello' | else | echo 'world' | endif
答案 1 :(得分:7)
autocmd BufRead,BufNewFile preamble Explore
答案 2 :(得分:4)
原帖中的示例有两个问题:
%
和&filename
都不会返回您使用过的文件名。
查看expand()
函数的帮助,了解如何获取文件名::h expand()
您忽略了autocmd中通常指定文件匹配模式的插槽。 autocmd中的第三个插槽(版本中为*
)实际上是一个匹配文件名的模式。见:h autocmd-patterns
。如果你想忽略模式槽,它应该可以正常工作,但如果是这样,你必须解决上面第1段中的问题。如,
autocmd BufRead,BufNewFile * if expand('%') =~ "preamble" | Explore | endif
答案 3 :(得分:1)
一些autocmd
个事件do not support @%
named register来读取当前文件名。在这些情况下,最好使用<afile>:
expand('<afile>')