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


我该怎么做 - VIM 从不使用制表符(将空格转换为制表符,不好!),使制表键== 4个空格,并在大括号块之后自动缩进代码 Emacs的 呢?

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

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


1058
2017-10-24 17:41


起源


有关: 如何用空格替换标签? 在Vim SE - kenorb


答案:


正如下面几个答案所指出的,现在首选方法不是使用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


1578
2017-10-24 17:45



如果你有expandtab设置,那么它应该使用空格。你还“设置兼容”吗?这有各种副作用,包括将expandtab重置为默认值“off” - Ken
抱歉,smartindent被cindent取代,cindent本身仅适用于C风格的语法。在使用其他语言时,在vimrc中启用可能会出现问题。只需使用“filetype indent on”。 - graywh
嗯,聪明的是 也 仅适用于C风格的语法,基本上已弃用。 - graywh
肯:你应该更新你的答案,看看 stackoverflow.com/a/23426067/2987828 这是更新的。 - user2987828
如果我启用expandtab,有没有办法在文本中实际输入制表符? - Daniele Segato


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

set expandtab ts=4 sw=4 ai

您可以使用整个文件中的空格替换所有选项卡

:%retab

200
2017-11-27 05:42



仅供参考,如果您不希望用空格替换标签,请删除expandtab行。 - Eno
标签是不是空格? ;-) - Rob Wells
@ Rob-Wells:我将“空白”改为“空格”。你现在高兴了? ;-) - netjeff
你能解释一下第一行的含义吗? - Nic Hartley
expandtab确定选项卡是否扩展为空格。 ts = tabstop =文件中<Tab>所依据的空格数。 sw = shiftwidth =(自动)缩进的每个步骤使用的空格数。 ai = autoindent =开始换行时从当前行复制缩进。 - mcmacerson


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


83
2018-01-04 21:09



恕我直言,比标记正确的答案更好。文件类型缩进取代了cindent和smartindent。 - 0fnt


要在大多数文件中使用4个空格的选项卡,在Makefile中使用真正的8宽Tab键,并在包括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.

42
2018-01-24 02:42



你为什么不需要一个else ?在我看来,在所有情况下,最后一行都会覆盖makefile特有的 - lucidbrot
嗨@lucidbrot,“autocmd FileType make”语句基本上告诉vim在打开Makefile时要使用的一些设置。而它下面的行是设置默认值。换句话说,“tabstop = 8 ...”设置将在以后打开文件时应用,并将覆盖适用于初始化的“tabstop = 4 ...”设置。 - Shervin Emami


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

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

第1步:转到您的主目录

cd ~

第2步:创建文件

vim .vimrc

第3步:添加上述配置

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

第3步:按下保存文件 转移 + Z Z


39
2017-08-04 13:26



不要用 Shift + ZZ 它会创建.swp文件。使用 wq。 - shas
这是Debian 8.5上为我工作的那个。 - tkjef
@shas: “ZZ”相当于“:x”,它与“:wq”相同,只是它只在文件被更改时保存...(Ctrl-Z 是另一个故事...) - Gert van den Berg


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

将以下内容添加到.vimrc中

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

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


26
2017-11-18 19:08





来自 VIM维基

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

9
2017-10-08 01:26





编辑你的〜/ .vimrc

$ vim ~/.vimrc

添加以下行:

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

9
2017-10-24 17:48





自动缩进基于当前语法模式。我知道如果你正在编辑Foo.java,那么输入一个 { 然后打 输入 缩进以下行。

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

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


7