【发布时间】:2011-01-03 09:19:26
【问题描述】:
如何在 vim 或 emacs 等编辑器中在浏览器(例如 Firefox)中打开文件? Notepad++ 通过按 Ctrl+Shift+Alt+X (Firefox) 在浏览器中打开文件。有没有办法在 gVim 或 Emacs 中做到这一点?
【问题讨论】:
-
我已将 gVim 和 emacs 的解决方案放在一篇文章中,您可以选择作为正确答案。
如何在 vim 或 emacs 等编辑器中在浏览器(例如 Firefox)中打开文件? Notepad++ 通过按 Ctrl+Shift+Alt+X (Firefox) 在浏览器中打开文件。有没有办法在 gVim 或 Emacs 中做到这一点?
【问题讨论】:
browse-url-of-file 是一个交互式编译的 Lisp 函数 `browse-url.el'。
绑定到<menu-bar> <HTML> <Load this Buffer in Browser>, C-c
C-z诉。
(browse-url-of-file &optional file)让 WWW 浏览器显示文件。
如果 file 为 nil 或被调用,则显示当前缓冲区的文件 交互式地。将文件名转换为具有功能的 URLbrowse-url-file-url。使用 URL 将 URL 传递给浏览器browse-url函数然后运行 browse-url-of-file-hook。
【讨论】:
在emacs中我不认为这是内置的,我可能是错的,但如果不是这里有一个函数可以做到这一点:
(defun open-in-browser()
(interactive)
(let ((filename (buffer-file-name)))
(browse-url (concat "file://" filename))))
【讨论】:
open 程序运行良好。
无论出于何种原因,我在 WinXP 上安装的 EmacsW32 一直使用“单独打开文件://”向 shell 发送浏览 URL 指令,但效果并不好*。将其截断,并修改 @987654321 @ 如下为我工作:
(defun open-in-browser()
"open buffer in browser, unless it is not a file. Then fail silently (ouch)."
(interactive)
(if (buffer-file-name)
(let ((filename (buffer-file-name)))
(shell-command (concat "start firefox.exe \"file://" filename "\"")))))
需要一些改进。以及更换您喜欢的浏览器。 d**n 你,硬编码。
* 我认为问题在于browse-url-default-windows-browser中的系统类型检查,但不是肯定的。
【讨论】:
在 gVim 中:
:!start cmd /c "C:\Users\pierre\AppData\Local\Google\Chrome\Application\chrome.exe" file:///"%:p""
您需要 file:// URI 来表明它来自文件系统,这适用于所有浏览器。 %:p 生成当前文件的完整文件路径。引号是必要的。
只需将其映射到您选择的任何内容。如果您已将 shell 设置为 bash 或其他方式,您可能需要执行 set shell=cmd.exe。
在 emacs 中(引用 justinhj):
(defun open-in-browser()
(interactive)
(let ((filename (buffer-file-name)))
(browse-url (concat "file://" filename))))
【讨论】:
您的意思是您想在网络浏览器中打开当前正在编辑的文件?
在 Vim 中,使用 :!firefox % 之类的东西。
编辑:事实上,您可以使用nmap <silent> <C-M-X> :!firefox %<CR> 使 Vim 的行为与 Notepad++ 非常相似(尽管此映射不会关心您是否按下 shift)。
请注意,并非每个浏览器都会在命令行上给出文件名时实际呈现文件的内容;例如谷歌浏览器将打开一个“另存为”对话框,就好像您正在下载有问题的文件一样。如有疑问,请查看浏览器的文档。不过,Firefox 将“正常工作”。
【讨论】:
firefox 可执行文件,它肯定可以工作。如果您使用的是 Windows,则不一定是这种情况。在这种情况下,将firefox 替换为C:/path/to/firefox.exe。一般来说,您需要弄清楚使用浏览器在命令行上(在我的盒子上是firefox name-of-the-file)使用什么命令来打开文件并使用它而不是firefox,用 %(或 nmap ... 命令之前,什么都不会发生。此外,nmap 使映射仅在正常模式下工作,这通常是您在启动 Vim 时所处的模式,您通常可以通过按 Esc 回到该模式。使用:help map 获取有关其他映射命令(map、imap 等)的信息,这些命令生成可从其他模式访问的映射。最后,如果基本的:!firefox %不起作用,它也不起作用,你需要先弄清楚正确的命令,然后在映射中使用它。根据您的用途,您可以考虑使用 Emacs + MozRepl,它基本上可以让您通过 telnet 向 Firefox 发送 javascript 命令。不幸的是,我似乎无法编写 elisp 来完成这项工作,但在 What's in your .emacs? 中的 Sard 显示了从 emacs 中重新加载网页的相关技巧。更多关于整合 emacs 和 mozrepl 的信息来自 original source 和 here,这是一个很酷的技巧,可以在您在 emacs 缓冲区中键入时更新浏览器中的页面 - 获得即时反馈非常好使用 html 时。
我认为 vim 也可以,但我只在 emacs 中使用过。
【讨论】:
我使用 shell 命令 xdg-open 执行 Elisp 函数。
然后我在 html-mode 中定义一个键来调用该函数。
您必须习惯于向 .emacs 文件中添加内容。
(defun open-html()
"Get the HTML file path & open it"
(interactive)
(let (html-file-path)
(setq html-file-path (buffer-file-name))
(shell-command (format "xdg-open '%s'" html-file-path)))
)
【讨论】:
此答案基于 Emacs 26.2
Emacs 具有在内置浏览器中打开文件的功能,但在不同平台上的行为可能有所不同。通过输入C-h f browse-url-of-file 查看browse-url-of-file 的源代码和文档,您会看到变量browse-url-browse-function 确定使用哪个浏览器。然后,您可以通过选择 browse-url-chrome 自定义此变量以使用 Chrome,然后应用并保存更改。要访问自定义页面,请输入C-h f browse-url-browser-function,然后选择customize 超链接,或M-x customize,然后搜索browse-url-browser-function。
【讨论】: