猫态编辑:Meow

lsp 是通过 lsp-enable-which-key-integration 这个函数加的,然后我的前缀是 SPC l,所以 (setq lsp-keymap-prefix "SPC l") 就可以了

刚才发现 emacs 内置的一些 keymap 上面是有用 symbol 做为别名的,比如说这个 C-x C-k kmacro-keymap。

参照

刚才更新了一下 Meow, 现在可以正确的显示这样的 keymap 别名了。

自己定义的例子

似乎没有什么好办法给已有的来添加。

1 个赞

嗯嗯,用是没有问题的,只是对 keypad 的提示有点疑问。

狗哥再麻烦问下,我在尝试将 scroll-up 和 scroll-down 通过 meow-normal-define-key 绑定到 C-f C-b 上的时候,发现这个绑定会同时影响 meow-left 和 meow-right ,后两个方法也变成了 scroll-up/down ……检查过 meow-selection-command-fallback ,没有相关配置。

另外,似乎 qwert 下的 z 键被默认绑了 meow-pop-selection ,我觉得应该使用 meow-pop 吧?不然无法利用 fallback pop 第二选区。

提个问题(或者是需求):

在查找 thing 的时候,对于

def fun(param) do

end

是可以用过 defun 确认范围的;但对于

test "xxxx" do

end

无效,这是 bug 吗?如果不是,希望可以增加对于任意 do end 块的支持。

meow 下层都是从原生绑定获取的命令,因为设计上就是使用者不改原生的命令的。如果你修改了原生的绑定,比如把 forward-char 改到 C-t, (C-f 留给 scoll-up) 你也要对应的改 meow--kbd-forward-char 这个变量到 “C-t”. 具体在翻页上,用 C-f C-b 翻页并不比 Emacs 内置的 C-v M-v 好按,不妨就用默认的。


关于 pop selection, 可以这样。

(meow-pop-selection . meow-pop-grab)

其实 meow-pop-selection 更符合命令的原子性,meow-pop 应改成 meow-pop-selection 的别名。meow 里面有一些多余的命令,注意到了就会 deprecate 或设成推荐命令的 alias。


关于 thing 的问题,大部分的 thing 是 emacs 里面就有的。比如 line, defun 之类的,每个语言的 mode 实现的时候会实现 thing 的范围如何获取。Meow 里面有的获取的方式依赖于这个。

(bounds-of-thing-at-point 'defun)

如果一个 mode 里面实现的不合适的话,表现的行为就不对。目前没有打算自己实现一个针对每个语言的,以前试着搞过,但是语言很多规则很乱,自己另搞一套并不划算。

meow-thing.el 里面是相关的实现。

  1. 明白,就是说 meow-left 依赖 C-b,所以我改了 C-b 就会影响 meow-left ; meow-right 同理。
  2. 明白,
  3. 好的,我试试看能不能为自己使用的语言单独搞下规则。

谢谢回复 :relaxed:

1 个赞

加了一个自动调整 face 颜色的功能,感觉相比给别的主题一个个 PR,这个方式更好一些。主要是基于光标的颜色来调亮、调暗。

在一些主题上的效果:

Zenburn

Solarized Dark

Solarized Light

Doom One

Dracula

虽然对比度的感觉忽高忽低,不过还可以接受。

1 个赞

支持了 TUI 里面终端光标样子的变化。测试了 alacritty, urxvt, gnome-terminal 等终端。

3 个赞

太赞了,看到之后立刻尝试了一下。windows terminal 里 powershell 和 cmd 不起作用。Archwsl 可以,ssh 到 centos 服务器也没问题!!不过在 windows 下基本用 GUI,也不是什么大问题。

1 个赞

能在这些地方有效,就已经符合预期了。非常感谢!

@Lewisliu 关于多点编辑,目前探索的方案

cursor

BMACRO 模式的说明

名称

Batch Macro,用于批量执行 kmacro 的模式。如有更好的名字可以更换。

启动和关闭的方法

当前处于 NORMAL 模式,光标进入第二选择区域时自动激活。 光标离开第二选区或第二选区消失时自动关闭。

PS:使用 meow-grab 或 Alt + 鼠标选择创建第二选区。

enter

启动后可用的命令

启动后光标移动的时候,会跟据移动的方式不同,在第二选区内产生不同位置的假光标(或假选区)。

目前支持上下左右,word, symbol, line, join, find, till, visit, mark-word, mark-symbol 等命令。

motions

使用 F3 (绑定了 kmacro-start-or-insert-counter 的位置会被 bmacro 临时覆盖,下同) 来录制宏,F4 结束的时候,宏会自动的应用到所有的假光标。如果没有在录制宏,F4 会直接应用最后一个宏到当前真光标和所有的假光标。

call

insert, append, change 会进入 insert 模式,并自动开始宏的录制,在 exit 的时候自动应用到所有的假光标。

quick

PS: replace 可以相当于对多个地方 replace (这个功能实现和 kmacro 无关)

TPS:

  1. 已有第二选区相关的功能不受影响, 依然可以用 swap-grab 交换两种选区或是用 sync-grab 将主选区内容覆盖掉第二选区。
  2. BMACRO 模式的光标不能直接用于编辑,只能用于 kmacro,这样规避了各种插件的兼容性问题,不需要像 multiple-cursor 里面那样备份还原变量,或是打补丁。
  3. 在 BMACRO 下无法唤出 KEYPAD 模式。
  4. 开始宏的录制后所在的模式是 NORMAL。
  5. 用户配置中没有需要新绑定的按键和命令。

对比旧方案

旧方案使用 meow-kmacro-lines 和 meow-kmacro-matches ,两个独立的命令。

虽然用起来还可以,但是能解决的问题场景比较固定。新方案同样能做到这两个命令的效果,某些情况下可以用更少的按键。新方案还复用了 meow 自带的多种移动命令。更符合 meow 的 less is more 的思想。

新方案同旧方案一样对 kmacro 有良好的兼容性,保证了

  1. 已有的 kmacro 可以应用在当前的这套流程
  2. 这套流程产生的 kmacro 可以后续继续应用
5 个赞

默认关闭了 cursor 位置的 hack, 当前的默认行为 cursor 和以前是相同的。需要位置处理的话,使用

(setq meow-use-cursor-position-hack t
      meow-use-enhanced-selection-effect t)

两个设置。需要在激活 meow-mode 前设置。

光标的位置是为了更符合 vim 用户的习惯,但是感觉并不是编辑的核心需求,所以默认关闭了。


开启时:

image

关闭时:

image

1 个赞

好像更新之后,在 doom-one theme 下,自动调整光标颜色的功能失效了?

修复了,少了一行 require 'dash…

再麻烦问个问题,关于 meow-cancel-selection 这个方法,他的描述是 "Cancel selection or grab " 。但实际上好像并没有取消 grap 的效果,这个是文档没有更新还是我用法不对呢?

(我明白可以设置 meow-selection-command-fallback 来达成目的)

文档问题,我更新一下。感觉经过很多改动之后,需要一波大的文档工作了。

期待新文档和教程了,尤其期待使用思路方面的描述 :joy:

目前仅简单的使用,有几个优点兼容性,和meow以及近乎所有的emacs按键都能兼容,灵活性很好。然后,可以复用kmacros的那一套,包括录制和保存。最后,多行的匹配更加灵活,不仅包括了我之前习惯的vim行编辑,而且也能享受宏的优势

狗哥做出了很神奇的功能,很棒,很实用。

补充一下,太赞了,一键进入录制退出到normal自动执行宏,好多行文字多次同步修改太快了,太快了,原vim用户震惊