autocmd 检查vim 中的文件名?

发布于 2024-11-07 12:34:06 字数 326 浏览 0 评论 0原文

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

我一直在尝试:

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

但是这些都不起作用?

我应该怎么办?

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

流云如水 2024-11-14 12:34:06

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

这可能应该适合您想做的事情:

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

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
只是我以为 2024-11-14 12:34:06
autocmd BufRead,BufNewFile preamble Explore
autocmd BufRead,BufNewFile preamble Explore
坏尐絯℡ 2024-11-14 12:34:06

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

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

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

    autocmd BufRead,BufNewFile * if Expand('%') =~ "前导码" |探索 |结束

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

硪扪都還晓 2024-11-14 12:34:06

其他信息 在 autocmd 中使用 '@%'

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

expand('<afile>')

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>')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文