在 vim 编辑器的右下角,有 2 个数字,以以下格式显示行号和列号:
495,30
但在某些行上,使用了这种格式:
496,9-30
上面的格式是什么意思-
?光标仍然在列上,30
但那是什么9
?
答案1
它指的是相对于特殊字符(即:制表符)的光标位置。
假设你的屏幕是这样的(我知道,屏幕很小):
1 xxxxxxxxx - - - - - - - - - - - - - - - - - 2------------------------------------- 3------------------- 4------------------------------------- 5 - - x --- --- --- x 6------------------------------------- 7-------------------- 8 xxxxxxxxxxxxxxxxxxxxx xxxx
任何单个字符(unicode 除外)= 1 个字节
3 个附加行 (---) = Tab = 1 个字节
1 个空格 (-) = 1 个字节
Tab 配置为显示超过 8 列。
如果光标在第 1 行的最后一个 X 上,Vim 将显示 1,10。如果光标在第 5 行的第一个 X 上,则将显示 5,3。第 8 行的最后一个 X 表示 8,25。但是,由于第 5 行的第二个 X 被 3 个 Tab 序列分隔开,如果光标在第 1 行的最后一个 X 上,则将显示 5,7-25。
- 第一个 5 显然是行号
- 7 表示列中的字节数(2 个空格、一个 x、3 个制表符以及最后一个 x = 7)
- 25 代表您在控制台中看到的列。使用 25 个空格将与 2 个空格、一个 x、3 个制表符和另一个 x 位于相同的位置。如您所见,第 8 行中的第 25 个 X 与第 5 行中的最后一个 X 对齐。
答案2
来自 Vim“options.txt”帮助页面(重点是我的):
如果显示的字符数与文本中的字节数不同(例如,对于 TAB 或多字节字符),同时显示文本列(字节数)和屏幕列,以破折号分隔。
空行显示“0-1”。
对于空缓冲区,行号也为零:“0,0-1”。
例如,如果一行的第一个字符是制表符,并且 Vim 配置为在 8 列上显示制表符,则标尺将显示 1-8,因为制表符仍然只是一个字节,但光标将位于第 8 列。
在浏览包含扩展 Unicode 字符的文件时,您会看到类似的情况,因为它们需要多个字节来存储,但仍然只使用屏幕上的一列。
答案3
上面的例子中,字节数小于屏幕列数(例如 9-30、7-25)。当显示的单字节字符占用超过一个屏幕列时,就会发生这种情况。
字节数也可能大于屏幕列数。当在一个(或更少)列中显示多个字节时,就会发生这种情况。例如,多字节字符'\xa0'
(十六进制表示法)可能显示在屏幕上的单个列中。
例如,在第 5 行中,如果第二个字符是两个字节,第四个字符也是两个字节,则沿着第 5 行移动时,列号会进行如下变化:
5,1
5,2 (two-byte character, appears in a single column)
5,4-3
5,5-4 (two-byte character, appears in a single column)
5,7-5