noexpandtab和softtabstop小于tabstop

时间:2015-12-14 21:03:53

标签: vim tabstop

问题

在以下示例中:

  1. 为什么在第一行插入\t但只显示4-col空白?根据{{​​1}}
  2. ,它不应该是8
  3. 为什么第一行和第五行中的两个tabstop点击有不同的结果? (一个是<TAB>,另一个是09
  4. 的.vimrc

    20202020

    文本

    我创建了以下文本,首先插入8个空行,然后在每行的开头键入,这样就没有生成set noexpandtab set tabstop=8 set shiftwidth=4 set softtabstop=4 。 (通过点击shiftwidth)插入下面的每个4-col空白:

    <TAB>

    十六进制表示

    然后我做了1tab done 2tabs done 3tabs done 4tabs done 1tab 2tabs 3tabs 4tabs ,这就是我得到的(带有一些尾随的换行符):

    :%!xxd

    相关讨论

    有一些非常好的答案here但我仍然不明白在这种特殊情况下会发生什么。

2 个答案:

答案 0 :(得分:1)

  1. softtabstop旨在以这种方式使用,它会使您的标签显示一定的长度,即使它们确实是tabstop的长度

      

    'softtabstop''sts'号码(默认为0)

         

    ...

         

    这有助于将'ts'设置保持为标准值   8,虽然能够编辑像它被设置为'sts'。然而,   像“x”这样的命令仍然适用于实际的字符。

  2. 至于在开头插入空格的奇怪行为,我确信它与smarttab有关,默认情况下是{和1}},而不是在行的开头插入制表符

      

    'smarttab''sta'boolean(默认开启)global

         

    开启时,&lt;标签&gt;在一条线前插入空白根据   'shiftwidth' 的。 “tabstop”或“softtabstop”用于其他地方。一个    将在开头删除'shiftwidth'值的空间   线。

答案 1 :(得分:0)

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

  
      
  1. 为什么在第一行插入\t但只显示4-col空白?根据{{​​1}}
  2. ,不应该是8   

请记住,TAB不会插入固定数量的空格,但会将位置提升到某个数字的下一个倍数(如果从零开始编号)。

  

你是什么意思&#34;即使他们真的是长度   tabstop&#34;

他必须表示当打印到终端时,TAB字符会导致光标位置前进到tabstop(8)的下一个倍数,同时在{{中按 Tab 1}}前进到tabstop(4)的下一个倍数。如果vim的下一个倍数不是softtabstop的倍数,softtabstop必须使用空格(0x20)。

  
      
  1. 为什么第一行和第五行中的两个tabstop点击有不同的结果? (一个是vim,另一个是<TAB>
  2.   

那是因为在键入09后,您在第一行中点击 Tab ,i。即你在第4位并前进到第8位,这是20202020的倍数,一个TAB(0x09)完成了这项工作,而在第五行你在第一行打了 Tab 位置0并前进到位置4,这不是1tab的倍数,需要空格。