我有一个文件,它由两个部分(条目和向量)组成,如下所示:
One
Two
Three
Four
Five
Six
Seven
Eight
Nine
Vectors
-------
[1,1,4,1]
[6,3,9,8,2]
[5,7,7,4,6,6]我想修改Vectors部分如下:
Vectors
-------
[One,One,Four,One]
[Six,Three,Nine,Eight,Two]
[Five,Seven,Seven,Four,Six,Six]我只想用Vim来做。
有自动替代索引的方法吗?
索引表示定义项目的行号。
我做了几次尝试,将:s命令与\=line()函数混合起来,以检索该项,但一无所获。
发布于 2015-10-13 18:00:33
当然,只需一点点Vim脚本就可以了。
:s/\v\d+/\=getline(str2nr(submatch(0)))/g那是,
:s妓女\v\d+getline(str2nr(submatch(0)))的值(获取整个匹配,将其转换为一个数字,然后获取相应行的内容),g中的所有匹配进行详尽的处理。使用可视化模式将替换命令应用于“向量”部分:
:'<,'>s/\v\d+/\=getline(str2nr(submatch(0)))/g发布于 2015-10-13 18:00:39
您可以使用替代子替换表达式。
首先,创建一个键/值对的字典:
let dict = { '1': 'One', '2': 'Two', '3': 'Three', '4': 'Four', '5': 'Five', '6': 'Six', '7': 'Seven', '8': 'Eight', '9': 'Nine'}现在,在文本正文上运行替换:
%s/\d/\=get(dict, submatch(0), submatch(0))/g子替换表达式将通过使用match,dict的get()函数查找字典submatch(0)的值。
有关更多帮助,请参见:
:h sub-replace-expression
:h get(
:h dicthttps://stackoverflow.com/questions/33109181
复制相似问题