【问题标题】:Number of Tabs I do get after striking Tab key in Vim Insert mode在 Vim 插入模式下按 Tab 键后得到的选项卡数
【发布时间】:2019-08-06 01:18:57
【问题描述】:

我正在学习 C 编程。

我遇到了关于 vim 配置的问题。

以下是我用.vimrc写的vim设置:

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) 的两倍。

【问题讨论】:

  • 制表符并不总是具有相同的长度。制表符总是缩进到制表位上的乘法位置。因此,如果您的制表位为 4,则制表位将停在 4、8、12、16... 这意味着如果您在位置 3 处插入制表位,它的长度仅为 1 (3->4)。但是如果你将它插入到位置 5 它将是长度 3 (5->8)

标签: c vim configuration vi auto-indent


【解决方案1】:

这是您的softtabstop 和(常规)tabstop 之间交互的结果。

您的softtabstop 表示,当按下 Tab 键时,结果应与 8 列的倍数对齐。当您在 a 之后按 Tab 时,您已经在第 13 列,因此只需一个 4 宽制表符就足以到达那里。在其他情况下,您分别为 16 和 8,因此需要两个 4 宽制表符才能与您的 8 宽软制表符对齐。

PS:如果你想要奇怪的行为(当然不推荐),请设置tabstop=3 softtabstop=8。然后,当您按 Tab 键时,您会得到空格和制表符的组合。

PPS:所有这些都是我不喜欢文字 Tab 字符的部分原因。它们不稳定,它们的显示取决于每个开发人员的制表位设置。在我的组织中,我努力让每个人都使用:set expandtab(或每个开发人员编辑器中的等效项)并使用空格字符来实现稳定且可重现的显示。在我的工作中,我唯一能容忍制表符的地方是 makefile,我别无选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2017-03-14
    • 2016-02-08
    相关资源
    最近更新 更多