如何解决Vim:对特定文件类型的自动命令名称中没有扩展名?
autocommand BufEnter,TextChanged,InsertLeave *.sh Neomake
我正在尝试对没有扩展名的shell脚本实现上述命令的效果。
解决方法
当缓冲区的文件类型设置为Shell文件类型之一(例如sh
或bash
)时,可以为缓冲区创建buffer-local autocommands。
例如:
autocmd FileType sh,bash autocmd BufEnter,TextChanged,InsertLeave <buffer> Neomake
您还可以使用filetype plug-in,将以下内容添加到名为~/.vim/ftplugin/bash.vim
的文件中(假设您的Shell脚本将'filetype'
设置为bash
):
autocmd BufEnter,InsertLeave <buffer> Neomake
,
:help autocommand
显示许多选项,包括autocmd-patterns
。
:help autocmd-patterns
这样说:
该模式的解释方式与大多数文件名中使用的方式相同:
*匹配任何字符序列;不寻常:包含路径 分隔符
?匹配任何单个字符
?匹配'?'
。匹配'。'
〜匹配'〜'
,分隔图案
,匹配一个','
{}在| pattern |
中像() ,在{}内:喜欢|在| pattern |
中 }文字}
{文字{
\ {n,m}就像| npattern中的{n,m} |
\特殊含义,例如| pattern |
[ch]匹配“ c”或“ h”
[^ ch]匹配除'c'和'h'以外的任何字符
...
可以使用| pattern |项,但它们可能无法按预期运行, 因为上面的翻译。
因此,如果我们想匹配不包含.<some-suffix>
的内容,我们可以使用类似的内容
autocommand BufEnter,InsertLeave *[^.]\\\{4\} Neomake
这将匹配任何长度至少为4(可能为5,取决于*
是否与空字符串匹配)的文件名,并且没有后缀\..{0,3}
(例如,{{1} }等)。如果后缀更长,则必须增加数量,这反过来又会增加与其匹配的无后缀文件名的最小长度。这是一个丑陋的骇客,但我不认为有更好的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。