如何让 (g)Vim 显示当前文件的字符数?

Owe*_*enP 94 vim gvim

我喜欢为我经常光顾的编程论坛编写教程和文章。本论坛每个帖子有字数限制。我过去曾使用 Notepad++ 来写帖子,它会在状态栏中保留实时字符数。我开始更多地使用 gVim,此时我真的不想回到 Notepad++,但是拥有这个字符数非常有用。如果我仔细计算,我通常最终会将帖子粘贴到 Notepad++ 中,这样我就可以看到我何时修剪到足以达到限制。

我见过有:set ruler帮助的建议,但这仅通过当前行的当前列索引给出字符数。如果我不使用分段符,这会很棒,但我相信您会同意在一个段落中阅读数千个字符是不舒服的。

我阅读了帮助并认为这rulerformat会起作用,但是在查看statusline它使用的格式后,我没有看到任何提供当前缓冲区字符数的内容。

我已经看到有一些插件添加了这个,但我仍然把我的脚趾浸入 gVim 并且我不确定在我理解它们做什么之前我想加载随机插件。我更喜欢使用 vim 内置的东西,但如果它不存在,它就不存在。

我应该怎么做才能实现我的目标?如果它涉及插件,您是否使用它以及它的效果如何?

mru*_*cci 150

g CTRL-G在正常模式下按可显示有关光标和文件的一些统计信息。

如果您使用的是 linux,则可以使用它wc -m来获取当前文件中的字符数

:!wc -m %
Run Code Online (Sandbox Code Playgroud)

由于它不是实时更新的,也许您想将此命令映射到以下内容:

map <F4> :!wc -m %<CR>
Run Code Online (Sandbox Code Playgroud)

  • `g CTRL-G` 我不知道这个存在。好的! (24认同)
  • g &lt;cg&gt; 跨平台工作,这很好。 (3认同)

aki*_*ira 26

:help count-items
Run Code Online (Sandbox Code Playgroud)

建议,你可以做一个替换 ala 的试运行

:%s/./&/gn
Run Code Online (Sandbox Code Playgroud)

(然后报告匹配字符的数量)或者您strlen()对视觉选择的文本进行了观察:

:echo strlen(@")
Run Code Online (Sandbox Code Playgroud)

(" 是未命名的寄存器)

因为您可以在状态行中调用这样的表达式,%{myfunc()}这可能是一个很好的起点。一直计算可能会有点耗时,因为您必须选择整个文本然后猛拉它,但也许在“-register 中显示字节数对您来说已经可以了。如果您真的想知道数字缓冲区中的字符数:只需在视觉上选择缓冲区中的所有文本并猛拉它。因此,解决方案是:

 :set statusline=%{strlen(@")}
Run Code Online (Sandbox Code Playgroud)

它为您提供“-寄存器中的字符数(如果您选择并拉动当前缓冲区,则与字节数相同)。


小智 9

对 mrucci 答案的增强:

您可以wc在 linux 上使用,而无需先保存文件,通过:w如下指示命令输出:

:w !wc -m
Run Code Online (Sandbox Code Playgroud)

您可以将其映射到 mrucci 提到的内容。


aki*_*ira 6

:help statusline
Run Code Online (Sandbox Code Playgroud)

给你

o N   Byte number in file of byte under cursor, first byte is 1.
      Mnemonic: Offset from start of file (with one added)
Run Code Online (Sandbox Code Playgroud)

这也是解决您问题的好方法。只需转到缓冲区的末尾,G状态行中显示的字节数就是字符数(当然,多字节字符不是这样)。回到你来自的地方ctrlo