我从事缩进程度不同的项目。在许多这样的项目中,由于文件的结构通常,大多数行至少缩进了两个级别(例如Java文件中的方法)。一行

public void something () {


将光标移至下一行,自动缩进,例如

public void something () {
    [cursor]


虽然我可以在新行中按几次Tab键以使其对齐,但是有没有更好的方法(可以自动执行)?

#1 楼

可以结合使用autoindent选项和filetype插件来实现。

autoindent选项将在创建新行时复制当前缩进。因此,如果在开始新行时当前缩进级别为4,则光标将移至下一行的相同缩进级别。
set autoindent


还可以使用~/.vimrc插件根据文件类型自动确定下一个缩进级别。

您可以通过以下方式即时启用该功能:

:filetype indent on


或者,在您的filetype文件中,您可以放置​​

filetype plugin indent on


哪个将自动确定基于缩进的在文件类型上。

#2 楼

使用:set cindent(简称:set cin)或:set smartindent(简称:set si)。如果您的行以大括号结尾,并且您按Enter键,则下一行将自动缩进一个级别。 (这比:set autoindent更好,后者只是缩进同一级的下一行。)cindent更适合于C语言,而smartindent更通用,可与其他编程语言一起使用。

压痕的数量和类型由:set shiftwidth=…:set tabstop=…:set expandtab控制。

评论


不建议使用“ smartindent”,因此这不是最佳选择。对于类似C的语言,它已被'cindent'和'cinoptions'取代。通常,文件类型缩进是解决之道,而“自动缩进”作为后备。

–詹姆斯
2015年2月4日在5:25

@jamessan smartindent尚未弃用,但cindent值得注意。我已经更新了答案。 (谢谢!)

– 200_success
15年2月4日在7:15

我还建议您看一下editorconfig.org。当然,有一个vim插件(和许多其他编辑器),这是在VCS上保持编辑器默认设置的好方法

–网络Oliveira
15年2月4日在8:50

#3 楼

在文件底部,我使用的是:

# vim: ts=2 sw=2 sts=2 sr noet st ai si


例如Dockerfile

FROM centos-7
RUN ...
CMD ...

# vim: ts=2 sw=2 sts=2 sr noet st ai si


如果您只想保留缩进,请使用# vim: st ai si