我为什么要另开发一套模式编辑?

我先试一下grab,这个和pop的配合我还不太熟悉,我觉得meow是一个很神奇的按键方式,用起来慢慢就体会到设计者的思路,有一种“哦,这里果然是这样设计的,真妙”的感觉

这个感觉应该来源于尽可能统一的设计,我也不太希望meow因为一些小功能破坏了一致性

我对于直接使用 mark 的各种机制还不是很了解,我的理解是:

emacs 有内置的 mark-ring, 有内置的 pop-to-mark-command (这个命令可以在一个文件里面的多个 mark 之间跳) 和 pop-global-mark C-x C-@(可以在多个文件间跳,大概每个文件只取一个 mark)。

不过因为 meow 经常激活选择的原故,所以 pop-to-mark-command 就不是很实用了。

能用 mark-ring 的话还是最好的,像 meow-visitmeow-search 就都是用的内置的 regexp-search-ring

meow-grab 的话是用的 emacs 内置的 secondary selection, 这个第二选择区域你也可以使用 Alt + 鼠标左键选择出来,(可以是区域也可以单击一下只是个位置)。这个选择区域不和你的光前光标位置关联,使得 meow-swap-grabmeow-sync-grab 做能支持两个选择区域的交互操作。

我使用下来感觉meow的一个亮点在于将选择,扩展选择和移动巧妙的融合在一起, 极大减少了选择状态的切换. 有些命令一开始有点小惊奇, 随后又觉得非常合理. 比如s命令,智能删除到尾. 还有命令的正交性,以及几乎不使用修饰键等.感觉这就是目前我想要的模式编辑,真棒.和我第一次发觉ruby时的感受类似.对楼主过人的智慧和乐于分享的精神表达深深的敬意.

1 个赞
(defun meow-iedit()
  (interactive)
  (if (secondary-selection-exist-p)
      (progn(meow--cancel-second-selection)
            (meow--cancel-selection))
    (let* ((bounds (bounds-of-thing-at-point 'symbol))
           (start (car bounds))
           (end (cdr bounds)))
      (if (region-active-p)
          (meow--push-search (buffer-substring-no-properties
                              (region-beginning)(region-end)))
        (meow--push-search (buffer-substring-no-properties start end))
        (goto-char start))
      (save-mark-and-excursion
        (set-mark (point-max))
        (goto-char (point-min))
        (meow-grab))
      (call-interactively #'meow-search))))

写了一个函数,实现iedit-mode 的功能 ,其实现逻辑是 调用 meow-grab 后 使用meow-search 搜索光标下的symbol ,然后对光标下的symbol 的修改 会同步修改其他匹配的symbol

一些边界情况处理的不好,如光标下没有symbol时。

直接用 meow mark symbol 呢

这段代码除了能处理symbol ,还能先选择一段要修改的内容,再调用此函数

为缓解手疼的问题,我最主要的方法是把键盘切换到HHKB,把小拇指按Control键切换成由无名指按Control键。

提了一个pr respect `search-invisible` for search by jixiuf · Pull Request #556 · meow-edit/meow · GitHub 我常用的一个工作流程是 consult-riggrep 后使用embark-export 将结果导入到一个grep-mode 的buffer ,然后在这个grep-mode 的buffer 中 会使用consult-focus-lines 再次将某些行 隐藏掉, 所以 希望在使用 meow-beacon-apply-kmacro 执行宏时, 能只针对未隐藏的行,@ DogLooksGood 看看pr 有没有兴趣合并这个pr, ak有没有遗漏的场景没处理的。

大佬,这个 PR 我先放置了,我感觉后面我可能自己做一个类似的改动。