我一直在使用ido模式几个月,随着哆哆嗦嗦打开,我通常很满意。不过,我希望有一件事可以改变。当我输入C-u M-x shell以创建一个具有特定名称的新shell缓冲区时,ido向我提供了所有打开的缓冲区的完成列表。如果我选择了一个,那么在该缓冲区中启动一个新的shell,并将其置于shell模式,无论它包含什么。很难想象这是一个有用的用例。禁用特定命令的ido模式?
是否有一种方法可以仅禁用shell命令的ido-mode? (以及当然我可能会遇到的其他类似命令)
我一直在使用ido模式几个月,随着哆哆嗦嗦打开,我通常很满意。不过,我希望有一件事可以改变。当我输入C-u M-x shell以创建一个具有特定名称的新shell缓冲区时,ido向我提供了所有打开的缓冲区的完成列表。如果我选择了一个,那么在该缓冲区中启动一个新的shell,并将其置于shell模式,无论它包含什么。很难想象这是一个有用的用例。禁用特定命令的ido模式?
是否有一种方法可以仅禁用shell命令的ido-mode? (以及当然我可能会遇到的其他类似命令)
嘿,事实证明,无论您是否启用ido-everywhere
,您都会得到相同的完成选项。
有没有内置的方式来做你想做的。 ido-mode
只为您提供挂钩,以便能否覆盖find-file
行为是否被ido
接管。 read-buffer
目前是总是被ido-everywhere
覆盖。
幸运的是,一个小的Emacs Lisp可以得到你想要的东西:
(put 'shell 'ido 'ignore)
(defadvice ido-read-buffer (around ido-read-buffer-possibly-ignore activate)
"Check to see if use wanted to avoid using ido"
(if (eq (get this-command 'ido) 'ignore)
(let ((read-buffer-function nil))
(run-hook-with-args 'ido-before-fallback-functions 'read-buffer)
(setq ad-return-value (apply 'read-buffer (ad-get-args 0))))
ad-do-it))
而对于任何其他命令你不想缓冲区选择以下ido-everywhere
可以通过简单地增加一个新的表达你的定制。 emacs的:
(put 'other-command-i-want-untouched 'ido 'ignore)
我知道,对于某些命令,使用最后两次快捷方式暂时禁用IDO(例如,打开文件,'CX比照Cf'使用在迷你传统的文件打开的界面),但我不不知道'Mx'命令。 – Seki