猫态编辑:Meow

如果单单这个操作是不是选一下然后 query-replace 比较好。这个只是恰好 : 是对齐的情况,如果 : 不对齐的话,就只有搜索来修改了。

或者可以通过 meow-kmacro-matches 来执行,他需要个 regexp-search-ring 的内容,可以用 C-M-s 搜索 :,然后 <f3>aprint<esc><f4>,之后用 meow-kmacro-matches 来重放,但是只能用 narrow-to-region 来控制范围。


我最近还有一个想法就是通过 kmacro 来自己实现一个多光标,不是实时的多光标,大概方式是先通过一些规则创建一批光标,然后就自动开始了 kmacro 录制,光标在第一个光标的位置,在录制完成的时候应用到所有的光标的位置。

不想要 multiple-cursors 的问题是这东西和好多插件的兼容性不好,而且光标多了非常卡。宏操作的时候不会卡,而且重放的时候可以关闭一些效果来提升速度。

这个场景和query-replace的场景还不太一致,大部分情况其实都不能够搜索的,但却是可以对齐的。比如想删掉orgmode表格中的几个小格子。 image

这里vim的方法也不太好使,但比较直观,vim可以很方便的列编辑删掉或者增加一些一些竖向的"|",这里倒不是想拿native的meow和繁重的vim比,只是这个东西确实不仅仅是习惯,省心很多,我认为是个比较高效的功能

感觉多光标的实用性不是很好,因为一个一个选择就比较麻烦,这种散在各处的,我倾向于搜索结果然后编辑的方法,也就是query-replace之类的, 目前meow已经做的很好了,比如mark之后全部替换,我觉得理念比vim和emacs都好很多

如果是 Vim 的 C-v 之后想避免一个一个选择,大概就需要 N j/k 或 N G 的方式。换到 meow 里面来,能用数字来重复的只有选择区域或第二选择区域。

如果在第二选择区域里面自动的生成多光标,你觉得怎么样。

aoeu  [oeu:▯ aoeu
  aoeu aoe:▯
aoeu  aoeu:▮aoeu]

比如说 [ ] 代表 secondary selection,然后当你的光标在里面的时候,跟据移动的情况来生成假光标。比如左右移动的时候就是列的(产生上面的效果),如果 mark 的时候就是范围内所有一样的,甚至还可以有其它的方式。

  1. 不再需要额外快捷键,而且可以有更多选择方式。kmacro-lines/matches 都可以去掉了
  2. 无明显规律的多行一组可以直接选出来(比如 secondary-selection 里面,你做一个三行的普通选择),后面就可以跟据这个选择生成每三行一个的假光标
  3. 总是可以事先确定影响的范围,不需要 narrow
  4. 满足别的地方的宏可以拿来用或这里的宏用在别的地方,不需要存列数之类的额外状态
  5. 这样甚至可以和鼠标搭配,alt+选择会产生 secondary selection

(只是个想法,还没有细想)

1 个赞

太厉害了,这个逻辑我理了好一会才明白实际的用途。我觉得这个想法很通用,很神奇

还需有想明白细致的规则,才能动手.等我回头在这个贴里发一下我的想法.

主要是什么时候开始录制,什么时候应用,最少需要几个命令等等.

我可能把问题弄得复杂化了,其实并不是vim这个功能有多强大,或者是可以多精确地实现操作,我觉得好使的主要原因可能是因为方便,可以很方便的修改,很方便的删除, 随便几行代码中添加一些注释符号或者整体添加缩进都很快,相比调用专门的命令少了心智负担。给一段文字加个+号然后变成无序列表;删除几行中的部分文字,然后简单手动调整一下剩下的文字。 这个命令的关键是快,不需要打断思考我要怎么做怎么做,直觉就能完成,不影响正事

我用了很久的vim,这个命令对我个人来讲不是替换或者搜索命令,也不是录制宏之类的需要先想一下我怎么录,更像是左右移动dw这种基本修改命令,在无需中断思考的情况下完成结果。meow的宏很简约但很强大,可以实现非常丰富的功能,就是需要多思考怎么组合,可能是我目前用的还不多,没有潜移默化,有时需要停下来想想我应该怎么操作,就影响了工作思路

