Vim 中的制表符和空格

当自动缩进处于打开状态时,如何防止 vim 用制表符替换空格?

例如: 如果我有两个制表符和7个空格在行的开头,然后按下 tabstop=3,然后按下 Enter,下一行有4个制表符和1个空格在行的开头,但是我不希望这样..。

91524 次浏览

也许这件事的真相能帮到你?

标准 vi 从字面上解释 tab 键,但是有一些流行的 vi 派生的替代方案更智能,比如 vim。要让 vim 将 tab 解释为“ indent”命令,而不是 insert-a-tab 命令,请执行以下操作:

set softtabstop=2

也许根本不使用标签页是个好主意。

:set expandtab

如果你想把文件中所有的制表符替换成3个空格(这看起来和 tabstop=3非常相似) :

:%s/^I/   /

(其中 ^ITAB字符)

VIM 在线帮助:

'tabstop' 'ts'      number  (default 8)
local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.


Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).


There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
(or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
will use a mix of tabs and spaces, but typing <Tab> and <BS> will
behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
'expandtab'.  This way you will always insert spaces.  The
formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
|modeline| to set these values when editing the file again.  Only
works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
'noexpandtab'.  This should then work (for initial indents only)
for any tabstop setting that people use.  It might be nice to have
tabs after the first non-blank inserted as spaces if you do this
though.  Otherwise aligned comments will be wrong when 'tabstop' is
changed.

这是我 .vimrc的一部分:

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

这对我来说很有用,因为我绝对不想在源代码中使用制表符。从你的问题看来,你确实想在下一行保留两个制表符和七个空格,我不确定是否有办法教 vim 适应这种风格。

所有我想要的是自动缩进行具有完全相同的缩进字符作为前一行。

:help copyindent

‘ copy indent’ (法语) 布尔型(默认关闭) ; local to buffer; { not in VI }

方法时,复制现有行缩进的结构 通常,新的缩进是由一系列 制表符后面跟着所需的空格(除非启用 ‘ expandtab’, 在这种情况下,只使用空格)。启用此选项将使 行复制用于缩进的任何字符 如果新缩进大于现有的 行,剩余的空间将以正常方式填充。

注意: “复印件”在设置 “兼容”时被重置。
也请参阅 “保存”

:help preserveindent

‘ presveindent’ “ π” 布尔型(默认关闭) ; local to buffer; { not in VI }

在更改当前行的缩进时,尽可能保留 缩进结构。通常缩进被一个 一系列的制表符后面跟着所需的空格(除非 ‘ expandtab’是 在这种情况下,只使用空格)。启用此选项 意味着缩进将保留尽可能多的现有字符 用于缩进,并且只根据需要添加额外的制表符或空格。

注意: 当多次使用“ > >”时,产生的缩进是 制表符和空格。您可能不喜欢这个。
注意: “保存”在设置 “兼容”时被重置。
也请参阅 “复印件”
使用: retab 来清理空白。

如果希望根据“ ts”的设置将所有制表符替换为空格,可以使用: retab。它也可以做相反的事情。

您可以将所有的 TAB转换为 SPACE

:set et
:ret!

或者将所有的 SPACE转换为 TAB

:set et!
:ret!