我怎样才能让 (g)Vim 显示当前文件的字符数?

我怎样才能让 (g)Vim 显示当前文件的字符数?

我喜欢为一个我经常访问的编程论坛撰写教程和文章。这个论坛对每篇帖子的字符数有限制。我过去曾使用 Notepad++ 撰写帖子,它会在状态栏中显示实时字符数。我开始更多地使用 gVim,现在我真的不想再使用 Notepad++,但有这个字符数非常有用。如果超出了字符数,我通常会将帖子粘贴到 Notepad++ 中,这样我就能知道我是否已经修剪到足以达到限制。

我见过一些:set ruler有用的建议,但这只会通过当前行上的当前列索引提供字符数。如果我不使用段落分隔符,这会很棒,但我相信你会同意阅读一个段落中的几千个字符并不舒服。

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

我看到有些插件可以添加这个功能,但我还在尝试使用 gVim,在了解它们的作用之前,我不确定是否要加载随机插件。我更喜欢使用 vim 内置的插件,但如果它不存在,那就不存在了。

我应该怎么做才能实现我的目标?如果涉及插件,你会使用它吗?它的效果如何?

答案1

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

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

:!wc -m %

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

map <F4> :!wc -m %<CR>

正如在另一个答案中,您可以将当前文件导入,wc以便考虑未保存的编辑:

:w !wc -m

答案2

:help count-items

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

:%s/./&/gn

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

:echo strlen(@")

(“是未命名的寄存器)

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

 :set statusline=%{strlen(@")}

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

答案3

对mrucci的答案的增强:

您可以在 Linux 上使用wc,而不必先保存文件,方法是直接使用:w以下命令输出:

:w !wc -m

您可以将其映射到mrucci提到的某个东西。

答案4

如果您习惯使用 :w 保存文件,每次执行此操作时,状态都会报告写入的字符数。例如,在这个句子的末尾,我执行了 :w(是的,我使用 gvim 写这个笔记),它报告:已写入 245C。

相关内容