加了一个 Case 7 来描述 secondary-region 的用法, 再次感谢大佬的强力补丁!
我觉得 rect mark 的定位有点尴尬?像 readme 里面的 case 4 和 case 5 完全可以用 mark-lines 来实现,其他矩形操作也可以用 emacs 自带的 rect 命令 + secondary region 替换
还是不一样的, mark-lines 的开始是行首, 但是 rect mark 的开始是列, 细微场景还是不一样的。
@manateelazycat 所以可以交给 secondary-region 来做,因为两者都是先选定一个区域再操作,功能上感觉有重叠。而且选择矩形区域有内置的 rectangle-mark-mode
,选择后设为 secondary region,然后就可以用其他操作了,这样更通用。
比如
不一样的, markmacro-rect-set 设置好以后, markmacro-rect-mark-symbols 是标记不同行当前列的符号(这里的符号不一定是同样名字的, 只要光标范围够到就算)。 这个场景主要是快速标记一些列位置特征的符号或者矩形范围。
而 secondary-region 和 markmacro-secondary-region-mark-cursors 是基于 search-forward 去找的相同对象。 这个场景主要是针对选中区域进行内相同的字符串进行二次标记。
看来还是代码写少了,想法不够成熟
矩形范围和 region (secondary-region 其实和 region 范围一样, 只是方便二次标记)的区域和场景还是有细微的差别的。
没事, 现在多重模式是不冲突的, markmacro 本质是解决数据清理场景下的效率问题(没有这种标记后宏展开的操作, 很多时候都要各种按 query-replace, 操作复杂)。
至于以后什么是最佳实践, 交给时间慢慢进化吧。
猫大我想了下还是觉得可以用 secondary region 来做,您有空的话帮我看看有没有问题:
我对 mark-lines 稍微做了点修改,让它可以识别 secondary-region
下面是 secondary-region + mark-lines 的效果 (高亮一行和高亮当前列的符号是没有区别的,因为是宏编辑)
这样场景就和 rect mark 一样了,按键数也差不多。
而如果想要选择矩形范围内的同名符号的话,就可以用 scondary-region-set + secondary-region-mark-cursors 。
同时 markmacro-rect-delete
、markmacro-rect-replace
、markmacro-rect-insert
等操作也可以用上述基本操作完成,这样就进一步降低了心智负担,而因为都是宏编辑,markmacro-rect-mark-columns
和 markmacro-rect-mark-symbols
其实是一样的
大佬上补丁吧,更少的命令实现更多的功能,强烈支持啊。
已提 PR,试了下,markmacro-rect-
相关命令全部可以用基本操作完成,按键数也没有太大变化。
也就是说不需要 mark-macro-rect-mark-set 这样的命令了?
markmacro-rect-set
+ markmacro-rect-delete
=> rectangle-mark-mode
+ DEL
markmacro-rect-set
+ markmacro-rect-replace
=> mark region + markmacro-mark-lines
markmacro-rect-set
+ markmacro-rect-insert
=> mark-region + markmacro-mark-lines
markmacro-rect-set
+ markmacro-rect-mark-columns
=> mark-region + markmacro-secondary-region-set
+ markmacro-mark-lines
mark-region 可以是任何 region mark 命令。
猫大可以试试。
补丁已经合并了, 但是 markmacro-rect-set 和矩形操作的命令, 我觉得你没有理解。
体验一下这个插件 lazycat-emacs/rect-mark.el at 060ecf0986867c0e691fc2ed2844451856316e4e · manateelazycat/lazycat-emacs · GitHub 的命令吧。
矩形操作的替换和删除都是针对矩形选中区域的, 不能等同于 markmacro-mark-lines 操作。
补丁里面,在有矩形选中区域的时候, markmacro-mark-lines
就限定了矩形区域。
矩形操作的关键是, mark 操作以后, mark 的区域是一个矩形, 而不仅仅是行数的范围限定。
你先操作一下矩形操作, 对比一下就知道我说的意思了。
你 gif 这个操作我无法复现, 我每次执行 markmacro-mark-lines 都只是 secondary-region 函数范围内的行选择, 没法变成你 gif 这种矩形选择。
-
rectangle-mark-mode
(C-x spc) 进行矩形选区 markmacro-secondary-region-set
markmacro-mark-lines
这个补丁有个 bug , markmacro-secondary-region-set
后默认是矩形操作,我刚准备提交 fix。
我的意思是, 你都 rectangle-mark-mode 标记了, 为啥又要 markmacro-secondary-region-set 然后在 markmacro-mark-lines?
原来的操作是: markmacro-rect-set 后, 直接 markmacro-rect-mark-columns 就好了。
为啥还要引入 secondary-region-set ?
markmacro-secondary-region-set 其实只对 markmacro-secondary-region-mark-cursors 有用啊, secondary-region 叠加 rect 只会让事情更加复杂啊?
因为可以做这个或其他操作,不过 markmacro-secondary-region-set
可以融入 markmacro-mark-lines
,这样在用户层面操作是一致的。
可能是我的理解不对,先提前抱歉。