我是前天晚上看了一下 Meow 的文档描述, 前天睡觉之前想了想, 昨天下午自己重新写了一个, 没有参考 Meow 的源码。
grab 那个我觉得就是 mark-symbols 或者 mark-word 的概念, 如果只从 Meow gif 展示的效果, markmacro 已经覆盖到功能了。
我是前天晚上看了一下 Meow 的文档描述, 前天睡觉之前想了想, 昨天下午自己重新写了一个, 没有参考 Meow 的源码。
grab 那个我觉得就是 mark-symbols 或者 mark-word 的概念, 如果只从 Meow gif 展示的效果, markmacro 已经覆盖到功能了。
两个 case: 1.
return_type_t function_a(type1 arg1, ...) {
blabla..
}
loooooong_return_type_t function_b(type2 arg2) {
...
}
=>
return_type_t function_a(common_type arg, type1 arg1, ...) {
blabla..
}
loooooong_return_type_t function_b(common_type arg, type2 arg2) {
...
}
enum op_type_t {
IO_PROCESS,
TRIM_PROCESS,
CLEAN_PROCESS,
IO_RESERVE,
TRIM_RESERVE,
CLEAN_RESERE
};
=>
enum op_type_t {
PROCESS_IO,
PROCESS_TRIM,
PROCESS_CLEAN,
RESERVE_IO,
RESERVE_TRIM,
RESERVE_CLEAN
}
这两个是我在实际编码中遇到的情况,肯定不算高频场景,但是恰好遇到了用 meow 的 beacon 解决起来还是十分顺畅的
第二个 markmacro 的操作很简单:
搞定
第一个如果要加 common_type arg , Meow 要怎么操作啊? 没有看懂。
其实是个 work around
loooooong_return_type_t function_b(type2 arg2) {
... 2. 两次 backward-sexp 到这里 ^
} <- 1. 搜索 "\n}\n" 让 cursor 落在函数定义的右括号后
恰恰是在这种场景下用骚操作达到了目的之后就能心情愉快好一阵
简单录了个 gif。
批量编辑的重点是将光标快速定位到想编辑的地方,然后录制 kmacro 并应用。
单纯这个例子来说并不通用,因为给不同函数加上相同的参数本身就不那么符合直觉。
只是在思路并不清晰的情况下快速糊一个实现时才会用到。
你这个标记的对象单位是中括号?
不是,我标记的是第三行和第六行的 }
因为只有函数定义的右括号能准确地定义到函数体,然后才能结构化地跳转到参数列表。
有 tree sitter 的话应该就能直接选中函数定义了。
你是按啥按键一次标记两处的?
是meow-search。
当处于 beacon 状态时使用搜索会自动标记搜索命中的地方。
在添加函数参数的例子中我搜索的是 }
这个高级啊,那你应该搜索 ( 呀
不能保证函数体内没有 (
啊,所以单独处在一行的 }
适合用来定位。
嗯,感觉有更精准的玩法。
我可能对 markmacro-rect-mark-symbols
这个名字有什么误解,我以为它是 mark 矩形选框中所有同名 symbols ,但实际是这样的
我想要的是下面的效果(参考 Meow 糊的)
那是对矩形列周围的symbol做标记,一直没明白meow那种标记有啥用?
我的理解是更方便高效的 mc/mark-all-in-region
,在一个 region 里面可视化地宏编辑。
我的意思是 Meow 这种两行选中, 标记其中相同的单词进行宏这个我能够理解。
但是实际的应用场景是啥呢? 我不明白这样设计有啥用, 能否举一个实际上的例子呢?
只对一个区域内某个名字重命名的时候就很方便,我以前用的是 mc/mark-all-in-region
,慢不说,匹配还要自己输入。
但是, 你要刚好单词在光标处才能够的着啊, 如果要重命名的单词在矩形里面呢?
跳过去啊,区域用的 secondary-selection-from-region
,一直保留的。
上面的 gif 中光标就不在 foo 上。