关于规律性代码的输入技巧

先把问题简化一下,假设所有的行都是 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 跳到下一个编辑点的,但是位置信息容易丢失,也就是说整个编辑过程必须一气呵成,稍有差错就不能跳转了。

与其一步到位,不如化整为零实现

  1. 先有一个简单的 snippet,只产生一行 mov data_1+1, #随便写h
  2. 然后粘贴 n 次,比如 10p
mov      data_1+1, #随便写h
mov      data_1+1, #随便写h
...
mov      data_1+1, #随便写h
  1. 有一个产生列状序列的快捷操作,把 1+ 后面的序列替换:
    1                        1
    1         =>             2
  ...                      ...
    1                        n
  1. 再来一个 narrow-to-rectangle,把编辑点占位符矩形区域凸显出来,这样每一行就是一个编辑点, enter 就到了,不必考虑跳转,或出现差错。不过似乎目前没有这么个函数,待我去研究一下。

    虽然还没这个函数,但是可以用 evil-ex-search 来代替。按 / 把所有占位符搜索出来,重复cgn 编辑下一个点(并清除占位符),还能 . 重复上一次操作。

每一小步的操作,都可以应用到日常的其他编辑。或者在日常编辑中早就用到了,现在只需要稍微组合一下。

3 个赞