【问题标题】:Vim: How does the statusline '%V' work?Vim: 状态栏 '%V' 是如何工作的?
【发布时间】:2012-11-12 17:41:12
【问题描述】:

这是一个我无法找到答案的 Vim 问题。 %V statusline 变量有什么作用?

我检查了我能找到的文档,但不是很清楚,我知道它显示了虚拟列,但是- 之前的数字/字母是什么意思?

例如,以下各项的含义是什么?

0-1
17-18

等等。从我能管理的范围内,同时找到这些例子。 - 之前的数字是最后一个实心列,也就是实列。这是正确的吗?

感谢您的帮助!

【问题讨论】:

  • 第一个数字不是%V的一部分,很可能是%c
  • 谢谢@romainl,就是这样。

标签: vim statusline


【解决方案1】:

在 Vim statusline 中,您可以设置许多标志,其中存在:

  • %c -- 列号,即字节数。
  • %v%V -- 虚拟列号,即屏幕上的列号。

那么实际列号和虚拟列号有什么区别呢?答案是,当使用制表符时,虚拟列号是您当前列号的近似值就好像您使用的是空格而不是制表符。

示例。 Vim 状态行中一个有用的组合是:

%c%V

正如它在帮助中所说,显示 virtual 列号的 %V 标志只有在它与实际列号不同时才会被打印(带有前面的破折号)。因此,通常您的状态行将只显示实际的列号(例如,8),但如果您位于带有制表符或多字节字符的行上,您将看到两个数字(例如 1-8)。

例如,试试这个:

echo -e "\tHello world." > /tmp/test

然后,在 Vim 中打开 /tmp/test 并注意您的状态行,指示实际列和虚拟列之间的差异。如果您将tabstop 设置更改为不同的值,则虚拟列将会更改。

最后,如果你:set expandtab:retab,那么虚拟列指示器将被隐藏。

【讨论】:

  • +1。虽然这不是很清楚,但据我所知,它并没有回答我的问题。我的问题是- 之前的数字是多少。尽管如此,@romainl 还是为我回答了这个问题,它是在 %V 之前的 %c。无论如何,感谢您的回答和您的时间,我会接受答案,因为它是唯一的。 :)
  • @Eduan 列和虚拟列之间的区别不仅仅由选项卡覆盖。还有其他例子: UTF-8 表示的字符占用 3 列(3 个字节:E2 80 9C),但只有 1 个虚拟列。 (FULLWIDTH LATIN CAPITAL A) 占用 3 列 (UTF-8) 和 2 个虚拟列(全宽!)。正如您所看到的“虚拟列号是您当前列号的近似值,就像您使用空格而不是制表符一样”是完全错误的陈述,虚拟列号是某些字符结束的显示单元格的数量(官方:“screen column of文件位置”)。
  • 啊我看到@ZyX 我想这仅适用于可变宽度字体?还是等宽字体也是如此?
  • 另外,没有近似值,它总是给出精确值。而且vim中的列是字节偏移量,它们与显示的列无关。
  • @Eduan 全角字符占用两个等宽字体显示单元。
猜你喜欢
  • 1970-01-01
  • 2015-04-01
  • 2011-10-23
  • 2015-08-26
  • 2017-10-11
  • 1970-01-01
  • 2015-05-27
  • 2015-07-11
  • 1970-01-01
相关资源
最近更新 更多