4

说明:

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

但是,我刚开始使用markdown,它给出了如何编写文本文件的清晰格式,可以轻松地将这些文件转换为不同的类型,例如html。

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

autocmd BufWrite * :call DeleteTrailingWS()

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

我的问题:

如何修改它,以便它仅在文件类型不是 markdown 时运行/设置此 autocmd?(.md) 请以这样的方式解释,以便我可以调用通用函数,而不仅仅是上面的那个。此外,您如何使用多种文件类型执行此操作。例如,仅当文件不是 .md、.abcd 或 .efgh 类型时才运行/设置此命令?

谢谢你们。

4

4 回答 4

6

Simply check in the autocommand for the filetype:

autocmd BufWrite * if &ft!~?'markdown'|:call DeleteTrailingWS()|endif
于 2014-12-06T18:27:10.333 回答
2

当您想要排除某些文件类型时,克里斯蒂安的回答效果很好。对于另一种情况,仅为某些文件类型定义自动命令,通常的方法是通过定义缓冲区本地自动命令

:autocmd BufWrite <buffer> call ...

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

于 2014-12-06T20:03:07.927 回答
2

如需强大的解决方案,请查看我的DeleteTrailingWhitespace 插件。与ShowTrailingWhitespace 插件一起,它已经检测到诸如 Markdown 之类的文件类型(以可定制的方式),然后添加一个异常(比简单地关闭它更细粒度;即允许两个或多个空格,但仍然突出显示 Markdown 中的尾随制表符)。

于 2014-12-06T20:06:43.907 回答
1

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

autocmd BufWrite *.md :call DeleteTrailingWS()
于 2014-12-06T20:02:09.393 回答