我在我的.emacs
中有以下函数,我经常使用它将本地文件的文件名/路径放入当前缓冲区。它运作得很好,但是我想要它具有ido
自动完成功能。但我好像无法实现这一点...也许你可以帮助我。
(defun insert-file-name (filename &optional args)
"Insert name of file FILENAME into buffer after point.
Prefixed with \\[universal-argument], expand the file name to
its fully canocalized path. See `expand-file-name'.
Prefixed with \\[negative-argument], use relative path to file
name from current directory, `default-directory'. See
`file-relative-name'.
The default with no prefix is to insert the file name exactly as
it appears in the minibuffer prompt."
;; Based on insert-file in Emacs -- ashawley 20080926
(interactive "*fInsert file name: \nP")
(cond ((eq '- args)
(insert (expand-file-name filename)))
((not (null args))
(insert (filename)))
(t
(insert (file-relative-name filename)))))
ido-everywhere
是t
,但旧函数并没有使用ido
进行补全。也许ido-everywhere
与函数使用的interactive
格式不兼容? - elemakil(setq ido-everywhere t)
,而应该使用(ido-everywhere t)
,这与大多数初学者指南和预选的.emacs.d
配置相反。 - elemakilido-everywhere
是否因其中的某些自定义而损坏?(运行emacs -q
,评估您的defun,激活ido-mode
和ido-everywhere
,然后查看是否有任何变化) - François Févotteido-everywhere
激活的方式非常重要...您上面呈现的代码在任何情况下都有效! - elemakil(mode-name +1)
来激活模式,并使用(mode-name -1)
来停用模式。仅仅使用(mode-name)
切换模式可能会导致不可预测的结果。仅仅设置变量是不够的,正如你刚刚发现的那样。 - François Févotte