如何在vimrc中设置autocmd以仅运行特定的文件类型?

时间:2014-12-06 18:03:24

标签: vim autocmd

说明:

最近我从git存储库中获取了一个.vimrc文件,到目前为止它已经发现它非常有用。随附的一个有用工具是它在您编写文件时自动删除尾随空格。

但是,我刚刚开始使用markdown,它提供了如何编写文本文件的清晰格式,使得将这些文件转换为不同类型(如html)变得很容易。

问题是降价使用两个尾随空格来表示换行符。我的.vimrc会自动删除这些内容。我找到了这样做的autocmd。它是:

autocmd BufWrite * :call DeleteTrailingWS()

DeleteTrailingWS是实际删除空格的函数。

我的问题:

如何修改此选项,以便在文件类型不降价时仅运行/设置此autocmd? (.MD) 请以这种方式解释,以便我可以调用泛型函数,而不仅仅是上面的函数。另外,如何使用多种文件类型执行此操作。例如,仅当文件不是.md,.abcd或.efgh?

类型时才运行/设置此命令

谢谢大家。

4 个答案:

答案 0 :(得分:5)

只需在自动命令中检查文件类型:

autocmd BufWrite * if &ft!~?'markdown'|:call DeleteTrailingWS()|endif

答案 1 :(得分:2)

当你想要除了一些文件类型之外,克里斯蒂安的答案很有效。对于另一种情况,仅为某些文件类型定义autocmds,通常的方法是通过

定义缓冲区本地autocmds
:autocmd BufWrite <buffer> call ...

可以通过:autocmd Filetype ... autocmd ...中的其他前置~/.vim/ftplugin/...或文件类型插件来完成此操作

答案 2 :(得分:2)

要获得强大的解决方案,请查看我的DeleteTrailingWhitespace plugin。与ShowTrailingWhitespace plugin一起,它已经检测到Markdown等文件类型(以可自定义的方式),然后添加一个异常(比简单地关闭它更精细;即允许两个或更多空格,但仍然突出显示Markdown中的尾随标签)。

答案 3 :(得分:0)

auto命令中的*指定要运行的文件类型,因此您只需将其替换为*.md

autocmd BufWrite *.md :call DeleteTrailingWS()