首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >覆盖生成文件的vim autocmd

覆盖生成文件的vim autocmd
EN

Stack Overflow用户
提问于 2016-10-22 02:00:40
回答 3查看 759关注 0票数 2

我正在选修的一个类要求代码提交时使用两个空格,而不是制表符。我在.vimrc中有一个autocmd,它只在用于该类作业的目录中使用两个空格长度的制表符。

代码语言:javascript
运行
复制
autocmd BufNewFile,BufRead ~/path/to/dir/* set tabstop=2 shiftwidth=2 expandtab

但是,我不希望目录中的Makefiles使用expandtab选项,因为make需要制表符。

为此,我在.vimrc中创建了另一个autocmd

代码语言:javascript
运行
复制
autocmd FileType make setlocal noexpandtab

然而,虽然第一个autocmd运行得很好,但第二个不会覆盖第一个,expandtab将继续设置,即使是在Makefiles或make类型的文件上也是如此。无论配置中的顺序如何,都会发生这种情况。

我发现的一个有点古怪的解决方案是使用

代码语言:javascript
运行
复制
autocmd FileType make autocmd!

这将禁用该文件的所有其他autocmd。但是,这将禁用Makefile的所有其他autocmd,这是不可取的。

有没有其他方法可以让第二个命令优先于第一个命令,或者以某种方式禁用Makefiles上的expandtab选项?

EN

回答 3

Stack Overflow用户

发布于 2016-10-22 02:40:03

白名单通常比黑名单容易得多:

代码语言:javascript
运行
复制
augroup class
    autocmd!
    autocmd BufNewFile,BufRead ~/path/to/dir/*.{foo,bar,baz} set tabstop=2 shiftwidth=2 expandtab
augroup END
票数 0
EN

Stack Overflow用户

发布于 2016-10-24 20:36:02

如果您将配置放在~/.vim/filetype.vim中而不是~/.vimrc中,它可能已经起作用了,因为这样您的用户定制就会在内置的ftplugin/Makefile之前运行(这会将缩进设置重置为合理的值):

代码语言:javascript
运行
复制
augroup filetypedetect
autocmd BufNewFile,BufRead ~/path/to/dir/* set tabstop=2 shiftwidth=2 expandtab
augroup END

如果这不起作用,我将向:autocmd添加一个条件,而不是定义一个中和的第二个:autocmd

代码语言:javascript
运行
复制
autocmd BufNewFile,BufRead ~/path/to/dir/* if &filetype !=# 'make' | set tabstop=2 shiftwidth=2 expandtab | endif
票数 0
EN

Stack Overflow用户

发布于 2020-10-07 01:13:03

FileType上使用一个autocmd,在BufNewFile,BufRead事件上使用另一个autocmd的问题是事件类型是determines the order in which autocmds are executed,尽管这个顺序没有很好地定义。

我选择对两个autocmd使用相同的事件类型。这样,指定它们的顺序就是它们运行的顺序(作为vim文档状态,但没有提到事件类型警告):

代码语言:javascript
运行
复制
set noexpandtab

au BufRead,BufNewFile,BufEnter /some/path/* set expandtab

" Not using FileType since that seems to run before BufRead,BufNewFile,BufEnter
au BufRead,BufNewFile,BufEnter *.go set noexpandtab

makefiles的文件类型检测可能是在某个具有事件类型(如BufRead,BufNewFile,BufEnter )的autocmd中定义的,因此您可以将这些规则复制到.vimrc中,并将相同的事件类型用于其他规则(可能不是最干净的解决方案)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40182824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档