Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在VI/VIM编辑器中用不同的词替换查找词?_Linux_Unix_Vim_Text Editor_Vi - Fatal编程技术网

Linux 如何在VI/VIM编辑器中用不同的词替换查找词?

Linux 如何在VI/VIM编辑器中用不同的词替换查找词?,linux,unix,vim,text-editor,vi,Linux,Unix,Vim,Text Editor,Vi,例如,我有一个文本, 10 3 4 2 10 , 4 ,10 .... 不,我想用不同的词改变每一个10 我知道%s/10/replace words/gc,但它只允许我像yes/no那样以交互方式进行替换,但我想用不同的单词(如replace1、3、4、2、replace2、4、replace3等)来更改10的每次出现。将10的每次出现替换为替换{index\u of_match}: :let @a=1 | %s/10/\='replace'.(@a+setreg('a',@a+1))/g

例如,我有一个文本, 10 3 4 2 10 , 4 ,10 ....

不,我想用不同的词改变每一个10


我知道%s/10/replace words/gc,但它只允许我像yes/no那样以交互方式进行替换,但我想用不同的单词(如replace1、3、4、2、replace2、4、replace3等)来更改10的每次出现。

10
的每次出现替换为
替换{index\u of_match}

:let @a=1 | %s/10/\='replace'.(@a+setreg('a',@a+1))/g

将每次出现的
10
替换为预定义数组中的一个单词:

:let b = ['foo', 'bar', 'vim'] | %s/10/\=(remove(b, 0))/g

将每次出现的
10
替换为预定义数组中的一个单词以及匹配项的索引:

:let @a=1 | let b = ['foo', 'bar', 'vim'] | %s/10/\=(b[@a-1]).(@a+setreg('a',@a+1))/g
但由于您必须键入任何单词,因此第二个和第三个函数的好处很小。有关“手动”解决方案,请参阅Spoonmiser的答案

更新:如所愿,第二个示例中对regex部分的解释如下:

%
=在文档中的每一行
s///g
=
s
表示执行搜索和替换,
g
表示替换每次出现的事件。
\=
将以下内容解释为代码。
remove(b,0)
删除列表
b
索引0处的元素并返回它

这是第一次。第二次该行将为
%s/10/foo/g
,现在列表仅为
['bar',vim']
,因此该行将为
%s/10/bar/g
,依此类推


注意:这是一个快速的草稿,不太可能是实现它的最好和最干净的方法,如果有人想改进它,请随意添加评论

您想要的单词是否有一个模式,或者您想在每次替换的单词出现时键入每个单词

如果我用不同的单词替换“10”的每个实例,我可能会手动执行:

/10
cw
<type word>ESC
ncw
<type word>ESC
ncw
<type word>ESC
/10
连续波
电子稳定控制系统
ncw
电子稳定控制系统
ncw
电子稳定控制系统

如果每个单词都不一样,而且必须单独键入,这似乎不太繁重。

如果每个替换单词都不一样?谢谢男人:)好的,谢谢兄弟,我是第六语言的新手,所以如果你能详细说明这条命令中使用的每一个术语,那就太好了。这三个术语中哪一个是?你熟悉编码吗?然后你应该能够找到它的作用(是一个很好的来源,或者谷歌),如果不是,那就有很多要解释了。我建议首先学习vim的用法。但一旦你们对这里的一部分命令有了具体的问题,我很乐意在你们创建的第三个数组中帮助你们,对吗?但是我想知道第三个例子中关于regex的更多信息是的,它是vimscript中的一个列表,不是一个数组,但是对于这个例子,它是相同的。我已经在答案中给出了解释。这会在我的案例中产生错误,并说“E486:找不到模式:10cw:@rcShahi这是因为它的意思是
/10cw
。这很容易忘记,因为vimuser很清楚您正在搜索10。在所示的示例中,替换词有递增的数字,您需要的是随机替换还是随机替换?