Vim:随时随地刷新Chrome:写入

时间:2012-10-04 18:29:58

标签: google-chrome vim

我想要一个能够执行in the 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中启用某个模式,请将其命名为“自动刷新”,现在,只要我执行:w Chrome中的当前活动标签,就会自行刷新,而无需关注焦点vim窗口。那将是完美的。有可能吗?

6 个答案:

答案 0 :(得分:1)

我不知道如何从shell重新加载一个给予镀铬的页面,但是,我同意Chiel92的说法,如果你需要在文件更改时看到你的更改,你可以从浏览器那里做到。

请参阅LiveReload,适用于Windows& Mac(不适合我)并支持Safari&铬。

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

他们似乎已经推出了第二个版本,但是版本2的官方网站它处于脱机状态,并且似乎不是版本2它也在github上。 (版本1是it's on github

答案 1 :(得分:1)

如果您使用的是Mac,则需要执行一些Apple脚本来完成这项工作。

在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”以适合您的工作流程。

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

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()将在您保存文件时将其禁用完成了。

答案 2 :(得分:0)

我过去曾尝试使用LiveReload,但它不是一个非常可靠的解决方案:非常错误且不稳定,安装过程太复杂,效果太小。< / p>

从那时起(超过一年),我一直在使用a small Chrome extension每隔x秒自动重新加载网页。它不是&#34;聪明&#34;完全可以,但它适用于本地文件和托管文件。我已经无数次地使用它而没有任何副作用。

Vim Wiki上的解决方案是可行的,因为MozREPL允许外部进程与Firefox交互。从那里写一个autocmd触发:wCursorHold上的刷新是非常微不足道的。但是AFAIK没有Chrome / Chromium这样的工具,他们也没有提供外部API。 LiveReload是一个辉煌但却失败的黑客,我相信如果你必须使用Chrome,你必须解决这个愚蠢的解决方案。

修改

我只记得a script在这个Linux机器上运行得很好,但在Mac OS X上有点受限,似乎无法在Windows上运行。基本上,您注册一个窗口/选项卡,其中包含部分名称:

$ webrf setup-by-search test.html

然后你只需:

$ webrf refresh

刷新页面。

答案 3 :(得分:0)

可能适合您的解决方案是在您的html编码中包含head标记中的行

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

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

答案 4 :(得分:0)

我使用WSL和两个屏幕,所以对我来说这很有用。 (和每个人一样:写得太多了)

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>

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

  1. 位置-1290,50(这是chrome的刷新按钮所在的位置)
  2. 鼠标左键单击
  3. 位置40,40(这是我的vim全屏显示的位置)
  4. 鼠标左键单击
  5. 需要重新调整vim的步骤3和4我尝试发送ALT-TAB但我的vimrc不喜欢%符号。

答案 5 :(得分: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