如何使用vi或Vim获取字符计数

11
如何使用vi从文本文件获取字符位置计数?
我尝试使用“:goto number”在Linux上无法工作。
澄清一下我的问题,如果我有一个包含三行的文件:
I am going for a walk
because today is a
beautiful day.

我想要在程序中找到第30个字符,并跳转到第2行,突出显示单词“today”中字母“t”。这类似于macOS vi中的:goto 30概念,但适用于Linux。


3
:%s/.//gn<cr> 是一种方法。 - DJMcMayhem
可能是 vim:从函数中计算缓冲区中的字符数 的重复问题。 - phd
2
:h wordcount() - Christian Brabandt
我更新了我的问题以澄清我的意思。这个问题不是phd所指的重复。谢谢! - Ura718
更新了我的回答。 - Zak
3个回答

38

2023年更新的答案,包括最新的VIM版本中的字节/字符区分

使用gCtrl + G

输出结果如下:

第1列,共5列;第1行,共31行;第1个单词,共48个单词;第1个字符,共570个字符;第1个字节,共571个字节

第1列,共5列;表示光标在当前所在的上的位置

第1行,共31行;表示光标当前所在的行数

第1个字符,共570个字符表示当前所在的字符位置:(第1个字符)与文件中的字符数(570)相比

第1个字节,共571个字节表示当前所在的字节位置:(第1个字节)与文件中的字节数(571)相比。由于字节和字符并不相同,因为某些字符是Unicode多字节字符,所以这个数字可能与字符计数不同。

这应该是你需要的内容:
:go30
以下是在命令行中的显示效果:

:go30


我正在使用Ubuntu 16.04,带有版本为7.4.1689的“vim” -- 执行“vi -v”以查看您的“vim”版本。 - Zak
7
因为字符和字节不是同一件事情:例如,如果存在Unicode多字节字符,则最好知道如何针对实际字符进行操作。 - frabjous
2
现在运行此命令将返回"Col 1 of 37; Line 1 of 586; Word 1 of 3557; Char 1 of 25042; Byte 1 of 25047",这解决了Unicode字符问题 :) @frabjous - jeffrey.d.m
1
根据当前的文档(以及我的经验),它必须是 gCtrl + G。第一个 g 必须是小写。https://vimdoc.sourceforge.net/htmldoc/editing.html#g_CTRL-G - undefined
@Moritz -- 五年了,竟然没有人提到我的错别字!已经修正了。 - undefined
显示剩余3条评论

4

计算文件的部分字符数(或整个文件的字符数,如果需要)。 首先可视化您想要计数的区域。

  1. 使用 v} 可视化一个段落
  2. 使用 ggVG 可视化整个文件

然后输入

:%s/\%V./&/g

我需要这个来计算我的 Twitter 帖子(280 字符限制)。

2
你建议的命令是什么意思? - Peaceful
1
%V代表可视化文本,然后将每个字符'.'替换为它本身'&'。这样可以保持文本不变,但计算出有多少个字符被“替换”了。 - zzapper

0
我已经找到了解决问题的方法。看起来我的系统上同时安装了 'vi' 和 'vim'。默认情况下,我使用 'vi' 编辑文件,但是 :goto 30 没有起作用。经过一番搜索,我发现 'vi' 是 vim-minimal 包的一部分。而 'vim' 则是 vim-enhanced 包的一部分。当我尝试使用 'vim' 而不是 'vi' 时,:goto 30 开始工作了!所以看起来这肯定与软件包有关。感谢 Zak 的指引和所有人的帮助。

从技术上讲,我的答案是有效的——包括我要求您检查VIM版本并安装更新软件包(如果需要)的事实。任何阅读我的答案的人都会得出以下结论:1):goto 30有效;2)如果无效,请检查您的vim版本。回答自己的问题是不必要的。 - Zak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接