【问题标题】:How to open files in web browsers (e.g Firefox) within editors like vim or emacs?如何在 vim 或 emacs 等编辑器中的 Web 浏览器(例如 Firefox)中打开文件?
【发布时间】:2011-01-03 09:19:26
【问题描述】:

如何在 vim 或 emacs 等编辑器中在浏览器(例如 Firefox)中打开文件? Notepad++ 通过按 Ctrl+Shift+Alt+X (Firefox) 在浏览器中打开文件。有没有办法在 gVim 或 Emacs 中做到这一点?

【问题讨论】:

  • 我已将 gVim 和 emacs 的解决方案放在一篇文章中,您可以选择作为正确答案。

标签: vim emacs browser editor


【解决方案1】:

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 或被调用,则显示当前缓冲区的文件 交互式地。将文件名转换为具有功能的 URL browse-url-file-url。使用 URL 将 URL 传递给浏览器 browse-url 函数然后运行 ​​browse-url-of-file-hook

【讨论】:

  • 'browse-url-of-file 在 v23.4.1 中没有绑定
  • 在sgml-mode默认绑定到C-c C-v
  • 我不明白 (a) 这是一个答案 (b) 它是如何被接受的答案。与 GVim 或 Emacs 无关,但显然需要安装 Lisp ?!?
  • Emacs 是用自己的 Lisp 编写的,这个功能是 Emacs 自带的。
  • @PuercoPop:这值得自己回答 ;-)
【解决方案2】:

在emacs中我不认为这是内置的,我可能是错的,但如果不是这里有一个函数可以做到这一点:

(defun open-in-browser()
  (interactive)
  (let ((filename (buffer-file-name)))
    (browse-url (concat "file://" filename))))

【讨论】:

  • 这绝对是内置的,不需要自己扮演
  • 是的,'browse-url-of-file' 在 minaev 的回答中。
  • 出于某种原因,对我来说,这会在默认的 html 编辑器 而非默认的 Web 浏览器中打开缓冲区内容。我在 OSX Capitan 上使用 24.5。任何想法为什么会发生这种情况?我从终端检查了open 程序运行良好。
【解决方案3】:

无论出于何种原因,我在 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中的系统类型检查,但不是肯定的。

【讨论】:

    【解决方案4】:

    在 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))))
    

    【讨论】:

      【解决方案5】:

      您的意思是您想在网络浏览器中打开当前正在编辑的文件?

      在 Vim 中,使用 :!firefox % 之类的东西。

      编辑:事实上,您可以使用nmap <silent> <C-M-X> :!firefox %<CR> 使 Vim 的行为与 Notepad++ 非常相似(尽管此映射不会关心您是否按下 shift)。

      请注意,并非每个浏览器都会在命令行上给出文件名时实际呈现文件的内容;例如谷歌浏览器将打开一个“另存为”对话框,就好像您正在下载有问题的文件一样。如有疑问,请查看浏览器的文档。不过,Firefox 将“正常工作”。

      【讨论】:

      • 如果您的意思是光标下的文件名,请使用 代替 %。
      • @janoChen:好吧,如果你的路径上有firefox 可执行文件,它肯定可以工作。如果您使用的是 Windows,则不一定是这种情况。在这种情况下,将firefox 替换为C:/path/to/firefox.exe。一般来说,您需要弄清楚使用浏览器在命令行上(在我的盒子上是firefox name-of-the-file)使用什么命令来打开文件并使用它而不是firefox,用 %(或 ,按照 Laurence 的建议)代替实际的文件名。如果这没有帮助,请告诉我。
      • 我的路径应该是这样的吗? 'nmap :!D:\Program Files\Mozilla Firefox 3.6 Beta 5\firefox.exe'
      • = ctrl+alt+x,是的,但是在您执行我在答案中建议的 nmap ... 命令之前,什么都不会发生。此外,nmap 使映射仅在正常模式下工作,这通常是您在启动 Vim 时所处的模式,您通常可以通过按 Esc 回到该模式。使用:help map 获取有关其他映射命令(mapimap 等)的信息,这些命令生成可从其他模式访问的映射。最后,如果基本的:!firefox %不起作用,它也不起作用,你需要先弄清楚正确的命令,然后在映射中使用它。
      • 是的,你的路径应该是这样的。现在可以用了吗?
      【解决方案6】:

      根据您的用途,您可以考虑使用 Emacs + MozRepl,它基本上可以让您通过 telnet 向 Firefox 发送 javascript 命令。不幸的是,我似乎无法编写 elisp 来完成这项工作,但在 What's in your .emacs? 中的 Sard 显示了从 emacs 中重新加载网页的相关技巧。更多关于整合 emacs 和 mozrepl 的信息来自 original sourcehere,这是一个很酷的技巧,可以在您在 emacs 缓冲区中键入时更新浏览器中的页面 - 获得即时反馈非常好使用 html 时。

      我认为 vim 也可以,但我只在 emacs 中使用过。

      【讨论】:

        【解决方案7】:

        我使用 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)))
        )
        

        【讨论】:

          【解决方案8】:

          此答案基于 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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-02-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-14
            相关资源
            最近更新 更多