如何使vi - Vim从不使用制表符(将空格转换为制表符,糟糕!),使制表键 == 4 个空格,并像Emacs一样在大括号块之后自动缩进代码?
另外,如何保存这些设置,这样我就不必再次输入它们了?
我已经看到与此相关的其他问题,但它似乎总是与我想要的有点偏离。
如何使vi - Vim从不使用制表符(将空格转换为制表符,糟糕!),使制表键 == 4 个空格,并像Emacs一样在大括号块之后自动缩进代码?
另外,如何保存这些设置,这样我就不必再次输入它们了?
我已经看到与此相关的其他问题,但它似乎总是与我想要的有点偏离。
正如在其他几个答案中所指出的那样,现在首选的方法不是使用 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
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
相关,如果你打开一个同时使用制表符和空格的文件,假设你有
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 空格制表符,在 Makefiles 中使用真正的 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.
在很多 Linux 系统上,比如 Ubuntu,.vimrc
默认情况下该文件是不存在的,所以建议您先创建它。
不要使用.viminfo
主目录中存在的文件。它用于不同的目的。
第 1 步:转到您的主目录
cd ~
第 2 步:创建文件
vim .vimrc
第三步:添加上述配置
filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab
第 3 步:按Shift+保存文件ZZ。
推荐的方法是使用基于文件类型的缩进,如果这还不够,只使用 smartindent 和 cindent。
将以下内容添加到您的 .vimrc
set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on
希望它有助于作为一个不同的答案。
编辑你的 ~/.vimrc
$ vim ~/.vimrc
添加以下行:
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
来自VIM 维基:
:set tabstop=4
:set shiftwidth=4
:set expandtab
自动缩进基于当前的语法模式。我知道如果您正在编辑 Foo.java,然后输入 a{
并点击Enter缩进以下行。
至于选项卡,有两种设置。在 Vim 中,键入一个冒号,然后“set tabstop=4”,这会将制表符设置为显示为四个空格。再次点击冒号并输入“set expandtab”,这将为制表符插入空格。
您可以将这些设置放在主目录中的 .vimrc(或 Windows 上的 _vimrc)中,因此您只需键入一次。
毕竟,您可以编辑.vimrc,然后添加conf
set tabstop=4
或者执行命令
首先,不要使用TabVim 中的键进行手动缩进。Vim 有一对插入模式的命令,用于手动增加或减少缩进量。这些命令是Ctrl-T和Ctrl-D。这些命令观察 、 和 的值tabstop
,shiftwidth
并expandtab
保持空格和制表符的正确混合(制表符的最大数量后跟任何必要数量的空格)。
其次,如果您使用自动缩进,这些手动缩进键无论如何都不必使用太多。
如果Ctrl-T不是Tab打扰您,您可以重新映射它:
:imap <Tab> ^T
您还可以重新映射Shift-Tab以进行Ctrl-Ddeindent:
:imap <S-Tab> ^D
这里 ^T 和 ^D 是文字控制字符,可以插入为Ctrl-VCtrl-T.
有了这个映射,您仍然可以使用Ctrl-VTab. 请注意,如果您这样做,即使:set expandtab
打开,您也会得到一个未展开的制表符。
<Tab>
使用 可以实现与地图类似的效果:set smarttab
,这也会使行前的退格键表现得更智能。
在smarttab
mode中,当Tab不在行首使用时,没有特殊意义。这与我上面的Tabto映射不同Ctrl-T,因为Ctrl-T在一行中的任何地方(在插入模式下)使用 a 会增加该行的缩进。
其他有用的映射可能是:
: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 列的制表符位置的对齐。
最简单的将是 n vim 文件
set tabstop=4