Answers:
您可以使用gCTRL+g,这将为您提供:
Col 1 of 118-121; Line 1 of 5; Word 1 of 142; Byte 1 of 678
如果您只想获取所选内容的字数,也可以在可视模式下使用它,与文本对象(如)结合使用时,这尤其有用ip
。(例如,您可以vipg<C-g>
用来获取当前段落的字数)。
请参阅::help word-count
和:help text-objects
。
上面的选项可能更好,但是您也可以使用wc
实用程序来计算部分中的单词数。除了使用的:! wc -w %
表格之外,您还可以使用:%!wc -w
。这将过滤运动到外壳工具(在本例%
中为整个缓冲区),但您也可以使用其他范围(例如:1,5!wc -w
前5行,!,+5!wc -w
当前和后5行,等等)。您还可以在可视模式下选择文本,然后键入:!wc -w
以过滤您的选择。
请注意,这会将运动替换为外壳工具的输出,但是您可以u
撤消该操作。
请参阅:help :range!
,
:help range
以及这个答案,在此我将提供更多范围示例。
g<C-g>
这种方式。太棒了!
有两种方法可以实现,即纯vimscript方法和wc
。
您可以使用search and replace命令执行此操作。例如:
:%s/\<\w\{-}\>//gn
这样做不是用某种东西代替给定的模式,而只是计算模式的出现。这是因为有n
标志。要计算特定部分中的字数(在本例中为第5至15行),您可以执行以下操作:
:5,15s/\<\w\{-}\>//gn
这消除了将选择内容放入寄存器的需要。要查看可以替代的更多可能性5-15
,请阅读的帮助主题cmdline-ranges
。如果您想经常执行此操作,最好为其创建一个映射(或命令)。另外,如果已hlsearch
启用,则可能需要:nohlsearch
稍后运行以清除突出显示。
wc
方法使用可以完成相同的操作wc
。您可以使用相同的方式cmdline-ranges
通过:s
命令选择区域,也可以将其与外部命令一起使用。例如:
:5,15!wc -w
这将通过wc
命令运行第5至15行。不利的一面是它用命令的输出替换了该行范围。您可以通过按撤消此更改u
。另请注意,vimscript解决方案可能无法与其他语言一起使用,因为与其他语言中\w
通常的文字字符不匹配。 wc
可能比这个更好\w
。另外,这是一个花哨的命令,可以更快地执行此操作:
command -range=% -addr=lines WordCount execute '<count>!wc -w' | .y a | undo | echo @a
请注意,这会破坏a
寄存器。
看来这也可以在视觉模式下通过g<C-g>
组合键完成。有关此说明,请参见Carpetsmoker的答案。
wc
可能会在语言环境中出现(我不知道GNU是否wc
真的通过这种方式进行处理,GNU工具因其出色的unicode支持而闻名。)
wc
解决方案的一个优点。
对于单词,请使用:
:.,+4 s/\i\+/&/gn
.
表示当前行。
另外,我在.vimrc文件中添加了以下内容:
:cabbrev zzcc s/./&/gn
:cabbrev zzcw s/\i\+/&/g
我可以打字:
:.,+6 zzcw
而zzcw
将扩大到s/\i\+/&/g
该zzcw
仅仅是一个奇怪的名字,将不符合(对我来说)什么。
副作用是整个文件被选中并突出显示。
我希望能够在文件中键入多行推文,确保没有太多字符,然后将推文粘贴到Twitter中。