我有以下 txt 文件,经过编辑、重新整理等。所以数字不再正确。
#1. Sometext <andmore>/
/mm
#2. Next block/
1. option x/
3. option s/
#. character <description>/
.option e/
.option d/
...
#104. last entry/
1. option x/
2. option p/
3. option s/
1. option e/
2. option d/
如何在vim中重新编号#[number]。和内部块编号 [1]。即使它们是空的。这样我就得到:
#1. Sometext <andmore>/
/mm
#2. Next block/
1. option x/
2. option s/
#3. character <description>/
1. option e/
2. option d/
...
#105. last entry/
1. option x/
2. option p/
3. option s/
4. option e/
5. option d/
我有一个旧的 vim 函数,应该重新计算“#[number]”。零件...
fun CountUp()
let ret = g:i
let g:i = g:i + 1
return ret
endf
应该由
调用:let i = 1 | %s:sS:\="#" . CountUp() . ". ":g
...但这还没有开始。与我不明白的“sS”有关。
那个
sS
是一个模式,字面意思是字符串 sS
,显然在你的缓冲区中找不到。没有任何理由期望它在这个特定的上下文中做任何事情,更不用说任何有用的事情了。
您应该首先设计一个与用例实际相关的模式,例如:
^\s*\zs#\d\+\.
参见
:help \zs
。
请注意,这适用于
#N
标题,但不适用于子项目。不是因为模式(可以轻松修改以处理两者),而是因为:
CountUp()
函数,也不是整个命令处理递归性,#N
的情况。不过,您可以对每个子项目块执行以下操作一次:
直观地选择子项目。
运行以下命令:
:let i = 1 | '<,'>s/^\s*\zs\d\+/\=CountUp() . "."
请注意,您的“起点”也存在一些严重的格式问题,甚至有一个块缺少数字,这将使事情进一步复杂化。
总而言之,整个事情实际上相对复杂,需要大量的工作来处理越来越多的极端情况。这需要的不仅仅是一句台词。