Ram*_*uri 3 unix linux vi vim text-editor
例如,我有一个文本 , 10 3 4 2 10 , 4 ,10 ....
不,我想用不同的词来改变每 10 个
我知道 %s/10/replace-words/gc 但它只让我像 yes/no 一样进行交互替换,但我想用不同的单词来更改 10 的每次出现,例如 Replace1, 3, 4 , 2 , Replace2, 4, Replace3 。 ...
将每次出现的 替换10
为replace{index_of_match}
:
:let @a=1 | %s/10/\='replace'.(@a+setreg('a',@a+1))/g
Run Code Online (Sandbox Code Playgroud)
将每次出现的 替换10
为预定义数组中的单词:
:let b = ['foo', 'bar', 'vim'] | %s/10/\=(remove(b, 0))/g
Run Code Online (Sandbox Code Playgroud)
将每次出现的 替换10
为预定义数组中的单词以及匹配的索引:
:let @a=1 | let b = ['foo', 'bar', 'vim'] | %s/10/\=(b[@a-1]).(@a+setreg('a',@a+1))/g
Run Code Online (Sandbox Code Playgroud)
但由于无论如何您都必须输入任何单词,因此第二个和第三个功能的好处微乎其微。有关“手动”解决方案,请参阅 SpoonMeiser 的答案。
更新:如所愿,第二个示例中正则表达式部分的解释:
%
= 在文档中的每一行
s/<search>/<replace>/g
=s
表示进行搜索和替换,g
表示替换所有出现的内容。
\=
将以下内容解释为代码。
remove(b, 0)
删除列表索引 0 处的元素b
并返回它。
所以对于第一次出现。该行将是%s/10/foo/g
第二次,该列表现在只是['bar', 'vim']
所以该行将是%s/10/bar/g
等等
注意:这是一个快速草稿,不太可能是实现它的最佳和最干净的方法,如果有人想改进它,请随时添加评论
归档时间: |
|
查看次数: |
1099 次 |
最近记录: |