เป็นกลุ่ม: ทำให้ Chrome รีเฟรชทุกครั้งที่ฉัน: เขียน

ฉันต้องการวิธีแก้ปัญหาที่ทำสิ่งที่อธิบายไว้ ใน vim wiki ที่นี่ แต่ใช้งานได้บน Chrome

นั่นคือฉันพยายามหลีกเลี่ยงสิ่งนี้:

  • แก้ไขไฟล์ HTML/CSS ของคุณ
  • กดบันทึกเป็นกลุ่ม
  • CMD/CNTRL/ALT + TAB ไปยัง Firefox
  • กด Ctrl-R ใน Firefox เพื่อรีเฟรช
  • CMD/CNTRL/ALT + TAB กลับไปที่ Vim
  • ทำซ้ำครั้งแล้วครั้งเล่า สะดุ้งเล็กน้อยในแต่ละครั้ง

โซลูชัน vim wiki นั้นใช้สำหรับ Firefox และสคริปต์และโซลูชันอื่น ๆ ที่ฉันพบบนเว็บนั้นเป็น Mac เท่านั้น แต่ฉันใช้ Windows และมักจะเปิดเป็นกลุ่มที่ครึ่งซ้ายของหน้าจอ (แก้ไข html) และเปิด Chrome ที่ครึ่งขวาของหน้าจอ (แสดงไฟล์ที่ฉันกำลังแก้ไข)

วิธีแก้ปัญหาที่ "โง่" จริงๆ น่าจะใช้ได้ดีสำหรับฉัน นั่นคือไม่จำเป็นต้องมีการสื่อสารชื่อไฟล์ระหว่าง vim และเบราว์เซอร์ด้วยซ้ำ หากฉันสามารถเปิดโหมดเป็นกลุ่มได้ ให้เรียกมันว่า "รีเฟรชอัตโนมัติ" และตอนนี้ทุกครั้งที่ฉันทำ :w แท็บที่ใช้งานอยู่ในปัจจุบัน ใน Chrome จะรีเฟรชตัวเอง โดยไม่ต้องโฟกัสไปนอกหน้าต่างกลุ่ม นั่นจะสมบูรณ์แบบ เป็นไปได้ไหม?


person Jonah    schedule 04.10.2012    source แหล่งที่มา
comment
กดบันทึกใน Vim? คุณมาจากดาวดวงไหน? ;)   -  person jahroy    schedule 04.10.2012
comment
ความเป็นไปได้ที่ซับซ้อน: มีแอปพลิเคชันสำหรับ Windows ที่อนุญาตให้ใช้สคริปต์กำหนดเป้าหมายหน้าต่างและจำลองการกดแป้นพิมพ์ ไม่สามารถแนะนำสิ่งใดได้เนื่องจากฉันใช้สิ่งเหล่านี้มาระยะหนึ่งแล้ว   -  person madth3    schedule 04.10.2012
comment
@jahroy ฉันมาจากโลกที่คัดลอกวางส่วนนั้นจาก vim wiki?   -  person Jonah    schedule 04.10.2012
comment
ล้อเล่นน่า...ฟังดูแปลกๆ นะ! ;)   -  person jahroy    schedule 04.10.2012
comment
โดยพื้นฐานแล้วคุณสามารถใช้ซีลีเนียมได้หลายวิธีเพื่อให้บรรลุเป้าหมายนั้น ตัวอย่างเช่น โดยการตั้งค่าเซิร์ฟเวอร์ซ็อกเก็ต unix/tcp ในเครื่อง Python ซึ่งเมื่อเชื่อมต่อหรือร้องขอจะส่ง .refresh() ไปยังอินสแตนซ์ของเบราว์เซอร์ จากนั้นทำเช่นนั้นด้วยปลั๊กอินคำขอ http ของ VIM และตั้งค่า autocmd ให้ทำเช่นนั้น และฉันแน่ใจว่ามีวิธีที่ง่ายกว่านี้อีก   -  person elig    schedule 29.08.2020


คำตอบ (6)


ฉันไม่รู้วิธีโหลดหน้า Give Chrome จากเชลล์อีกครั้ง แต่ฉันเห็นด้วยกับ Chiel92 ว่าหากคุณต้องการดูการเปลี่ยนแปลงเมื่อไฟล์มีการเปลี่ยนแปลง คุณสามารถทำได้จากเบราว์เซอร์

ดู LiveReload ใช้งานได้กับ Windows และ Mac (ไม่ใช่สำหรับฉันแล้ว) และรองรับ Safari & โครเมียม.

LiveReload จะตรวจสอบหน้าหลักของคุณตลอดจน CSS และ javscript ทั้งหมดที่เกี่ยวข้อง หากมีการเปลี่ยนแปลงใดๆ ก็จะโหลดซ้ำ

