试用了Meow后感觉是Evil最好的替代,轻量、清晰,侵入少,最大限度保留了原有emacs的特性,又增加了模式编辑。我是使用Doom的配置,想在Doom中增加一个meow Model,这样切换起来就方便了,也能更好的体验Meow。但是在Doom中发现KEYPAD模式要退出来要按两次C-g才能退出,不知怎么解决,还有同好用Doom的可以提供下经验吗?
Doom中C-g是全局绑定到doom/escape 的,但是我在 doom-escape-hook
中加入 meow-keypad-quit
也没有效果。
Doom代码:
(defun doom/escape (&optional interactive)
"Run `doom-escape-hook'."
(interactive (list 'interactive))
(cond ((minibuffer-window-active-p (minibuffer-window))
;; quit the minibuffer if open.
(when interactive
(setq this-command 'abort-recursive-edit))
(abort-recursive-edit))
;; Run all escape hooks. If any returns non-nil, then stop there.
((run-hook-with-args-until-success 'doom-escape-hook))
;; don't abort macros
((or defining-kbd-macro executing-kbd-macro) nil)
;; Back to the default
((unwind-protect (keyboard-quit)
(when interactive
(setq this-command 'keyboard-quit))))))
(global-set-key [remap keyboard-quit] #'doom/escape)
嗯,理解。可以提供个变量设置自己的匹配优先模式就更好了
我觉得重绑定 C-g 到默认的 keyboard-quit 就可以。其实这个 doom 的逻辑看起来,只是在录宏的时候不中断的效果,不过你可能需要 C-g 在宏的录制中中断。
另外就是 KEYPAD 里面可以用 esc 来退出。可以用退格来取消最近的一次输入,不需要使用 C-g。
嗯,我再试试,主要是doom-escape-hook
中在不同模式中添加了些东西,全局绑定keyboard-quit
可能和Doom的内容会有冲突
mezi
45
我试了下,在KEYPAD模式下 C-g一次就回到了Normal了。我也没有做特别的处理。
1 个赞
@DogLooksGood 我觉得meow的思路很吸引人,但是在尝试的过程中有一个操作始终找不到合适的方法,就是evil里面的easymotion,简单来说就是迅速把光标跳到可视范围内的某个位置。
我的常用方式是激活easymotion的jump-to-char2,然后使用两个按键定位位置。
我知道meow采用的方式是使用数字进行跳转,但是这个方法的跳转范围很有限,也有可能是我还不知道其他的方法。
假设命题是,精准跳转到可视范围内的某个位置,meow的解决方法是怎样的?
mezi
51
是的,这几乎是我meow的doom全部配置
(use-package meow
:init
(meow-global-mode 1)
:custom
(meow-selection-command-fallback
'((meow-save . meow-keypad-start)
(meow-change . meow-keypad-start)
(meow-cancel . meow-keypad-start)
(meow-reverse . meow-open-below)
(meow-replace . meow-replace-char)
(meow-pop . meow-pop-grab)
(meow-kill . meow-C-k)
(meow-delete . meow-C-d)))
:config/el-patch
(setq meow-cheatsheet-layout meow-cheatsheet-layout-dvp)
(defun meow-change ()
"Kill current selection and switch to INSERT state."
(interactive)
(if (and (meow--allow-modify-p) (region-active-p))
(progn
(delete-region (region-beginning) (region-end))
(meow--switch-state 'insert)
(setq-local meow--insert-pos (point)))
(meow--selection-fallback)))
(meow-motion-overwrite-define-key
'("SPC" . meow-motion-origin-command))
;; drovk programmer keybindings on normal mode.
(meow-normal-define-key
'("*" . meow-expand-0)
'("=" . meow-expand-9)
'("!" . meow-expand-8)
'("[" . meow-expand-7)
'("]" . meow-expand-6)
'("{" . meow-expand-5)
'("+" . meow-expand-4)
'("}" . meow-expand-3)
'(")" . meow-expand-2)
'("(" . meow-expand-1)
'("1" . digit-argument)
'("2" . digit-argument)
'("3" . digit-argument)
'("4" . digit-argument)
'("5" . digit-argument)
'("6" . digit-argument)
'("7" . digit-argument)
'("8" . digit-argument)
'("9" . digit-argument)
'("0" . digit-argument)
'("-" . negative-argument)
'(";" . meow-comment)
;; '("," . meow-inner-of-thing) ; chord keys
'("." . meow-bounds-of-thing)
'("<" . meow-beginning-of-thing)
'(">" . meow-end-of-thing)
`("a" . ,(cmd! (if (region-active-p) (meow-append) (meow-change-char))))
'("A" . meow-replace-save)
'("b" . meow-back-word)
'("B" . meow-back-symbol)
'("c" . meow-change)
'("C" . meow-change-save)
'("d" . meow-delete)
'("D" . meow-replace)
'("e" . meow-line)
'("E" . meow-line-expand)
'("f" . meow-find)
'("F" . meow-find-expand)
'("g" . meow-cancel)
'("G" . meow-goto-line)
'("h" . meow-head)
'("H" . meow-head-expand)
'("i" . meow-insert)
;; '("I" . winner-undo)
'("j" . meow-join)
'("J" . delete-indentation)
'("k" . meow-kill)
'("l" . meow-till)
'("L" . meow-till-expand)
'("m" . meow-mark-word)
'("M" . meow-mark-symbol)
'("n" . meow-next)
'("N" . meow-next-expand)
'("o" . meow-block)
'("O" . meow-block-expand)
'("p" . meow-prev)
'("P" . meow-prev-expand)
'("q" . meow-quit)
'("r" . meow-reverse)
'("R" . meow-open-above)
'("s" . meow-M-x)
'("t" . meow-tail)
'("T" . meow-tail-expand)
'("u" . meow-undo)
'("U" . winner-undo)
'("v" . meow-search)
'("V" . meow-pop-search)
'("w" . meow-next-word)
'("W" . meow-next-symbol)
'("x" . meow-save)
'("X" . meow-clipboard-save)
'("y" . meow-yank)
'("Y" . meow-clipboard-yank)
'("z" . meow-grab)
;; '("Z" . meow-replace-save)
'("'" . meow-pop)
'("\"" . meow-pop-all-selection)
'("/" . meow-visit)
'("&" . meow-query-replace)
'("%" . meow-query-replace-regexp)
'("$" . meow-swap-grab)
;; '("~" . nil)
'("#" . meow-sync-grab)
'("@" . recenter)
;; '("^" . meow-pop-to-mark)
'("\\" . meow-end-of-thing)
'("<escape>" . meow-last-buffer)
'("<f3>" . meow-start-kmacro)
'("<f4>" . meow-end-or-call-kmacro)))
1 个赞
看来 append 缺个 selection-fallback
举例,如下代码
func anotherFunc() {
someFunc(arg) //<- 我需要给这个方法调用增加一个参数
}
// 我刚刚给这个函数加了一个新参数
func someFunc(arg string, argInt int) {
... // <- 现在光标在这里
}
到那个位置或附近的位置,有大概这么几种办法
到括号里面 - f ) 1
到 g
的后面 - t g 3
到 arg 前面再向后一个词 b 9 e
按行号到那一行(同时会选中那行,就有了行末的位置) 2 Q
另外 meow 和 avy 并不冲突(我自己并不用)
谢谢分享,好像是没有特别的地方,可能是我用了啥特殊的包,或者是定制部分影响了。我清理下再试
用这种配置的就是这样,有时候觉得方便,有时候觉得又好麻烦
请问下,假如我想让 SPC-c
和 Ctrl-c c
的按键前缀等同,该怎么绑定实现?