Vim:如何为没有扩展名的特定文件类型设置自动命令?

4
autocommand BufEnter,TextChanged,InsertLeave *.sh Neomake

我正在尝试在没有扩展名的Shell脚本中实现上述命令的效果。

2个回答

3
你可以在缓冲区的文件类型设置为 Shell 文件类型(例如 shbash)时,为该缓冲区创建 buffer-local autocommands

例如:

autocmd FileType sh,bash autocmd BufEnter,TextChanged,InsertLeave <buffer> Neomake

你还可以使用文件类型插件,将以下内容添加到名为~/.vim/ftplugin/bash.vim的文件中(假设您的shell脚本的'filetype'设置为bash):
autocmd BufEnter,TextChanged,InsertLeave <buffer> Neomake

1
不知道你可以像那样链接自动命令!感谢代码片段。运行得非常好。 - Salman Abedin

1
:help autocommand

显示一组选项,包括autocmd-patterns
:help autocmd-patterns

这里的模式通常用于文件名中:
* 匹配任意字符序列;不寻常:包括路径分隔符
? 匹配任何单个字符
? 匹配“?”
. 匹配“.”
~ 匹配“~”
, 分隔模式
, 匹配“,”
{ } 类似于 |pattern| 中的 ( )
, 在 { } 内部:类似于 |pattern| 中的 |
} 字面量 }
{ 字面量 {
\{n,m} 类似于 |pattern| 中的 {n,m}
\ 特殊含义,类似于 |pattern| 中的 |
[ch] 匹配 'c' 或 'h'
[^ch] 匹配除 'c' 和 'h' 之外的任何字符
...
可以使用 |pattern| 项,但由于上述翻译的原因,它们可能无法按预期工作。

因此,如果我们想匹配不包含 .<some-suffix> 的内容,我们可以尝试以下方法:

autocommand BufEnter,TextChanged,InsertLeave *[^.]\\\{4\} Neomake

这将匹配长度至少为4(也许是5,取决于*是否匹配空字符串)的任何文件名,并且不具有\..{0,3}后缀(例如.txt或类似后缀)。如果您有更长的后缀,您需要增加数字,这反过来会增加它匹配的无后缀文件名的最小长度。这是一个丑陋的hack,但我认为没有更好的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接