先把问题简化一下,假设所有的行都是 data_1+n
形式,需要解决的是两个问题:
mov data_1+{SEQ_1}, #{VAL_1}h
mov data_1+{SEQ_2}, #{VAL_2}h
mov data_1+{SEQ_3}, #{VAL_3}h
...
mov data_1+{SEQ_n}, #{VAL_n}h
| |
| '----- 问题2. 编辑位置跳转(编辑完 val_n 之后快速跳至下一个编辑点)
|
'--------------- 问题1. 生成递增序列
问题 1
递增序列有很多方法可以产生。
问题 2
比较麻烦的是编辑位置跳转,当编辑完位置1的时候:
mov data_1+1, #13h
mov data_1+2, #{VAL_2}h
...
要怎么快速跳到 ${VAL_2}
进行编辑,并且同时消除占位符。即使没有占位符,想要把光标移到下一行的 #h
之间也是需要按不少键:
.--- 光标在这里
|
mov data_1+1, #13|h
mov data_1+2, #|h
|
'----- 移到这个位置
即便是 yasnippet command (注意是 command 才能产生动态数目的行) 或者 emmet (例如 div*7
展开产生 7 个 <div>{PLACE_HOLDER}</div>
,也没办法处理好这个问题。
yasnippet 本来是可以按 tab 跳到下一个编辑点的,但是位置信息容易丢失,也就是说整个编辑过程必须一气呵成,稍有差错就不能跳转了。
与其一步到位,不如化整为零实现
- 先有一个简单的 snippet,只产生一行
mov data_1+1, #随便写h
- 然后粘贴 n 次,比如
10p
mov data_1+1, #随便写h
mov data_1+1, #随便写h
...
mov data_1+1, #随便写h
- 有一个产生列状序列的快捷操作,把
1+
后面的序列替换:
1 1
1 => 2
... ...
1 n
-
再来一个
narrow-to-rectangle
,把编辑点占位符矩形区域凸显出来,这样每一行就是一个编辑点, enter 就到了,不必考虑跳转,或出现差错。不过似乎目前没有这么个函数,待我去研究一下。虽然还没这个函数,但是可以用
evil-ex-search
来代替。按 / 把所有占位符搜索出来,重复cgn 编辑下一个点(并清除占位符),还能 . 重复上一次操作。
每一小步的操作,都可以应用到日常的其他编辑。或者在日常编辑中早就用到了,现在只需要稍微组合一下。