准确的命令和低思考的命令有时可能是反向的,因为高效准确的操作可能是反直觉的。行的宏编辑有点反直觉,因为我往往是改着改着突然觉得这里需要修改一下,这时很自然的开始录制宏,如果需要先到行首start录制,然后跳回要修改的地方再改就比较反直觉。这种做法的好处是可以修改任意的行,连续的行间隔的行,甚至过了一会突然觉得还有一行需要修改也能用,这是vim无法完成的。meow的做法精确而稳定

我打算继续适应meow,尽可能放弃固有的vim的思考方式,现在越发喜欢meow的设计理念了。期待狗哥后续的作品,一定很神奇

对常年用vim的人,到行首不能用0会觉得略有不便么?我刚开始试用meow

相当不适应,现在只能两个键还需要反应一下我应该反向输入了。有时想去行首输入,手快输入大字的“I”直接跑到上一行去了。

我改了挺多东西,把ox这两个键改的和vim一样,减轻了一些问题。另一个,meow的kill命令是emacs的风格,用惯了dw dd等,现在很容易误删除很多东西

还有一些不容易适应的地方,比如meow没有vim的“.”这样的逻辑,虽然有个repeat但目的完全不一样。我是重度“.”使用者,现在有时比较痛苦。好处是省掉了大量的额外键位绑定,维护负担低很多,也一下子去掉了一堆evil包

把“g”改成和vim类似的一个keymap,现在我gc gd这些常用命令也能用

我尽量在找一个平衡

我是可以 meow 原生emacs vim 无缝切换。。

你到了行首之后,应该还有其它要做的操作吧.这样的话也就不是一个键了.

可以忘掉VIM 尽量按照meow的逻辑来编排。

移动到行首,比如要删除一个单词或者粘贴一些东西,主要是两个离得比较远的键做一次反向操作,有一点不合直觉,但我觉得习惯了就好了

我认为灵活的meow并没有限制按键排布,也就没有所谓的针对meow按键的排布制定逻辑,包括hjkl之类的更多是vim的逻辑,npfb是emacs地逻辑,这里是meow灵活和强大兼容性的体现。换句话说,逻辑应该是用户寻找最合适或者最高效,或者是心智负担最低的方式,比如把expand相关的放在同一个键上。

遇到个问题, 按SPC m之后等一下出现。如果SPC m x按得够快就不出现

Wrong type argument: symbolp, (closure ((binding . digit-argument) (kdesc "M-9") (kmap keymap #^[nil nil keymap #^^[3 0 set-mark-command move-beginning-of-line backward-char mode-specific-command-prefix delete-char move-end-of-line forward-char keyboard-quit help-command ...] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] self-insert-command self-insert-command self-insert-command self-insert-command self-insert-command ...] (S-down . windmove-down) (S-up . windmove-up) (S-right . windmove-right) (S-left . windmove-left) (C-f5 . quickrun) (C-f9 . bongo) (f7 . olivetti-mode) ...) (key . [134217785]) (name . "M-9") (n . 8) (--dotimes-counter-- . 9) (--dotimes-limit-- . 9) t) nil (interactive) (aw--select-window (1+ n))) Mark set [2 times]

在我理解的狗哥设计思路中,他解决的不是一个按键排布逻辑问题。meow看重的是如何高效的做成一件事,只要结果是我要的,那么过程是宏录制还是搜索替换,是列编辑还是第二选区都不重要。昨天和狗哥讨论编辑的问题,狗哥并没有陷入这个循环,反而是给出了一种看起来更通用的方法,不仿制什么修改流程,而是关注如何达到用户想要的修改目标。换句话说,meow在做的是功能,是api,用户自己决定怎么在需要的时候组合

以上是我对于meow的粗浅理解,人菜话多大家别放心上。我彻底投入了meow,并强烈推荐大家都试试meow