我想念的有关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。给出的答案基本上显示了在哪里可以找到缓冲区的文件名,以便可以将其添加到kill-ring。这并不是我要找的东西,我不想在使用文件名之前先手动杀死它。(这两个答案中描述的解决方案在我的emacs中似乎都无法正常工作,并且需要额外的击键操作,这使它们有些痛苦)。
编辑:一点无关,由我发现为什么这些解决方案不起作用。无论启用还是禁用,我都启用了IDO。
- 手册中描述的
(current-buffer)
函数的确会返回当前缓冲区中文件的名称,但是在上面的示例中,我没有评估elisp代码。有没有一种方法可以将该函数的求值结果插入(微型)缓冲区中,并以这种方式绑定到快捷方式?
我这样想是不是错了?
经过多年使用Vim之后,我目前正在学习使用emacs(实际上已经几个月了)。我想避免在Vim-way陷阱中使用可预测的陷阱。如果您觉得我要的不是emacs-y,并且应该有更好的方法(更干净?),请在回答中提及它。
此工作流程与Emacs的衔接不是很好,因为窗口底部的所有提示都在Emacs的缓冲区(称为迷你缓冲区)中。因此,如果您
—
吉尔(Gilles)'所以
(buffer-file-name)
在输入迷你缓冲区时运行,则会得到nil
,因为(current-buffer)
它是迷你缓冲区。您也可以在微型缓冲区中切换缓冲区,因此很难像Emacs所知的那样,在当前缓冲区是微型缓冲区时,跟踪哪个缓冲区就是您对当前缓冲区的看法。
(global-set-key (kbd "C-i") buffer-file-name)
如果您希望使用Ctrl + I ,则在.emacs中放入。关于.emacs,M-x load-file RET
您想要做什么?您不需要写任何东西。