问题
在以下示例中:
- 为什么在第一行中插入了一个
t
,但只显示 4-col 空白?不应该按照tabstop
8
吗? - 为什么第一行和第五行的两个
<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.........
相关讨论
这里有一些很好的答案,但我仍然不明白在这种特殊情况下发生了什么。
-
softtabstop
是这样使用的,它会让你的标签看起来一定长度,即使它们实际上是tabstop
的长度">
软制表停止"STS"编号(默认为 0(
。
这对于将"ts"设置保持在标准值很有用 的 8,同时能够像设置为"sts"一样进行编辑。 然而 像"X"这样的命令仍然适用于实际字符。
-
至于在开头插入空格的奇怪行为,我相信这与默认情况下打开并移动而不是在行首插入制表符的
smarttab
有关。'智能选项卡' 'sta' 布尔值(默认打开(全局
启用后,行前面的<选项卡>根据 "移位宽度"。 "Tabstop"或"softtabstop"在其他地方使用。 一个 将删除开头的"移位宽度"空间 线。选项卡>
IGI-111 正确回答了您的第一个问题,尽管可能不够清楚。
- 为什么在第一行中插入了一个
t
,但只显示 4-col 空白?不应该按照tabstop
8
吗?
请记住,TAB 不会插入固定数量的空白,而是将位置前进到特定数字的下一个倍数(如果从零开始编号(。
你说的"即使它们真的是长度"是什么意思
tabstop
"?
他的意思是,当 TAB 字符打印到终端时,将导致光标位置前进到tabstop
(8( 的下一个倍数,而按 Tab vim
前进到softtabstop
(4( 的下一个倍数。如果softtabstop
的下一个倍数不是tabstop
的倍数,vim
必须使用空格(0x20(。
- 为什么第一行和第五行的两
<TAB>
命中结果不同?(一个是09
,另一个是20202020
(
那是因为在第一行中,您在键入 Tab 后按 Tab 1tab
,即您在位置 4 并前进到位置 8,这是 tabstop
的倍数,TAB (0x09( 完成了这项工作,而在第五行中,您在起始位置 0 按 Tab 并前进到位置 4, 这不是tabstop
的倍数,需要空格。