it-swarm.cn

Vim中的制表符和空格

当autoindent打开时,如何阻止vim用制表符替换空格?

例如:如果我在行的开头有两个制表符和7个空格,并且tabstop=3,然后按Enter键,则下一行有四个制表符和一个空格,但我不希望...

69
RQ

根本不使用制表符也许是一个好主意。

:set expandtab

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

:%s/^I/   /

(其中^I是 TAB 字符)

来自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.
77
user11211

您可以将所有TAB转换为SPACE

:set et
:ret!

或将所有SPACE转换为TAB

:set et!
:ret!
40
kev

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

:help copyindent

'copyindent''ci'boolean (默认关闭);本地缓冲区; {Vi无此功能}

自动输入新行时,复制现有行缩进的结构。通常,新缩进由一系列制表符重建,后跟空格(根据需要除非 'expandtab' 启用,在这种情况下只使用空格)。启用此选项会使新行复制用于在现有行上缩进的任何字符。如果新缩进大于现有行,则以正常方式填充剩余空间。

注意: 'copyindent''compatible' 设置时复位。
另见 'preserveindent'

:help preserveindent

'preserveindent''pi'boolean (默认关闭);本地缓冲区; {Vi无此功能}

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

注意:多次使用“>>”时,生成的缩进是制表符和空格的混合。你可能不喜欢这个。
注意: 'preserveindent''compatible' 设置时重置。
另见 'copyindent'
使用:重新占据空白区域。

40
Aristotle Pagaltzis

这是我.vimrc的一部分:

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

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

25
Greg Hewgill

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

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

set softtabstop=2
1
svrist

如果要根据“ts”的设置用空格替换所有选项卡,可以使用:retab。它也可以反过来。

1
graywh