Tab键==4个空格并在Vim中花括号后自动缩进

如何使vi-Vim从不使用制表符(将空格转换为制表符,糟糕!),使tab键==4个空格,并像Emacs那样在花括号块后自动缩进代码?

另外,如何保存这些设置,这样我就不必再输入它们了?

我见过其他与此相关的问题,但它似乎总是离我想要的有点远。

1008821 次浏览

正如在其他几个答案中指出的那样,现在首选的方法不是使用智能缩进,而是使用以下(在您的#0中):

filetype plugin indent on" show existing tab with 4 spaces widthset tabstop=4" when indenting with '>', use 4 spaces widthset shiftwidth=4" On pressing tab, insert 4 spacesset expandtab

在您的[. vimrc:][1]文件中:
set smartindentset tabstop=4set shiftwidth=4set expandtab

帮助文件需要一点时间来适应,但你读得越多,Vim就越好:

:help smartindent

更好的是,您可以将这些设置嵌入到源中以实现可移植性:

:help auto-setting

查看您当前的设置:

:set all

正如graywh在评论中指出的那样,智能缩进已经被“更聪明地工作”的cindent取代,尽管仍然主要用于具有类似C语法的语言:

:help C-indenting

自动缩进基于当前的语法模式。我知道如果您正在编辑Foo.java,那么输入{并点击输入会缩进以下行。

至于制表符,有两种设置。在Vim中,键入冒号,然后键入“set tabStop=4”,这将设置制表符显示为四个空格。再次点击冒号,然后键入“设置扩展选项卡”,这将为制表符插入空格。

您可以将这些设置放在主目录中的. vimrc(或Windows上的_vimrc)中,因此只需键入一次。

相关的,如果您打开一个同时使用制表符和空格的文件,假设您有

set expandtab ts=4 sw=4 ai

您可以将整个文件中的所有制表符替换为空格

:%retab

获得特定于文件类型的缩进的最佳方法是在vimrc中使用filetype plugin indent on。然后您可以在. vim/ftplugin/c.vim中指定set sw=4 sts=4 et之类的内容,例如,无需对所有正在编辑的文件进行全局缩进,其他非C类型语法也会正确缩进(口齿不清)

要在大多数文件中使用4空格制表符,在Makefile中使用真正的8宽制表符字符,并在包括C/C++在内的各种文件中自动缩进,请将其放在~/.vimrc文件中:

" Only do this part when compiled with support for autocommands.if has("autocmd")" Use filetype detection and file-based automatic indenting.filetype plugin indent on
" Use actual tab chars in Makefiles.autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtabendif
" For everything else, use a tab width of 4 space chars.set tabstop=4       " The width of a TAB is set to 4." Still it is a \t. It is just that" Vim will interpret it to be having" a width of 4.set shiftwidth=4    " Indents will have a width of 4.set softtabstop=4   " Sets the number of columns for a TAB.set expandtab       " Expand TABs to spaces.

推荐的方法是使用基于文件类型的缩进,如果这还不够,则仅使用智能缩进和cindent。

将以下内容添加到您的. vimrc

set expandtabset shiftwidth=2set softtabstop=2filetype plugin indent on

希望这能成为一个不同的答案。

在许多Linux系统上,例如Ubuntu,默认情况下不存在.vimrc文件,因此建议您先创建它。

不要使用主目录中存在的.viminfo文件。它用于不同的目的。

第1步:转到您的主目录

cd ~

第2步:创建文件

vim .vimrc

第3步:添加上述配置

filetype plugin indent onset tabstop=4set shiftwidth=4set expandtab

步骤3:保存文件,按Shift+ZZ

编辑您的~/. vimrc

$ vim ~/.vimrc

添加以下行:

set tabstop=4set shiftwidth=4set softtabstop=4set expandtab

vim wiki

:set tabstop=4:set shiftwidth=4:set expandtab

首先,不要在Vim中使用Tab键进行手动缩进。Vim在插入模式下有一对命令用于手动增加或减少缩进量。这些命令是Ctrl-TCtrl-D。这些命令观察tabstopshiftwidthexpandtab的值,并保持空格和制表符的正确混合(制表符的最大数量后跟任何必要数量的空格)。

其次,如果您使用自动缩进,这些手动缩进键无论如何都不必使用。

如果Ctrl-T而不是Tab困扰你,你可以重新映射它:

:imap <Tab> ^T

您还可以重新映射切换标签页以执行Ctrl-D deindent:

:imap <S-Tab> ^D

这里^T和^D是文字控制字符,可以作为Ctrl-VCtrl-T插入。

有了这个映射,您仍然可以使用Ctrl-VTab在缓冲区中键入文字制表符。请注意,如果您这样做,即使:set expandtab打开,您也会得到一个未展开的制表符。

使用:set smarttab实现了与<Tab>映射类似的效果,这也导致行前的退格表现得很聪明。

smarttab模式下,当Tab不在行的开头使用时,它没有特殊的含义。这与我上面的TabCtrl-T的映射不同,因为在一行中的任何位置(在插入模式下)使用Ctrl-T都会增加该行的缩进。

其他有用的映射可能是:

:map <Tab> >:map <S-Tab> <

现在我们可以做一些事情,比如选择一些行,然后点击Tab将它们缩进。或者在一行上点击Tab两次(在命令模式下)以增加其缩进。

如果您使用正确的缩进管理命令,那么一切都由三个参数控制:shiftwidthtabstopexpandtab

shiftwidth参数控制缩进大小;如果需要四个空格缩进,请使用:set shiftwidth=4或缩写:set sw=4

如果只执行此操作,则将使用空格和制表符的混合创建缩进,因为noexpandtab是默认值。使用:set expandtab。这会导致您在缓冲区中键入的制表符展开为空格,并且Vim管理的缩进仅使用空格。

expandtab打开时,如果您通过所有正确的Vim机制管理缩进,tabstop的值将变得无关紧要。它控制制表符在文件中发生时的显示方式。如果您有set tabstop=8 expandtab,然后使用Ctrl-VTab将硬制表符潜入文件,它将像往常一样产生与下一个基于8列的制表符位置的对齐。

毕竟,您可以编辑. vimrc,然后添加conf

set tabstop=4

或者执行命令

最简单的将是n vim文件

set tabstop=4