Vimでファイル保存時にFirefoxをリロードする(with MozLab)

以前作った vim script

この記事(http://la.ma.la/blog/diary_200609280045.htm)を参考に、MozLab(http://dev.hyperstruct.net/trac/mozlab)のMozReplを使って、Vimでファイル(*.html,*.htm,*.js,*.css)保存時にFirefoxをリロードするVimスクリプトを作ってみた。

を修正して、 vim が ruby, python, perl のいずれかが使えるようにコンパイルされていれば動作するようにしました。

どれも使えない場合は個別のスクリプトファイル(*.rb, *.py, *.pl)を使って動作させます。どれを使うかは reloadfirefox.vim を修正して選べます。(デフォルトは *.rb )

reloadfirefox.vim

if exists('g:reload_firefox')
    finish
endif

command -nargs=0 Setreloadfirefox :call SetMozreplReloadFirefox()

function! ReloadFirefox()
    if has('ruby')
        :ruby <<EOF
            require "net/telnet"

            telnet = Net::Telnet.new({
                "Host" => "localhost",
                "Port" => 4242
            })

            telnet.puts("content.location.reload(true)\n")
            telnet.puts("repl.quit()\n")
            telnet.close
EOF
    elseif has('python')
        :python <<EOF
import telnetlib
HOST = "localhost"
PORT = 4242
telnet = telnetlib.Telnet(HOST, PORT)
telnet.read_until("repl>")
telnet.write("content.location.reload(true)\n")
telnet.write("repl.quit()\n")
telnet.close()
EOF
    elseif has('perl')
        :perl <<EOF
            use strict;
            use warnings;
            use Net::Telnet;

            my $host = 'localhost';
            my $port = 4242;
            my $prompt = '/[repl>]/';

            my $telnet = new Net::Telnet(
                Host => $host,
                Port => $port,
                Timeout => 10,
                Prompt => $prompt,
            );

            $telnet->open($host);
            $telnet->cmd("content.location.reload(true)\n");
            $telnet->cmd("repl.quit()\n");
            $telnet->close;
EOF
    else
        if has('gui_win32')
            " for Windows
            let ruby_script_file = 'd:/cygwin/home/tom/bin/mozrepl_reload_firefox.rb'
        else
            " for Mac, Linux, Cygwin
            let ruby_script_file = $HOME . '/bin/mozrepl_reload_firefox.rb'
        endif

        if filereadable(ruby_script_file)
            call system(ruby_script_file)
        else
            echo "ERROR : File \"" . ruby_script_file . "\" is NOT found."
        endif
    endif
endfunction

function! SetMozreplReloadFirefox()
    if exists('g:reload_firefox')
        autocmd! mozreplreloadfirefox
        unlet g:reload_firefox
        echo "\"mozreplreloadfirefox\" of augroup has been deleted."
    else
        augroup mozreplreloadfirefox
           autocmd BufWritePost *.html,*.htm,*.php,*.js,*.css call ReloadFirefox()
        augroup END
        let g:reload_firefox=1
        echo "Firefox browser content is reloaded when file(*.html,*htm,*.php,*.js,*.css) is saved."
    endif
endfunction

mozrepl_reload_firefox.rb

require "net/telnet"

telnet = Net::Telnet.new({
    "Host" => "localhost",
    "Port" => 4242
})

telnet.puts("content.location.reload(true)\n")
telnet.puts("repl.quit()\n")
telnet.close

mozrepl_reload_firefox.py

import telnetlib

HOST = "localhost"
PORT = 4242
telnet = telnetlib.Telnet(HOST, PORT)
telnet.read_until("repl>")
telnet.write("content.location.reload(true)\n")
telnet.write("repl.quit()\n")
print telnet.read_all()
telnet.close()

mozrepl_reload_firefox.pl

use strict;
use warnings;
use Net::Telnet;

my $host = 'localhost';
my $port = 4242;
my $prompt = '/[repl>]/';

my $telnet = new Net::Telnet(
    Host => $host,
    Port => $port,
    Timeout => 10,
    Prompt => $prompt,
);

$telnet->open($host);
$telnet->cmd("content.location.reload(true)\n");
$telnet->cmd("repl.quit()\n");
$telnet->close;

ファイルにまとめたものがこちら "Vimでファイル保存時にFirefoxをリロードする(with MozLab) " からダウンロードできます。

コメント

この記事へのコメントはまだありません。

Top