首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在包含索引向量的一系列行中用名称替换索引。

在包含索引向量的一系列行中用名称替换索引。
EN

Stack Overflow用户
提问于 2015-10-13 17:41:07
回答 2查看 58关注 0票数 1

我有一个文件,它由两个部分(条目和向量)组成,如下所示:

代码语言:javascript
复制
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部分如下:

代码语言:javascript
复制
Vectors
-------
[One,One,Four,One]
[Six,Three,Nine,Eight,Two]
[Five,Seven,Seven,Four,Six,Six]

我只想用Vim来做。

有自动替代索引的方法吗?

索引表示定义项目的行号。

我做了几次尝试,将:s命令与\=line()函数混合起来,以检索该项,但一无所获。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-13 18:00:33

当然,只需一点点Vim脚本就可以了。

代码语言:javascript
复制
:s/\v\d+/\=getline(str2nr(submatch(0)))/g

那是,

  • :s妓女
  • 任意数字序列\v\d+
  • 使用表达式getline(str2nr(submatch(0)))的值(获取整个匹配,将其转换为一个数字,然后获取相应行的内容),
  • 并对行g中的所有匹配进行详尽的处理。

使用可视化模式将替换命令应用于“向量”部分:

代码语言:javascript
复制
:'<,'>s/\v\d+/\=getline(str2nr(submatch(0)))/g
票数 4
EN

Stack Overflow用户

发布于 2015-10-13 18:00:39

您可以使用替代子替换表达式。

首先,创建一个键/值对的字典:

代码语言:javascript
复制
let dict = { '1': 'One', '2': 'Two', '3': 'Three', '4': 'Four', '5': 'Five', '6': 'Six', '7': 'Seven', '8': 'Eight', '9': 'Nine'}

现在,在文本正文上运行替换:

代码语言:javascript
复制
%s/\d/\=get(dict, submatch(0), submatch(0))/g

子替换表达式将通过使用match,dictget()函数查找字典submatch(0)的值。

有关更多帮助,请参见:

代码语言:javascript
复制
:h sub-replace-expression
:h get(
:h dict
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33109181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档