一件非常有意思的事,我尝试这样定义ivy-minibuffer-map的一些keybinds,也都能work,除了调皮的这个。
(define-key ivy-minibuffer-map (kbd "C-x") 'ivy-kill-line)
…well ,然后我重启的Emacs, 启动后第一次使用ivy去补全,
按C-x也的确能kill-line,但是第二次按C-x的时候,居然变成了一个前缀???.
What The FUXK??然后我尝试打开 which-key-mode,
然后发现在 C-x 为前缀的键位上,大概是这些描述:
- C-x 8(iso-transl-ctl-8-map) -> (许许多多奇怪的字符,真的,从没见过的…)
- C-x @ ->
- (S -> event-apply-shift-modifier)
- (h -> event-apply-hyper-modifier)…etc (后面差不多都类似的)
- C-x r -> ( 矩阵编辑相关的…)
非常奇怪啊,我从来没定义过???
哪位大侠能帮帮我。。。我只是想在ivy-minibuffer中使用C-x来kill line…
BTW,我试过下面这个方法,但不凑效。
(defvar ivy-minibuffer-map (let ((map (make-sparse-keymap)))define xxxxx)
LdBeth
2
只要有 minor-mode 绑定过以 C-x 为 prefix 的按键,(define-key ivy-minibuffer-map (kbd "C-x") 'ivy-kill-line)
之类就不会生效。
如何临时禁用所有 minor-mode?helm 用了这段。
(defun helm-disable-minor-mode ()
(interactive)
(let (active-minor-modes)
(mapc (lambda (mode) (condition-case nil
(if (and (symbolp mode) (symbol-value mode))
(add-to-list 'active-minor-modes mode))
(error nil)))
minor-mode-list)
(helm
:sources '((name . "Active minor modes")
(candidates . active-minor-modes)
(action . (lambda (_candidate)
(dolist (mode (helm-marked-candidates))
(funcall (intern mode) -1))))
(persistent-action . helm-mode-manager-describe-mode)))))
只要把这个每次进入 ivy minibuffer 的时候跑一遍就可以了。
(defun disable-all-minor ()
(interactive)
(dolist (mode
(mapcar
(lambda (mode) (condition-case nil
(if (and (symbolp mode) (symbol-value mode))
(add-to-list 'active-minor-modes mode))
(error nil)))
minor-mode-list))
(funcall mode -1)))
当然禁用所有 minor mode 副作用很明显。
很厉害啊~
谢谢你的回复。
可是,
(add-hook 'ivy-mode-hook 'disable-all-minor)
并不凑效,我再好好看看你给的
LdBeth
4
直接加钩子可能会被覆盖。
你可以先把 disable-all-minor
帮一个按键上,同时绑定 C-x,在 ivy minibuffer 执行一次 disable-all-minor
以后,试试 C-x 绑定有没有生效。
如果这样能奏效,说明稍微 tweak 以下 ivy 以后是可行的。
我在这里只从可行性上提议,因为我不觉得绑 C-x 是个好想法。
恩,其实一开始只是容易误按到C-x 然后提示不能在此minibuffer中使用,觉得这个提示很烦,就想把C-x在minibuffer里给禁掉。你给的那个函数,运行不了呜呜
我有在ivy-minibuffer-map做很多key-bind,
给C-k绑的是ivy-previous-line,也能work。
但是用同样的方法给C-x绑,只在启动emacs后第一次使用凑效,
就是有种如鲠在喉的感觉啊,很不舒服。。
一定想要弄好的那种感觉。。像这种经过很长时间的折腾,最后成功的那种感觉,无以言表。233333
ztlevi
8
你用的spacemacs?我最近发现这个问题把style改成hybrid了,比较make sense.就是一般输入模式下还是用c-n, c-p上下移动。这样做在ivy, term中都可以使用c-k kill line了,也跟终端中的操作比较匹配。
不是,自己配的www,恩。。其实我不仅C-n C-p,还有M-n M-p也上下移动。。23333
我这个人很奇怪。喜欢绑在好多快捷键上。。比如html里面的emmet-expanding,
M-i, M-o,M-p都给绑上了…就算按错也能补全的感觉挺爽的哈哈。
我感觉问题应该就是楼上说的 helm-mode那样解决的。。
我刚试了下想在ido的map上绑定c-x也不行,只有在helm上才可以。
ztlevi
10
我已经慢慢往consistency方向走了。。感觉不然其他工具都不会用了。
我也一样,不过是个人喜好吧,
我用Vimium, Terminal, 上滚下滚,上一个命令下一个命令都是Ctrl+k和Ctrl+j,
要kill-line的话,用的M-q,恩。算个人使用习惯了,2333