vim tex 文档的制表符缩进

vim tab indentation for tex document

我正在尝试配置我的 vimrc,以便在编辑 tex 文档时制表符为 2 个空格。

在我的 vimrc 文件中,我有

au BufNewFile,BufRead *.py:
    \ set tabstop=4
    \ set softtabstop=4
    \ set shiftwidth=4
    \ set textwidth=79
    \ set expandtab
    \ set autoindent
    \ set fileformat=unix

au BufNewFile,BufRead *.js, *.html, *.css, *.tex:
    \ set tabstop=2
    \ set softtabstop=2
    \ set shiftwidth=2

但是,当我在 vim 中编辑文档时,它会忽略制表位。制表符比 2 个空格长得多。 Vim 不会抛出任何错误。我不明白为什么在编辑 tex 文档时它会忽略 tabstop=2 行。我必须在编辑时 运行 :set tabstop=2。

谁能看看我的配置文件怎么错了?

如果这是相关的,我正在使用 vimtex 插件。

谢谢。

  • 文件 glob 需要用 逗号分隔,中间没有空格; cp。 :help autocmd-patterns.
  • 删除模式后的 : 冒号。
  • 最好使用 :setlocal 而不是 :set,否则缩进设置将继承到从其中一个创建的任何新缓冲区。
  • 您可以将所有 :set 命令的参数合并为一个。
au BufNewFile,BufRead *.js,*.html,*.css,*.tex
    \ setlocal tabstop=2 softtabstop=2 shiftwidth=2

而不是 :autocmd,我更愿意将其放入 ~/.vim/after/ftplugin/{filetype}.vim。 (这要求您有 :filetype plugin on;使用 after 目录允许您覆盖 $VIMRUNTIME/ftplugin/{filetype}.vim 完成的任何默认文件类型设置。)必须为每种文件类型复制 :setlocal 命令,但对我来说,您希望为这些语言设置相同的缩进设置是偶然的,并且这些配置之间没有联系。

或者,您可以直接在 ~/.vimrc 中定义 :autocmd FileType {filetype} ...。有了这个,你至少不会重复内置的 文件类型检测 和它使用的文件 glob 模式:

au FileType javascript,html,css,tex
    \ setlocal tabstop=2 softtabstop=2 shiftwidth=2