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

时间:2008-10-24 17:41:47

标签: vim whitespace indentation vi auto-indent

如何使vi - Vim从不使用制表符(将空格转换为制表符,不好!),使制表键== 4个空格,并在大括号块之后自动缩进代码,如{ {3}}呢?

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

我已经看到了与此相关的其他问题,但它似乎总是与我想要的有点不同。

11 个答案:

答案 0 :(得分:1742)

正如下面几个答案所指出的,现在首选方法不是使用smartindent,而是使用以下内容(在.vimrc中):

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

<击> 在.vimrc:文件中:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

帮助文件需要一些时间来习惯,但读的越多,Vim就越好:

:help smartindent

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

:help auto-setting

要查看您当前的设置:

:set all

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

:help C-indenting

<击>

答案 1 :(得分:220)

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

set expandtab ts=4 sw=4 ai

您可以使用

替换整个文件中包含空格的所有选项卡
:%retab

答案 2 :(得分:86)

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

答案 3 :(得分:50)

要在大多数文件中使用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 noexpandtab
endif

" 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.

答案 4 :(得分:49)

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

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

第1步:转到您的主目录

cd ~

第2步:创建文件

vim .vimrc

步骤3:添加上述配置

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

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

答案 5 :(得分:28)

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

将以下内容添加到.vimrc

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

希望它有所帮助作为一个不同的答案。

答案 6 :(得分:11)

编辑你的〜/ .vimrc

$ vim ~/.vimrc

添加以下内容:

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

答案 7 :(得分:9)

来自VIM wiki

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

答案 8 :(得分:7)

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

对于标签,有两种设置。在Vim中,键入冒号然后“设置tabstop = 4”,这将设置选项卡显示为四个空格。再次点击冒号并输入“set expandtab”,它将为制表符插入空格。

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

答案 9 :(得分:1)

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

set tabstop=4

或执行命令

答案 10 :(得分:0)

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

第二,如果您使用自动缩进,那么这些手动缩进键也不必使用太多。

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

:imap <Tab> ^T

您还可以重新映射 Shift-Tab 以执行 Ctrl-D 消隐:

:imap <S-Tab> ^D

此处^ T和^ D是文字控制字符,可以作为 Ctrl-V Ctrl-T 插入。

有了此映射,您仍然可以使用 Ctrl-V Tab 在缓冲区中键入文字Tab。请注意,如果执行此操作,即使打开:set expandtab,也会得到未扩展的制表符。

使用<Tab>可以达到与:set smarttab映射类似的效果,这也导致行首的退格键表现得很聪明。

smarttab模式下,当未在行首使用 Tab 时,它没有特殊含义。这与我上面的 Tab Ctrl-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-V Tab 将一个硬制标签潜入文件,则它将与下一个基于8列的对齐标签位置,照常。