Есть ли способ динамически проверить вывод html с помощью vim? - PullRequest
8 голосов
/ 10 сентября 2011

Когда я пишу html в MacVim, я сохраняю тот же файл открытым в веб-браузере, чтобы можно было просмотреть вывод html. Одна из вещей, которые мне не нравятся в этом методе, заключается в том, что мне постоянно приходится выходить из vim, заходить в браузер и перезагружать HTML, чтобы увидеть обновления. Есть ли более элегантное решение с vim, которое будет динамически обновлять вывод html по мере его ввода в vim? Кажется, я помню, что Textmate мог это сделать? Спасибо.

UPDATE: Я нашел видео, которое я пытался запомнить. Вы можете найти его здесь:

http://files.fletcherpenney.net/TextMate-Preview.mov

Ответы [ 3 ]

6 голосов
/ 10 сентября 2011

Добавьте это к вашему .vimrc :

" Refresh WebKit
nnoremap \r :Refresh<CR>

command! Refresh call RefreshWebKit() 

function! RefreshWebKit()
    silent !osascript -e 'tell application "WebKit"'
                    \ -e '  set p_url to URL of current tab of front window'
                    \ -e '  set URL of current tab of front window to p_url'
                    \ -e 'end tell'
endfunction

Это создаст карту, команду и функцию.Я мог бы присоединиться к ним, но таким образом это более понятно, и я могу повторно использовать функцию в других местах.

Функция вызывает небольшой AppleScript, чтобы снова установить URL-адрес самой передней вкладки, обновляя ее.Это будет работать под Safari и WebKit, но я не могу гарантировать, что он работает с другими браузерами.Если нет, воспользуйтесь Google «refresh {browser} applecript» и используйте другой сценарий.

Карта просто вызывает команду, которая вызывает функцию.Таким образом, вы можете написать свой файл и использовать его для обновления браузера, не покидая Vim.Точно так же, используйте :Refresh, чтобы сделать то же самое.

Обратите внимание, что вы можете изменить некоторые вещи:

  • Саму карту, я использовал \r, используйте все, что вы чувствуетеУдобно.
  • Название функции, если вы хотите избежать коллизий с другими существующими функциями
  • Браузер.Здесь я использовал WebKit, который не является Safari.Это ночная сборка самого WebKit.Используйте Chrome, Firefox или любое другое имя (с соответствующими изменениями)

Краткое примечание: дополнительные параметры -e, передаваемые программе, предназначены только для удобства чтения.Делайте это так, как вы хотите.


Посмотрите также на авто-команды (отметьте : h autocmd.txt ).Это позволит вам сделать это более автоматизированным способом, таким как:

:autocmd BufWrite *.html Refresh

Это будет вызывать :Refresh каждый раз, когда вы пишете буфер для .html файлов.Также есть события для вставленного текста и т. Д.

3 голосов
/ 10 сентября 2011

Я видел множество способов сделать это:

или простой метатег:

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

Мне нравятся высокотехнологичные решения высокотехнологичных проблем, поэтому я на самом деле использую метатег, но решение Сидилла кажется превосходным.

0 голосов
/ 15 сентября 2011

Я использую (osx) kicker ruby ​​gem , который автоматически запускается при изменении файла:

kicker -e "osascript -e 'tell application \"WebKit\" to do JavaScript \"window.location.reload()\" in first document'"

Или вставляю его в файл .kick для большего контроля над тем, какие файлы должны запускатьсяэто и / или несколько действий:

process do |files|
  unless files.grep(/\.(html|css|js)$/).empty?
    execute("osascript -e 'tell application \"WebKit\"
      do JavaScript \"window.location.reload()\" in first document
    end tell'")
  end
end
...