vim,是否可以在文本中每次重复单词时在单词旁边添加递增的数字?
vim, is it possible to add increasing numbers next to words each time the words are repeated in a text?
假设我有一个包含以下内容的文本文件:
ABRADER AH B R EY D AH
ABRADER AH B R EY D AH R
ABRADERS AH B R EY D AH Z
ABRADES AH B R EY D Z
APRIL EY P R AH L
APRIL EY P R AH
APRIL EY AH P R AH
我想执行一个 vim 命令来查找重复项并在每个重复的单词中添加一个计数器(在括号内),但它只检查每行中的第一个单词。在当前示例中,生成的文本应为:
ABRADER AH B R EY D AH
ABRADER(2) AH B R EY D AH R
ABRADERS AH B R EY D AH Z
ABRADES AH B R EY D Z
APRIL EY P R AH L
APRIL(2) EY P R AH
APRIL(3) EY AH P R AH
这转向了外部 awk
来完成这项工作。命令执行后格式可能乱七八糟(空格数)。但它会以所需格式为您提供出现次数。
%!awk 'a[]++{="("a[]")"}7'
对齐可以通过其他插件或者vim-fu来完成,如果你喜欢的话也可以用awk来完成,但是代码会比上面的长。
这是一个纯粹的 Vim 解决方案,以@Kent 的 awk
解决方案为蓝本(为了便于阅读,这里将一行分成多行):
let d = {} |
\ global/^\S/
\ let cw = expand('<cword>') |
\ let d[cw] = get(d, cw, 0) + 1 |
\ if d[cw] > 1 |
\ execute 'normal! elgR(' . d[cw] . ')' |
\ endif
它计算第一个单词的出现次数(<cword>
;:global
将光标放在每个非空行的开头(^\S
)),并使用gR
在不影响现有对齐方式的情况下追加计数。
假设我有一个包含以下内容的文本文件:
ABRADER AH B R EY D AH
ABRADER AH B R EY D AH R
ABRADERS AH B R EY D AH Z
ABRADES AH B R EY D Z
APRIL EY P R AH L
APRIL EY P R AH
APRIL EY AH P R AH
我想执行一个 vim 命令来查找重复项并在每个重复的单词中添加一个计数器(在括号内),但它只检查每行中的第一个单词。在当前示例中,生成的文本应为:
ABRADER AH B R EY D AH
ABRADER(2) AH B R EY D AH R
ABRADERS AH B R EY D AH Z
ABRADES AH B R EY D Z
APRIL EY P R AH L
APRIL(2) EY P R AH
APRIL(3) EY AH P R AH
这转向了外部 awk
来完成这项工作。命令执行后格式可能乱七八糟(空格数)。但它会以所需格式为您提供出现次数。
%!awk 'a[]++{="("a[]")"}7'
对齐可以通过其他插件或者vim-fu来完成,如果你喜欢的话也可以用awk来完成,但是代码会比上面的长。
这是一个纯粹的 Vim 解决方案,以@Kent 的 awk
解决方案为蓝本(为了便于阅读,这里将一行分成多行):
let d = {} |
\ global/^\S/
\ let cw = expand('<cword>') |
\ let d[cw] = get(d, cw, 0) + 1 |
\ if d[cw] > 1 |
\ execute 'normal! elgR(' . d[cw] . ')' |
\ endif
它计算第一个单词的出现次数(<cword>
;:global
将光标放在每个非空行的开头(^\S
)),并使用gR
在不影响现有对齐方式的情况下追加计数。