noexpandtab 和 softtabstop 小于 tabstop 时的 vimrc Tab 行为



问题

在以下示例中:

  1. 为什么在第一行中插入了一个t,但只显示 4-col 空白?不应该按照tabstop 8吗?
  2. 为什么第一行和第五行的两个<TAB>命中结果不同?(一个是09,另一个是20202020(

.vimrc

set noexpandtab
set tabstop=8                             
set shiftwidth=4                                    
set softtabstop=4

发短信

我首先插入 8 个空行,然后在每行的开头键入,从而创建了以下文本,这样就不会生成shiftwidth。(下面的每个 4-col 空白都是通过按 <TAB> 插入的(:

1tab    done
2tabs        done
3tabs            done
4tabs                done
    1tab
        2tabs
            3tabs
                4tabs

十六进制表示

然后我做了:%!xxd,这就是我得到的(有一些尾随换行符(:

0000000: 3174 6162 0964 6f6e 650a 3274 6162 7309  1tab.done.2tabs.                                                                                                        
0000010: 2020 2020 646f 6e65 0a33 7461 6273 0909      done.3tabs..                                                                                                        
0000020: 646f 6e65 0a34 7461 6273 0909 2020 2020  done.4tabs..                                                                                                            
0000030: 646f 6e65 0a20 2020 2031 7461 620a 0932  done.    1tab..2                                                                                                        
0000040: 7461 6273 0a09 2020 2020 3374 6162 730a  tabs..    3tabs.                                                                                                        
0000050: 0909 3474 6162 730a 0a0a 0a0a 0a0a 0a0a  ..4tabs.........

相关讨论

这里有一些很好的答案,但我仍然不明白在这种特殊情况下发生了什么。

  1. softtabstop是这样使用的,它会让你的标签看起来一定长度,即使它们实际上是tabstop的长度

    ">

    软制表停止"STS"编号(默认为 0(

    这对于将"ts"设置保持在标准值很有用 的 8,同时能够像设置为"sts"一样进行编辑。 然而 像"X"这样的命令仍然适用于实际字符。

  2. 至于在开头插入空格的奇怪行为,我相信这与默认情况下打开并移动而不是在行首插入制表符的smarttab有关。

    '智能选项卡' 'sta' 布尔值(默认打开(全局

    启用后,行前面的<选项卡>根据 "移位宽度"。 "Tabstop"或"softtabstop"在其他地方使用。 一个 将删除开头的"移位宽度"空间 线。

IGI-111 正确回答了您的第一个问题,尽管可能不够清楚。

  1. 为什么在第一行中插入了一个t,但只显示 4-col 空白?不应该按照tabstop 8吗?

请记住,TAB 不会插入固定数量的空白,而是将位置前进到特定数字的下一个倍数(如果从零开始编号(。

你说的"即使它们真的是长度"是什么意思 tabstop"?

他的意思是,当 TAB 字符打印到终端时,将导致光标位置前进到tabstop (8( 的下一个倍数,而按 Tab vim前进到softtabstop (4( 的下一个倍数。如果softtabstop的下一个倍数不是tabstop的倍数,vim必须使用空格(0x20(。

  1. 为什么第一行和第五行的两<TAB>命中结果不同?(一个是09,另一个是20202020(

那是因为在第一行中,您在键入 Tab 后按 Tab 1tab,即您在位置 4 并前进到位置 8,这是 tabstop 的倍数,TAB (0x09( 完成了这项工作,而在第五行中,您在起始位置 0 按 Tab 并前进到位置 4, 这不是tabstop的倍数,需要空格。

相关内容

  • 没有找到相关文章

最新更新