Answers:
正如以下几个答案中所指出的那样,现在首选的方法是不使用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取代,该cindent“更聪明地工作”,尽管仍然主要用于具有C语法的语言:
:help C-indenting
相关的,如果您打开同时使用制表符和空格的文件(假设您已经
set expandtab ts=4 sw=4 ai
您可以将整个文件中的所有标签替换为空格
:%retab
获得特定于文件类型的缩进的最佳方法是filetype plugin indent on
在vimrc中使用。然后,您可以指定诸如set sw=4 sts=4 et
.vim / ftplugin / c.vim之类的内容,而不必为所有正在编辑的文件设置全局名称,并且其他非C类型语法也将正确缩进(甚至是lisps)。
要在大多数文件中包含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.
else
?在我看来,在所有情况下
在许多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。
Shift + ZZ
它将创建.swp文件。使用wq
。
Ctrl-Z
是另一回事...)
vim -n <file>
。交换文件不是在保存时生成的文件。因为交换文件在恢复突然终止的编辑会话中很有用,所以这几乎无法实现其目的。
自动缩进基于当前语法模式。我知道,如果您正在编辑Foo.java,则输入a {
并Enter在下面一行插入缩进。
对于选项卡,有两个设置。在Vim中,键入一个冒号,然后“设置tabstop = 4”,这会将这些标签设置为显示为四个空格。再次点击冒号并输入“ set expandtab”,这将为制表符插入空格。
您可以将这些设置放在主目录中的.vimrc(或Windows上的_vimrc)中,因此只需键入一次即可。
首先,不要Tab在Vim中使用密钥进行手动缩进。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-VCtrl-T。
有了此映射后,您仍然可以使用键入文字Tab到缓冲区中Ctrl-VTab。请注意,如果执行此操作,即使:set expandtab
打开了,也会得到未扩展的制表符。
<Tab>
使用可以达到与地图相似的效果:set smarttab
,这也会导致线前的退格键表现得很聪明。
在smarttab
模式下,当Tab不在行首使用时,它没有特殊含义。这与我上面的Tabto 映射不同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-VTab,则将照常对齐下一个基于8列的标签位置。
<C-t>
可以使用该语法而不是文字。最后,<Tab>
正常模式下的映射也会映射<C-i>
(它们是相同的字符),所以我不建议这样做(您失去了一些漂亮的vim功能