我按“Tab、Tab、Tab、Left、Delete”键来获得所需的缩进。保存文件后,我看到“^I”。如果我按“Space”键 11 次,我看到的是“”。
如何让 vim 停止引入新的硬制表符(不改变用户感知的缩进行为或破坏现有的硬制表符)?
有很多令人困惑的智能制表符、shiftwidth、制表位和其他选项。如何正确使用?
答案1
如果你希望 vim 将任何制表符转换为空格,请使用:
set expandtab " expand tabs!
您可以使用以下命令设置制表符转换为多少个“空格”:
set softtabstop=4 " if expandtab on, how many space a tab is
如果 vim 找到现有的制表符,而你希望将其转换为空格,请将其设置为制表符所代表的空格数
set tabstop=4 " tab spacing of 4 for real tabs
(请注意,这set tabstop
不会影响现有的选项卡,只会在编辑器中向您显示它们)。
编辑我还会查看 garyjohn 的答案,以获得有关现有制表符处理以及使用制表符命令时的行为的更精确的答案 <<
>>
。 (我实际上学到了一些我不知道的行为!)+1我对他的回答表示赞赏!
答案2
Vim 不会破坏现有的标签,除非你
- 执行
:retab
或 <<
使用或等命令更改行的缩进>>
。
如果您更改了行的缩进并且设置了 'expandtab',那么 Vim 通常会将所有制表符替换为适当数量的空格。如果您更改了行的缩进并且设置了 'noexpandtab',那么 Vim 通常会将尽可能多的前导空格替换为制表符。
可以通过设置“preserveindent”选项来改变正常行为以尝试保留原始缩进的结构。