如何使 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
在你的 [.vimrc:][1] 文件中: 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
获得特定文件类型缩进的最好方法是在你的 vimrc 中使用 filetype plugin indent on
。然后,您可以在 .vim/ftplugin/c.vim 中指定诸如 set sw=4 sts=4 et
之类的内容,例如,不必为所有正在编辑的文件设置全局,并且其他非 C 类型语法也将正确缩进 (甚至口齿不清)。
要在大多数文件中使用 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
?在我看来,最后几行在所有情况下都会覆盖特定于 makefile
在许多 Linux 系统上,例如 Ubuntu,默认情况下不存在 .vimrc
文件,因此建议您先创建它。
不要使用存在于主目录中的 .viminfo
文件。它用于不同的目的。
第 1 步:转到您的主目录
cd ~
第 2 步:创建文件
vim .vimrc
第三步:添加上述配置
filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab
第 3 步:按 Shift + ZZ 保存文件。
Shift + ZZ
它将创建 .swp 文件。使用 wq
。
Ctrl-Z
是另一回事...)
vim -n <file>
。交换文件不是在保存时生成的;这几乎会破坏它的目的,因为交换文件在恢复突然终止的编辑会话方面变得有用。
推荐的方法是使用基于文件类型的缩进,如果这还不够,只使用 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
自动缩进基于当前的语法模式。我知道如果您正在编辑 Foo.java,然后输入 {
并按 Enter 会缩进以下行。
至于选项卡,有两种设置。在 Vim 中,键入一个冒号,然后“set tabstop=4”,这会将制表符设置为显示为四个空格。再次点击冒号并输入“set expandtab”,这将为制表符插入空格。
您可以将这些设置放在主目录中的 .vimrc(或 Windows 上的 _vimrc)中,因此您只需键入一次。
首先,不要在 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-VCtrl-T 插入的文字控制字符。
有了这个映射,您仍然可以使用 Ctrl-VTab 将文字 Tab 键入缓冲区。请注意,如果您这样做,即使 :set expandtab
已打开,您也会得到一个未展开的制表符。
使用 :set smarttab
可以实现与 <Tab>
映射类似的效果,它还会使行前的退格键表现得更智能。
在 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-VTab 将硬制表符潜入文件中,它将生成与下一个基于 8 列的制表符位置的对齐, 照常。
<C-t>
可以使用该语法而不是文字。最后,在正常模式下映射 <Tab>
也会映射 <C-i>
(它们是相同的字符),所以我不建议这样做(你失去了一个漂亮的 vim 功能
毕竟,您可以编辑.vimrc,然后添加conf
set tabstop=4
或者执行命令
最简单的将是 n vim 文件
set tabstop=4
不定期副业成功案例分享