我有一个产生这样的输出的工具 -
(check (= Start
(+ (if (<= takeA giveA) 0 1)
(if (<= takeB giveB) 0 1)
(if (<= takeC giveC) 0 1)
(if (<= takeD giveD) 0 1))))
(check (and (>= takenBefore_A 0) (<= takenBefore_A 4)))
(check (and (>= givenBefore_A 0) (<= givenBefore_A 4)))
(check (= risk_A
(+ Start 1 (- takenBefore_A givenBefore_A))))
(check (= takenBefore_A
(+ (if (<= takeB takeA) 1 0)
(if (<= takeC takeA) 1 0)
(if (<= takeD takeA) 1 0))))
(check (= givenBefore_A
(+ (if (<= giveA takeA) 1 0)
(if (<= giveB takeA) 1 0)
(if (<= giveC takeA) 1 0)
(if (<= giveD takeA) 1 0))))
(check (and (>= takenBefore_B 0) (<= takenBefore_B 4)))
(check (and (>= givenBefore_B 0) (<= givenBefore_B 4)))
(check (= risk_B
(+ Start 1 (- takenBefore_B givenBefore_B))))
(check (= takenBefore_B
(+ (if (<= takeA takeB) 1 0)
(if (<= takeC takeB) 1 0)
(if (<= takeD takeB) 1 0))))
(check (= givenBefore_B
(+ (if (<= giveA takeB) 1 0)
(if (<= giveB takeB) 1 0)
(if (<= giveC takeB) 1 0)
(if (<= giveD takeB) 1 0))))
(check (and (>= takenBefore_C 0) (<= takenBefore_C 4)))
(check (and (>= givenBefore_C 0) (<= givenBefore_C 4)))
(check (= risk_C
(+ Start 1 (- takenBefore_C givenBefore_C))))
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的输出 -
(check (= Start (+ (if (<= takeA giveA) 0 1) (if (<= takeB giveB) 0 1) (if (<= takeC giveC) 0 1) (if (<= takeD giveD) 0 1))))
(check (and (>= takenBefore_A 0) (<= takenBefore_A 4)))
(check (and (>= givenBefore_A 0) (<= givenBefore_A 4)))
(check (= risk_A (+ Start 1 (- takenBefore_A givenBefore_A))))
(check (= takenBefore_A (+ (if (<= takeB takeA) 1 0) (if (<= takeC takeA) 1 0) (if (<= takeD takeA) 1 0))))
(check (= givenBefore_A (+ (if (<= giveA takeA) 1 0) (if (<= giveB takeA) 1 0) (if (<= giveC takeA) 1 0) (if (<= giveD takeA) 1 0))))
(check (and (>= takenBefore_B 0) (<= takenBefore_B 4)))
(check (and (>= givenBefore_B 0) (<= givenBefore_B 4)))
(check (= risk_B (+ Start 1 (- takenBefore_B givenBefore_B))))
(check (= takenBefore_B (+ (if (<= takeA takeB) 1 0) (if (<= takeC takeB) 1 0) (if (<= takeD takeB) 1 0))))
(check (= givenBefore_B (+ (if (<= giveA takeB) 1 0) (if (<= giveB takeB) 1 0) (if (<= giveC takeB) 1 0) (if (<= giveD takeB) 1 0))))
(check (and (>= takenBefore_C 0) (<= takenBefore_C 4)))
(check (and (>= givenBefore_C 0) (<= givenBefore_C 4)))
(check (= risk_C (+ Start 1 (- takenBefore_C givenBefore_C))))
Run Code Online (Sandbox Code Playgroud)
我使用以下命令VIM生成必要的输出,具体取决于我想要加入的行数 -
:.,+3join
Run Code Online (Sandbox Code Playgroud)
我想知道,如果我可以自动执行此操作而不是手动执行此操作.这里的关键点是,在每一行上,打开的括号数量将等于关闭的括号数量.
我的看法:
qqqqqv%:join
j@qq@q
Run Code Online (Sandbox Code Playgroud)
使用join而不是J解决Daan的答案中的单行问题.
一步步:
qqq 清除'q'宏(以避免与以前的宏定义纠缠在一起)q 开始录音q 声明它是我们录制的'q'宏v 用于视觉标记% 跳到匹配的大括号: 对于命令模式,作用于当前标记的区域join (加上ENTER)加入线条j 走下一条线@q 调用'q'宏(递归)(如果我们先没有清除它,我们将在这里调用旧的定义,这不是我们想要的)q 结束录音@q执行宏,它将在文件结束时停止(当j移动错误时)请原谅丰富q的.我承认把它放在j更直观的地方,但我总是使用这样q的即发即弃宏,因为它使得初始的clear-and-record(qqqqq)很容易记住(并且因为大多数其他键已经有了宏他们).:-)
编辑:刮开最后一段.我喜欢像疯子一样反复敲击同一把钥匙.;-)