Vim中的选项卡和空格

如何防止vim在autoindent打开时用制表符replace空格?

一个例子:如果我有两个选项卡和7个空格在行的开始,并且tabstop=3 ,并按Enter键,下一行有四个选项卡和1空格在开始,但我不希望这.. 。

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

 :set expandtab 

如果要将文件中的所有选项卡replace为3个空格(与tabstop=3非常相似):

 :%s/^I/ / 

(其中^I制表符)

从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 (eg, 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. 

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

:help copyindent

'copyindent''ci' 布尔值 (默认closures); 本地缓冲; {Vi无此function}

在自动缩进新行时复制现有行缩进的结构。 通常情况下,新的缩进是通过一系列的选项卡,然后根据需要重新创build空间(除非启用“expandtab” ,在这种情况下只使用空格)。 启用此选项会使新行复制在现有行上用于缩进的任何字符。 如果新的缩进比现有的线更大,则剩余空间以正常方式填充。

注:设置“兼容”时, “copyindent”将被重置。
另请参阅“维护” 。

:help preserveindent

'preserveindent''pi' 布尔值 (默认closures); 本地缓冲; {Vi无此function}

在更改当前行的缩进时,应尽可能多地保留缩进结构。 正常情况下,缩进被replace为一系列的选项卡,其后跟空格(除非'expandtab'被启用,在这种情况下只使用空格)。 启用此选项意味着缩进将保留尽可能多的现有字符以进行缩进,并且只根据需要添加其他制表符或空格。

注意:多次使用“>>”时,所产生的缩进是多个制表符和空格的混合。 你可能不喜欢这个。
注意: 'preserveindent'在设置'compatible'时重置。
另请参阅“copyindent” 。
使用:retab清理空白处。

您可以将所有TAB转换为SPACE

 :set et :ret! 

或将所有SPACE转换为TAB

 :set et! :ret! 

这是我的.vimrc的一部分:

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

这适用于我,因为我绝对不希望在我的源代码中的标签。 从你的问题看来,你确实想在下一行保留两个制表符和七个空格,我不确定有什么方法可以教Vim来适应这种风格。

也许这个底部可以帮助你?

标准vi从字面上解释tab键,但是有一些stream行的vi衍生的替代方法,比如vim更聪明。 为了让vim把标签解释为“indent”命令而不是insert-a-tab命令,执行以下操作:

 set softtabstop=2 

如果要根据'ts'的设置将所有选项卡replace为空格,可以使用:retab。 它也可以做相反的事情。