7

我想要一个执行 vim wiki here 中描述的解决方案,但它适用于 Chrome。

也就是说,我试图避免这种情况:

  • 编辑您的 HTML/CSS 文件。
  • 在 Vim 中点击保存。
  • CMD/CNTRL/ALT+TAB到 Firefox。
  • 在 Firefox 中按下Ctrl-R以刷新。
  • CMD/CNTRL/ALT+TAB回到 Vim。
  • 一遍又一遍地做,每次都畏缩一点。

vim wiki 解决方案适用于 firefox,而我在网上找到的其他脚本和解决方案仅适用于 Mac。但我在 Windows 上,通常会在屏幕的左半部分打开 vim(编辑 html),在屏幕的右半部分打开 chrome(显示我正在编辑的文件)。

一个真正“愚蠢”的解决方案对我来说很好。也就是说,vim 和浏览器之间甚至不需要文件名的通信。如果我可以在 vim 中打开一个模式,将其称为“自动刷新”,现在每当我在 chrome 中:w执行当前活动的选项卡时,它都会自行刷新,而不会将焦点从 vim 窗口中移开。那将是完美的。可能吗?

4

6 回答 6

1

我不知道如何从 shell 重新加载给定的 chrome 页面,但是,我同意 Chiel92 的观点,如果您需要在文件更改时查看您的更改,您可以从浏览器中执行此操作。

请参阅LiveReload,适用于 Windows 和 Mac(当时不适合我)并支持 Safari 和 Chrome。

LiveReload 将检查您的主页以及它所依赖的所有 css 和 javscript,如果有任何更改,它将重新加载它。

他们似乎已经发布了第二个版本,但是第 2 版的官方网站已经离线,而且第 2 版似乎也没有在 github 上。(版本 1 它在 github 上

于 2012-10-04T18:50:58.353 回答
1

可能对您有用的解决方案是在您的 html 编码中包含 head 标签中的行

    <meta http-equiv="refresh" content="30" />

现在,当您要部署它时,这将每 30 秒直接从 w3schools.com重新加载页面,只需删除该行

于 2014-05-23T14:40:52.340 回答
1

如果你在 mac 上工作,那么一点苹果脚本就可以完成这项工作。

将此功能放在您的 vim 配置中将使您自动执行在窗口之间切换和刷新您描述的过程。

function! ReloadBrowser()
    silent exe "!osascript -e 'tell app \"Firefox\" to activate\<cr>
            \tell app \"System events\"\<cr> keystroke \"r\" using command down\<cr>
            \end tell'"
    silent exe "!osascript -e 'tell app \"Iterm2\" to activate'"
endfunction

调用该函数会将系统焦点更改为 Firefox,按 CMD-R 刷新页面,然后将焦点更改回 Iterm2。

更改“Firefox”和“Iterm2”以适应您的工作流程。

您可以在 vim 命令提示符中键入函数,:call ReloadBrowser()或使用如下映射触发调用:

nnoremap <leader>rl call ReloadBrowser()<cr>

要在您编写文件的任何时候触发调用,您可以使用自动命令。

augroup AutoReload
    au!
    autocmd BufWritePost *.filetype call ReloadBrowser()
augroup END

这可能会有点烦人,所以如果你真的想要这种行为,我认为最好让它像这样切换:

let s:auto_reload = v:false

function! ToggleAutoReload()
    if s:auto_reload
        augroup AutoReload
            au!
            autocmd BufWritePost *.filetype call ReloadBrowser()
        augroup END
    else
        augroup AutoReload
            au!
        augroup END
    endif
    let s:auto_reload = !s:auto_reload
endfunction

有了它,您可以手动触发重新加载,<leader>rl 或者:call ToggleAutoReload()在保存文件时启用自动重新加载,:call ToggleAutoReload()完成后第二个将禁用它。

于 2019-02-08T20:21:32.503 回答
0

我过去曾尝试过 LiveReload,但它不是一个非常可靠的解决方案:它有很多bug 和不稳定,而且安装过程太复杂,效果太差。

从那时起,(一年多)我一直在使用一个小的 Chrome 扩展程序,它每秒自动重新加载网页x。它根本不是“智能”的,但它适用于本地文件和托管文件。我用过无数次,没有任何副作用。

Vim Wiki 上的那个解决方案是可能的,因为 MozREPL 允许外部进程与 Firefox 交互。从那里编写一个autocmd触发刷新 on:w或 on的代码非常简单CursorHold。但是 AFAIK 没有适用于 Chrome/Chromium 的此类工具,并且它们不提供外部 API。LiveReload 是一个出色但失败的 hack,我相信如果你必须使用 Chrome,你将不得不接受愚蠢的解决方案。

编辑

我只记得有一个脚本在这个 Linux 机器上运行良好,但在 Mac OS X 上有点受限,而且似乎在 Windows 上不起作用。本质上,您使用其名称的一部分注册一个窗口/选项卡:

$ webrf setup-by-search test.html

那么您只需执行以下操作:

$ webrf refresh

刷新页面。

于 2012-10-04T20:08:34.000 回答
0

我使用 WSL 和两个屏幕,所以对我来说这很有效。(就像每个 :write 有点太多了)

nmap <leader>t :silent !powershell.exe -command "Add-Type -AssemblyName System.Windows.Forms; [Windows.Forms.Cursor]::Position = \"-1290,50\"; Add-Type -MemberDefinition '[DllImport(\"user32.dll\")] public static extern void mouse_event(int flags, int dx, int dy, int cButtons, int info);' -Name U32 -Namespace W; [W.U32]::mouse_event(6,0,0,0,0); [Windows.Forms.Cursor]::Position = \"40,40\"; [W.U32]::mouse_event(6,0,0,0,0);"<CR><CR>

它基本上通过 powershell 命令告诉 vim 让鼠标光标转到:

  1. position -1290, 50 (chrome的刷新按钮所在的位置)
  2. 鼠标左键单击
  3. 位置 40,40(这是我的 vim 全屏显示的位置)
  4. 鼠标左键单击

需要第 3 步和第 4 步来重新调整 vim 我尝试发送 ALT-TAB 但我的 vimrc 不喜欢 % 符号。

于 2018-03-23T14:53:45.917 回答
0

在 Windows 操作系统上,您可以使用AutoHotKey脚本,该脚本将自动执行按键操作。
例如,下面的脚本将绑定Left Alt + r切换到浏览器窗口,发送一个Control + r(刷新)然后回到你之前的窗口。
加载页面后,替换Title_of_your_webpage为浏览器的窗口标题字符串。

!r::
    WinGet, winid, , Title_of_your_webpage
    WinActivate, ahk_id %winid%
    Send ^r
    Send !{Tab}
    Return
于 2020-08-29T11:46:28.980 回答