首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vim宏:递增非连续行上的数字

Vim宏:递增非连续行上的数字
EN

Stack Overflow用户
提问于 2012-01-19 00:46:32
回答 3查看 1.2K关注 0票数 6

我正在处理一个YAML文件,它有一个整数作为ID,它每4-6行出现一次。我希望在这个文件的中间添加一条记录(为了可读性),以保持顺序编号的完整性。

文件格式如下。有什么想法吗?

代码语言:javascript
复制
- id: 1
  type: string
  option: diff_string
  other: alt_string   // note: 'other' option does not appear for all records

- id: 2
  type: string
  option: diff_string

//new record would go here as id: 3, increasing id: # of all following records by 1

- id: 3
  type: string
  option: diff_string
  other: alt_string
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-19 01:07:18

我相信您可以通过将计数器(此处: variable g:I)设置为1来实现您想要的结果:

代码语言:javascript
复制
let g:I=1

然后在与^- id: \d\+$匹配的每一行上执行替换

代码语言:javascript
复制
%g/^- id: \d\+$/ s/\d\+/\=g:I/|let g:I=g:I+1

替代方法使用\= (请参阅:help sub-replace-expression)将\d\+替换为g:I的实际值。在替换之后,计数器递增(let g:I=g:I+1)。

使用g/^- id: \d\+$/,您可以确保只在与^- id: \d\+匹配的行上执行替换。

编辑如果要为其创建地图,可以将以下代码片段放入.vimrc中:

代码语言:javascript
复制
nnoremap resync :let g:I=1<CR>:%g/^- id: \d\+$/ s/\d\+/\=g:I/\|let g:I=g:I+1<CR>

它允许通过在正常模式下键入resync来重新同步您的ids。

注意使用\|进行转义,以及在需要按enter键的地方使用<CR>

票数 6
EN

Stack Overflow用户

发布于 2012-01-19 00:50:24

为了从光标行+1开始递增所有后续in:

代码语言:javascript
复制
:.+1,$g/^- id: \d\+$/exec 'normal! 0' . nr2char(1)

(nr2char(1)就像是按CTRL-A键)。

您还可以执行以下操作:

代码语言:javascript
复制
:.+1,$g/^- id: \d\+$/normal! 0^A

在其中输入^A,按CTRL-V,然后按CTRL-A。请注意,我更喜欢第一个版本:您可以复制-粘贴它,代码中没有文字控制字符。

详细信息:

  • .+1,$是从下一行到文件末尾的范围。:help range.
  • :g命令在遵守模式的所有行上运行。与之相反的是:v:help :g
  • /^- id: \d\+$/匹配一行开头的- id:,后跟一个或多个数字,然后是行尾(:help pattern)
  • :normal!播放常规命令:0转到行首,按CTRL-A递增下一个数字。

如果你想要一个映射:

代码语言:javascript
复制
nnoremap <F1> :.+1,$g/^- id: \d\+$/exec 'normal! 0' . nr2char(1)<enter>

把它放到你的vimrc中,现在享受在正常模式下按F1键,并观察光标行下面的所有in递增。

票数 3
EN

Stack Overflow用户

发布于 2012-01-19 10:25:43

我将使用以下简短而直接的替换命令。

代码语言:javascript
复制
:,$s/^- id: \zs\d\+/\=submatch(0)+1/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8913958

复制
相关文章

相似问题

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