我想念 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...
Run Code Online (Sandbox Code Playgroud)
我想在下面有类似的功能 emacs
(版本 24,如果有任何区别),即有一种简单的方法来插入在当前缓冲区中打开的文件的名称。
我想做的事的例子
在这里,我描述了一些基本用例,以便在我觉得需要这样的快捷方式时更好地解释
编译:当我输入M-x compile
emacs 时,要求我输入编译命令。我想gcc (current-buffer)
轻松进入。
加载文件:当我编辑 .emacs 文件时,我想立即加载它以测试更改。我这样做的方式是M-x load-file
然后我总是拼出名字. e m a c s。我想要一条捷径。
启动外部进程:我举du -sh
个例子,只是为了说明我希望快捷方式在我执行shell命令时也可用M-!
到目前为止我发现了什么
编辑:有点不相关,我发现了为什么这些解决方案不起作用。无论好坏,我都启用了 IDO。
(current-buffer)
函数确实返回当前缓冲区中文件的名称,但在我上面给出的示例中没有任何地方,我正在评估elisp代码。有没有办法将这个函数的评估结果插入(迷你)缓冲区中并将这种方式绑定到快捷方式?我这样想有错吗?
在使用 Vim 多年后,我目前正在学习使用 emacs(实际上已经几个月了)。我想避免一个可预测的using-emacs-in-a-Vim-way陷阱。如果您觉得我要求的不是很emacs-y,并且应该有更好(更干净?)的方法来做到这一点,请在您的答案中提及它。
Ezr*_*ler 12
您可以将如下所示的函数放入您的 .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)))))
Run Code Online (Sandbox Code Playgroud)
也看到这个问题,它似乎是相似的。
小智 6
@easyb 的答案有一个细微的变化,那就是将路径复制到 Kill Ring,而不是将其放入缓冲区(对于只读文件很有用):
(defun filename ()
"Copy the full path of the current buffer."
(interactive)
(kill-new (buffer-file-name (window-buffer (minibuffer-selected-window)))))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9640 次 |
最近记录: |