猫态编辑:Meow

我也一直存在这个问题。win10 emacs-master.

昨天安装的,melpa的最新版本

@peleusj @mezi

(defun meow-right ()
  "Move to right.

Will cancel all other selection, except char selection. "
  (interactive)
  (when (and (region-active-p)
             (not (equal '(expand . char) (meow--selection-type))))
    (meow-cancel-selection))
  (meow--execute-kbd-macro meow--kbd-forward-char))

这个是实现,其实很简单,右移的行为就是这个表达式的效果。

(meow--execute-kbd-macro meow--kbd-forward-char)

这里的逻辑的就是找出 meow--kbd-forward-char 上面绑定的命令,然后调用那个命令。这里的 meow--kbd-forward-char 的默认值是 "C-f".

我能提供的信息就这么多,可能要看你们那里有没有更多的信息了。

狗哥,应该怎么提供更多信息 ?:joy:

我在 arch 上也试了下也还是有这个现象。

我试过就加载一个 meow 配置,其他配置都不加载,还是一样。

但直接 C-f 确实是可以的。


不好意思狗哥,原来我绑定的是 meow-tail meow-head, 是这两个不行,meow-right, meow-left 是可以的

1 个赞

meow-tailmeow-head 我打算弃用掉。因为没有什么特别的意义。

@DogLooksGood 狗哥你好,meow-mode-state-list 计划支持 minor mode 吗?现阶段想改变 minor mode 的默认模式为 motion 有什么办法?

这不能啊, minor mode 可以有多个.

具体场景是什么? 我可以看看有啥别的办法.

用 git-timemachine,evil 有支持的办法,但 meow 没有

Use git-timemachine with Evil | Chen’s blog (binchen.org)

参照这里,在某个 hook 上切.如果没有 hook 就用 advice.

okay, thx

(defun +git-timemachine-hook-function ()
  (when (bound-and-true-p meow-mode)
      (meow--switch-state 'motion)))

(with-eval-after-load "git-timemachine"
  (add-hook 'git-timemachine-mode-hook '+git-timemachine-hook-function))
1 个赞

优化 back/next-word/symbol 的逻辑,当前会自动跳过括号和符号(punctuation syntax)

foo 的后面,使用 meow-next-word。 这是之前的行为

image

现在的行为

image


优化了 meow-kmacro-lines 。之前的实现了使用 apply-macro-to-lines,在调用的 kmacro 中有插入换行时会造成死循环。

重新实现后解决了这个问题。

Peek 2021-08-10 08-17

3 个赞

其实应该多搞点这种场景化演示

1 个赞

狗哥是否能集成增加一个行复制功能。Emacs 默认手动操作比较繁琐。

当前使用x行选择, y 复制选区, p 黏贴选取也有些啰嗦。

你建议的是什么样子呢?

比如实现单行复制功能, 按键可以按需自己绑定。 比如在Insert 模式下C+y , 在Normal模式下也可以选个按键绑定。

在写下面这种代码时,有更快捷的行复制还是很幸福的。

meow 不会在 insert 下绑按键,覆盖按键的.

至于在 normal 下一键复制,应该也不会提供这样的命令,如果 xy 不好按这应该是个按键位置的问题,我觉得相近的两个键就可以很方便的操作.

这个直接xy什么的我觉得效率也不低,不过我没找到批量粘贴的快捷方法,现在只能录个宏然后Ctrl-u执行宏几十次,替代vim中的"100p”。不过我认为这个不是大问题,因为场景不多。比较棘手的问题是行的宏修改问题,这个场景比较常用,比如用swiper之后批量修改,随手举个例子,假设下面的是需要修改的文本(可能来源于搜索结果或者是正常文本):

asdsad () asd:asd
   asd asd as:dsad
  doah hjijds:asd

现在想在所有的":“号后面加上"print(” 光标一般正好在":“附近,如果用现在的meow的逻辑,必须首先移动到行首,然后开始录制宏,再返回":“处进行修改,然后停止录制,再"x"选定行后执行"X”。 而在vim里,直接Ctrl-v 然后大写的i,修改后esc就行了

meow的行编辑宏不能够在":“处开始录制,必须在行首开始录制。因为每次执行"X”,它默认从每行的执行起点是行首,而不是录制宏的光标位置.这样流程:从要修改处 -> 回到行首- > 开始录制 -> 移动回要修改的地方 -> 进行编辑 -> 结束录制 -> “X” 的操作。

我也想解决下这个问题。如果是从任意一列开始,那么重放的时候是不是也应该从对应的列重放?

我觉得用户执行"X"来进行行的宏修改,应该是期望每行都执行相同的修改