在 Vim 插入模式下敲击 Tab 键后得到的 Tab 数
Number of Tabs I do get after striking Tab key in Vim Insert mode
我正在学习 C 编程。
我遇到了有关 vim 配置的问题。
下面是我的vim设置写在.vimrc:
set nu
set shiftwidth=4
set tabstop=4
set softtabstop=8
set autoindent
set cindent
set smartindent
syntax on
为了查看选项卡的位置,我使用了 :set list
:
#include <stdio.h>$
int main(void)$
{$
^Iprintf("ab\n");$
^Ireturn 0;$
}$
现在在插入模式下的第 4 行,我想看看在不同位置按下 Tab 键后可以得到多少个标签。
结果如下:
当我在 n
之后点击 Tab 时,我得到 ^Iprin^I^Itf("ab\n");$
.
当我在 \n
之后点击 Tab 时,我得到 ^Iprintf("ab\n^I^I");$
.
以上两种情况我都比较理解
但是当我在 a
之后点击 Tab 时,我得到 ^Iprintf("a^Ib\n");$
.
这超出了我的理解范围。
谁能解释一下为什么只替换了一个标签?
我认为应该有两个,因为softtabstop
占用8个空间,是tabstop
的两倍(4)。
这是您的 softtabstop
和(常规)tabstop
之间互动的结果。
您的 softtabstop
说当按下 Tab 键时,结果应该与 8 列的倍数对齐。当您在 a 之后按下 Tab 键时,您已经在第 13 列,因此只需一个 4 宽度的制表符就足以到达那里。在其他情况下,您分别为 16 和 8,因此需要两个 4 宽制表符才能与 8 宽软制表符对齐。
PS:如果你想要奇怪的行为(当然不推荐),设置tabstop=3 softtabstop=8
。然后,当您按下 Tab 键时,您会得到 space 和制表符的组合。
PPS:所有这些都是我不喜欢文字制表符的部分原因。它们不稳定,它们的显示取决于每个开发人员的制表位设置。在我的组织中,我努力推动每个人使用 :set expandtab
(或每个开发人员编辑器中的等效字符)并使用 space 字符来实现稳定和可重现的显示。在我的工作中,我唯一能容忍制表符的地方是 makefile,我别无选择。
我正在学习 C 编程。
我遇到了有关 vim 配置的问题。
下面是我的vim设置写在.vimrc:
set nu
set shiftwidth=4
set tabstop=4
set softtabstop=8
set autoindent
set cindent
set smartindent
syntax on
为了查看选项卡的位置,我使用了 :set list
:
#include <stdio.h>$
int main(void)$
{$
^Iprintf("ab\n");$
^Ireturn 0;$
}$
现在在插入模式下的第 4 行,我想看看在不同位置按下 Tab 键后可以得到多少个标签。
结果如下:
当我在 n
之后点击 Tab 时,我得到 ^Iprin^I^Itf("ab\n");$
.
当我在 \n
之后点击 Tab 时,我得到 ^Iprintf("ab\n^I^I");$
.
以上两种情况我都比较理解
但是当我在 a
之后点击 Tab 时,我得到 ^Iprintf("a^Ib\n");$
.
这超出了我的理解范围。
谁能解释一下为什么只替换了一个标签?
我认为应该有两个,因为softtabstop
占用8个空间,是tabstop
的两倍(4)。
这是您的 softtabstop
和(常规)tabstop
之间互动的结果。
您的 softtabstop
说当按下 Tab 键时,结果应该与 8 列的倍数对齐。当您在 a 之后按下 Tab 键时,您已经在第 13 列,因此只需一个 4 宽度的制表符就足以到达那里。在其他情况下,您分别为 16 和 8,因此需要两个 4 宽制表符才能与 8 宽软制表符对齐。
PS:如果你想要奇怪的行为(当然不推荐),设置tabstop=3 softtabstop=8
。然后,当您按下 Tab 键时,您会得到 space 和制表符的组合。
PPS:所有这些都是我不喜欢文字制表符的部分原因。它们不稳定,它们的显示取决于每个开发人员的制表位设置。在我的组织中,我努力推动每个人使用 :set expandtab
(或每个开发人员编辑器中的等效字符)并使用 space 字符来实现稳定和可重现的显示。在我的工作中,我唯一能容忍制表符的地方是 makefile,我别无选择。