vim 如何尊重原作者的缩进?

How to respect indentation of original authors in vim?

关于在 vim 中为特定文件定义 自己的 缩进样式,有很多问题和答案。例如,python 的 Ubuntu 的默认值设置在 ftype/python.vim 中,可以用自定义的东西覆盖,在 ~/.vimrc:

中声明
aug python
    au FileType python setlocal ts=3 sts=3 sw=3 noexpandtab
aug end

如果我正在编写自己的代码,这很好,但如果我正在编辑别人的文件,我想使用 他们的 缩进样式。

如何在 ~/.vimrc 中自动应用文件的现有缩进,同时对新文件使用我自己的缩进?

Vim 没有内置自动缩进 detection/adjustment。 vim-sleuth and YAIFA 是两个 "install-and-forget" 插件(还有其他几个),效果很好。

如果你不想要第三方插件或者不想自己写,你可以试试这样:

command! -nargs=1 Spaces execute "setlocal shiftwidth=" . <args> . " softtabstop=" . <args> . " expandtab" | set shiftwidth? softtabstop? expandtab?
command! -nargs=1 Tabs   execute "setlocal shiftwidth=" . <args> . " softtabstop=" . <args> . " noexpandtab" | set shiftwidth? softtabstop? expandtab?

你可以这样使用:

:Space 4    " 4 spaces for indentation
:Tabs 3     " 3 chars-wide tabs for indentation