我怀念 Vim 的主要功能之一是它总是将当前文件的文件名保存在缓冲区中%
(更多信息)。这允许轻松启动命令,例如:
;; compile current file
:! gcc %
;; source current file (useful when I'm editing .vimrc
:source %
;; get the size of current file
:! du -sh %
;; etc, etc...
我希望在emacs
(版本 24,如果有什么区别)下有类似的功能,即有一种简单的方法来插入在当前缓冲区中打开的文件的名称。
我想做的事情的例子
在这里,我描述了一些基本用例,以便在我觉得需要这样的快捷方式时更好地解释
编译:当我进入
M-x compile
emacs 时,会要求我输入编译命令。我想gcc (current-buffer)
轻松进入。加载文件:当我编辑 .emacs 文件时,我想立即加载它来测试更改。我这样做的方式是
M-x load-file
,然后我总是拼出名字. e m a c s。我想有一条捷径。启动外部进程:我举了
du -sh
一个例子,只是为了说明我希望当我执行 shell 命令时快捷方式也可用M-!
到目前为止我发现了什么
- 这个问题在 U&L 上。给出的答案基本上显示了在哪里可以找到缓冲区的文件名,以便可以将其添加到终止环中。这不完全是我正在寻找的,我不想在使用文件名之前手动删除它。 (此外,这两个答案中描述的解决方案似乎在我的 emacs 中工作得不太顺利,并且需要额外的击键,这让它们有点痛苦)。
编辑:有点无关,通过我发现为什么这些解决方案不起作用。无论好坏,我都启用了 IDO。
- 这
(current-buffer)
手册中描述的确实返回了当前缓冲区中的文件的名称,但在我上面给出的示例中,我都没有评估 elisp 代码。有没有办法将此函数的评估结果插入(迷你)缓冲区中,并以此方式绑定到快捷方式?
我这样想有错吗?
在使用 Vim 多年之后,我目前正在学习使用 emacs(实际上已经几个月了)。我想避免可预见的情况以 Vim 方式使用 emacs陷阱。如果你觉得我的要求不太emacs-y,并且应该有更好(更干净?)的方法来做到这一点,请在您的答案中提及。
答案1
您可以将如下所示的函数放入您的函数中.emacs
并将其绑定到您喜欢的任何键。
(defun insert-file-name ()
"Insert the full path file name into the current buffer."
(interactive)
(insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))
另请参阅这个问题,看起来很相似。
答案2
略有不同@easyb的答案是将路径复制到杀戮环,而不是将其放入缓冲区(对于只读文件有用):
(defun filename ()
"Copy the full path of the current buffer."
(interactive)
(kill-new (buffer-file-name (window-buffer (minibuffer-selected-window)))))
答案3
(kill-new buffer-filename)
如果你将它绑定到这样的键似乎就足够了 - 我在我的~/.emacs.d/init.el
:
(global-set-key (kbd "C-c w") (lambda () (interactive) (kill-new buffer-file-name)))
每当我想将当前文件名放入终止缓冲区时,我只需按,然后在我想要将其拉出的任何地方C-c w
使用通常的方法。C-y