いろんないみで

はまっちゃた

windows。vim-quickrunではまった。 解決。

windows好き。

「前回の投稿 - windows。vim-quickrunではまった。」の続き。

quickrunの設定について、そのうち調べようかと思っていたけれど。 また今度とかで「放置する良くない」と思って調べて設定したので書きます。

まず設定してみての感想は「quickrunてすごくべんり!!」です。 設定もしやすくできてる。すご~い。

マイマシンはwindowsなので、windowsの設定です。(マックいいなぁ~。でもwindowsすき)


なにがしたいの?

まず、何がしたいのかをまとめてみる。

なんで?

  1. shellslashは譲れない。(セパレータが\だと不便。)
  2. shellslashが設定されていると、quickrunが上手くいかない。
  3. vimprocを使えば解決できるみたい。だけど...

どうしたい?

  1. quickrunが外部コマンドを呼ぶ前にnoshellslashにする
  2. quickrunが外部コマンドを実行したあとはshellslashに戻したい
  3. quickrunのプレヴューウインドウのファイルフォーマットはdosにしたい

3.の理由は自分は主にfileformatにunixを指定しているので、outputterrunnerにvimprocを指定した時に改行コードがムカつく(●`ε´●)

という感じ。


なにを調べた?

調べるのにしたことは、「へるぷを引く」です。

:h quickrun@ja

「日本語へるぷ」があるってすごく親切で嬉しい!


なにかわかった?

quickrunにはモジュールを登録できる仕組みがあるみたい。

モジュールの登録                *quickrun-register-module*

モジュールは、|quickrun#module#register()| を使って登録することで使えるように
なります。
また、'runtimepath' 内に autoload/quickrun/{module-kind}/{module-name}.vim を
作成し、autoload#quickrun#{module-kind}#{module-name}#new() 関数を作っておく
と、その戻り値が quickrun の初回ロード時に自動的に登録されます。

ヘルプのモジュールの属性の項をぼんやり眺めていたら、以下の部分で何とかできそうだなぁと思いました。

 module.init({session})            *quickrun-module.init()*
     モジュールの初期化時に呼び出されます。

 module.sweep()                *quickrun-module.sweep()*
     実行の完了、もしくは強制終了時に呼び出されます。実行中のデータの後始末
     を行います。

あと、quickrunのプレヴューウィンドウはファイルタイプがquickrunに設定されている事がわかりました。

設定してみた

vimrcに設定してみました。

" 2014-07-18: 書きなおした
if has('win32') || has('win64')

    function! s:hook_quickrun_windows()
        let hook = {
        \   "name" : "nossl",
        \   "kind" : "hook",
        \}

        function! hook.init(session)
            let config = a:session.config
            let runner = config.runner
            let enable = get(config, 'hook/nossl/enable', 1)
            let self.config.enable = enable && &ssl && runner ==# 'system'
        endfunction

        function! hook.on_module_loaded(...)
            if &ssl
                let self.save_ssl = &ssl
                set nossl
            endif
        endfunction

        function! hook.sweep(...)
            if has_key(self, 'save_ssl')
                let &ssl = self.save_ssl
                unlet self.save_ssl
            endif
        endfunction

        call quickrun#module#register(hook)
    endfunction

    call s:hook_quickrun_windows()
endif

今のところ満足です o(^-^)o

最後に

quickrun べんり!!

[追記]

変な設定をせずにvimprocを入れたらよいです。