ดูเหมือนว่าพวกเขาจะเปิดตัวเวอร์ชันที่สองแล้ว แต่เว็บไซต์อย่างเป็นทางการของเวอร์ชัน 2 นั้นออฟไลน์อยู่ และดูเหมือนว่าเวอร์ชัน 2 จะไม่อยู่บน GitHub เช่นกัน (เวอร์ชัน 1 อยู่บน github)

person Valor    schedule 04.10.2012
comment
มีอะไรสำหรับ linux ในปี 2013 หรือไม่? - person fouronnes; 03.02.2013

วิธีแก้ปัญหาที่อาจใช้ได้ผลสำหรับคุณคือในการเข้ารหัส html ของคุณให้รวมบรรทัดในแท็ก head

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

สิ่งนี้จะโหลดหน้านี้ซ้ำทุก ๆ 30 วินาทีโดยตรงจาก w3schools.com ทันทีเมื่อคุณต้องการ ปรับใช้เพียงแค่ลบบรรทัดนั้น

person 5hammer    schedule 23.05.2014

หากคุณกำลังทำงานกับ 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' เพื่อให้เหมาะกับขั้นตอนการทำงานของคุณ

คุณสามารถพิมพ์ฟังก์ชันลงในพรอมต์คำสั่ง 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() จะปิดใช้งานเมื่อคุณดำเนินการเสร็จแล้ว

person Joel Strouts    schedule 08.02.2019

ฉันเคยลองใช้ LiveReload มาแล้ว แต่มันก็ไม่ใช่วิธีแก้ปัญหาที่เชื่อถือได้มากนัก: มันมีบั๊ก มาก และไม่เสถียร และกระบวนการติดตั้งก็เกี่ยวข้องมากเกินไปจนเกิดผลน้อยเกินไป

ตั้งแต่นั้นมา (มากกว่าหนึ่งปี) ฉันใช้ส่วนขยาย Chrome ขนาดเล็ก ซึ่งจะโหลดหน้าเว็บซ้ำโดยอัตโนมัติทุกๆ x วินาที มันไม่ได้ "ฉลาด" เลย แต่ทำงานได้ดีทั้งกับไฟล์ในเครื่องและไฟล์ที่โฮสต์ ฉันใช้มันมานับครั้งไม่ถ้วนโดยไม่มีผลข้างเคียงใดๆ

วิธีแก้ปัญหาบน Vim Wiki นั้นเป็นไปได้เนื่องจาก MozREPL ซึ่งอนุญาตให้กระบวนการภายนอกโต้ตอบกับ Firefox จากนั้น การเขียน autocmd ที่กระตุ้นให้เกิดการรีเฟรชบน :w หรือบน CursorHold ค่อนข้างเป็นเรื่องเล็กน้อย แต่ AFAIK ไม่มีเครื่องมือดังกล่าวสำหรับ Chrome/Chromium และไม่มี API ภายนอก LiveReload เป็นแฮ็คที่ยอดเยี่ยมแต่ล้มเหลว และฉันเชื่อว่าคุณจะต้องจัดการกับวิธีแก้ปัญหาที่โง่เขลาหากคุณต้องทำงานกับ Chrome

แก้ไข

ฉันเพิ่งจำ สคริปต์ ที่ทำงานได้ดีบนกล่อง Linux นี้ แต่มีข้อจำกัดเล็กน้อยบน Mac OS X และดูเหมือนว่าจะไม่ทำงานบน Windows โดยพื้นฐานแล้วคุณลงทะเบียนหน้าต่าง/แท็บด้วยส่วนหนึ่งของชื่อ:

$ webrf setup-by-search test.html

ถ้าอย่างนั้นคุณก็ทำ:

$ webrf refresh

เพื่อรีเฟรชหน้า

person romainl    schedule 04.10.2012

ฉันใช้ 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>

โดยพื้นฐานแล้วจะบอก vim ผ่านคำสั่ง powershell เพื่อให้เคอร์เซอร์ของเมาส์ไปที่:

  1. ตำแหน่ง -1290, 50 (ซึ่งเป็นที่ตั้งของปุ่มรีเฟรชของ Chrome)
  2. คลิกเมาส์ซ้าย
  3. ตำแหน่ง 40,40 (ซึ่งเป็นที่ที่กลุ่มของฉันอยู่ในแบบเต็มหน้าจอ)
  4. คลิกเมาส์ซ้าย

จำเป็นต้องใช้ขั้นตอนที่ 3 และ 4 เพื่อปรับโฟกัสเป็นกลุ่ม ฉันพยายามส่ง ALT-TAB แต่ vimrc ของฉันไม่ชอบสัญลักษณ์ %

person Ibn Rushd    schedule 23.03.2018

บนระบบปฏิบัติการ 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
person elig    schedule 29.08.2020