如何在 emacs 中获取当前缓冲区的文件名?

如何在 emacs 中获取当前缓冲区的文件名?

我怀念 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,如果有什么区别)下有类似的功能,即有一种简单的方法来插入在当前缓冲区中打开的文件的名称。

我想做的事情的例子

在这里,我描述了一些基本用例,以便在我觉得需要这样的快捷方式时更好地解释

  1. 编译:当我进入M-x compileemacs 时,会要求我输入编译命令。我想gcc (current-buffer)轻松进入。

  2. 加载文件:当我编辑 .emacs 文件时,我想立即加载它来测试更改。我这样做的方式是M-x load-file,然后我总是拼出名字. e m a c s。我想有一条捷径。

  3. 启动外部进程:我举了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

相关内容