现有的哪个命令可以像这样获取当前文件缓冲区的文件名?
不幸的是,目前尚无现成的命令,但是我们可以执行以下命令:
(defun name-of-the-file ()
"Gets the name of the file the current buffer is based on."
(interactive)
(insert (buffer-file-name (window-buffer (minibuffer-selected-window)))))
神奇之处在于minibuffer-selected-window功能。它通过激活微型缓冲区之前的最后一个缓冲区来做正确的事情。否则,仅使用buffer-file-name不会使文件名进入minibuffer。有趣的是,可以在常规缓冲区或小型缓冲区中使用相同的功能来插入文件名。无需特殊处理。
它的默认键绑定是什么?
没有,但是您可以选择一个方便的对象并按以下方式进行分配:
(global-set-key (kbd "C-c f") 'name-of-the-file)
将上面的lisp代码行放入init.el文件中。
这在大多数情况下都是可行的,但是很难预测在调用此功能时,它与您激活的任何模式有什么冲突。
如果缓冲区未访问有效的文件名(例如暂存缓冲区)怎么办?然后,该错误显示在回显区域中:
name-of-the-file: Wrong type argument: char-or-string-p, nil
在调用快捷方式之前选择具有正确文件名的有效缓冲区将避免此类错误。
像上面一样,还有其他几种解决方案,但是它们的主要区别在于处理任何冲突的异常或替代的方式。例如,有些使用模式钩子使此功能仅在某些模式下可用。
M-n
。它并非在所有地方都可以使用,但是可以在很多地方使用。另外,由于您正在grepping,我想您可能会喜欢lgrep和rgrep,它们更具交互性。