如何使vi - Vim从不使用制表符(将空格转换为制表符,不好!),使制表键== 4个空格,并在大括号块之后自动缩进代码,如{ {3}}呢?
另外,如何保存这些设置,以便我再也不必输入它们了?
我已经看到了与此相关的其他问题,但它似乎总是与我想要的有点不同。
答案 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 。这些命令观察tabstop
,shiftwidth
和expandtab
的值,并保持空格和制表符的正确混合(最大制表符数,后跟任意数量的空格)。
第二,如果您使用自动缩进,那么这些手动缩进键也不必使用太多。
如果 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 两次以增加其缩进量。
如果使用正确的缩进管理命令,则所有内容均由三个参数控制:shiftwidth
,tabstop
和expandtab
。
shiftwidth
参数控制您的缩进大小;如果要缩进四个空格,请使用:set shiftwidth=4
或缩写:set sw=4
。
如果仅执行此操作,则缩进将使用空格和制表符的混合来创建,因为默认为noexpandtab
。使用:set expandtab
。这会导致您在缓冲区中键入的制表符扩展为空格,而Vim管理的缩进仅使用空格。
打开expandtab
时,如果通过所有适当的Vim机制管理缩进,则tabstop
的值将变得无关紧要。它控制选项卡(如果碰巧出现在文件中)的显示方式。如果您有set tabstop=8 expandtab
,然后使用 Ctrl-V Tab 将一个硬制标签潜入文件,则它将与下一个基于8列的对齐标签位置,照常。