我使用Vim 7.3,并在我的.vimrc
(以及其他任何内容)中使用它:
filetype plugin indent on
autocmd FileType java :setlocal sw=4 ts=4 sts=2 noet
autocmd BufNewFile,BufReadPost ~/testdir/* setlocal sw=2 ts=2 sts=2 et
我有一个目录~/testdir
,其中只包含子目录p
和包含此目录的文件~/testdir/p/A.java
:
class A {
}
如果我通过说A.java
打开:e ~/testdir/p/A.java
,则:set et?
报告expandtab
当前开启。
另一方面,如果我启动一个新的Vim实例并转到:vim A ~/testdir/**
,那么此搜索将会打开A.java
,但现在:set et?
告诉我expandtab
是关闭
如何将我想要的缩进设置始终应用于~/testdir/
下的文件?
答案 0 :(得分:1)
应该触发事件BufReadPost
。检查是否正在撰写邮件。这是:
autocmd BufNewFile,BufReadPost $HOME/git/repo/* echom "Reading buffer " . expand("<afile>")
使用以下内容查找消息:
:messages
如果有消息,那么您知道您正在为缓冲区设置这些选项。因此,如果在显示缓冲区时选项已更改,则可能是插件将其设置为其他内容。通过显示最后一个用
更改选项的人来检查谁是罪魁祸首:verbose set sw?
如果这不能引导您找到解决方案,请尝试使用BufWinEnter
代替BufReadPost
。这可能会奏效。
答案 1 :(得分:1)
Vim明确建议将~
用于用户家。
:h autocmd-patterns
的帮助说你可以在事件模式中使用环境变量......
... [a] nd
~
可用于主目录(如果已定义$HOME
)::autocmd BufWritePost ~/.vimrc so ~/.vimrc :autocmd BufRead ~archive/* set readonly
定义自动命令时扩展环境变量,而不是何时扩展 自动命令被执行。这与命令不同!
因此,请在自动命令中将$HOME
更改为~
。
即使您的问题无关紧要,也可以按照文档中推荐的做法进行操作。
答案 2 :(得分:0)
autocmd确实有效,但可能不是您预期的方式,因为您没有设置softtabstop
。
autocmd BufNewFile,BufReadPost ~/git/repo/* setlocal sw=2 ts=2 sts=2 et
如果您没有设置softtabstop,它将保留其旧值。如果按Tab键时该值不为0(这似乎是这种情况),您将获得插入文件的softtabstop空格的数量。看起来它不起作用。
如果你改变了它,通常最好将shiftwidth,tabstop和softtabstop设置为相同的值。
使用setlocal将set命令设置为缓冲区本地也是个好主意。
查看:h softtabstop
如果运行这样的命令,当softtabstop设置为其默认值(0)时,您可以看到autocmd“有效”。然后运行:vim
命令
vim -u NONE -N -c'autocmd BufNewFile,BufReadPost $HOME/git/repo/* set sw=2 ts=2 et'