Vimから検索&投稿できるようにしてみたい

変数名やら関数名やらを考えるのは当然プログラミング中な訳で、自分の場合はVimmerなのでVimから名付けて.ね〜むAPIを叩いて、検索&登録できないかちょっと考えてみました。

どうするのが良いか色々考えたんですが、Vimの関数として定義しておいて、":hoge 作成する"みたいな感じで検索できるのが良いかな、という事でVimスクリプトで実装してみる事に。

…とは言え、Vimスクリプトなんてまともに触った事が無い…Vimスクリプトだけで何とかするのは無理と判断して、検索&登録の機能自体はPHPで実装しちゃって、Vimスクリプトから呼び出す形にしました。

Vimスクリプトを書いてみよう

という事で、今回の話のメインはVimから呼び出すところなので、Vimスクリプトのところだけコードを晒してみます。

if exists('loaded_namedwords')
    finish
endif
let loaded_namedwords = 1

if !exists('g:nw_command')
    let g:nw_command = '!php ~/bin/namedwords/nwcli.php'
endif

function! GetNamedwords(meaning)
    exec g:nw_command." search '".a:meaning."'"
endfunction

function! PostNamedwords(meaning, namedword, ...)
    let mode = 'create'

    let cmd_str = g:nw_command
    let cmd_str = cmd_str." ".mode
    let cmd_str = cmd_str." '".a:meaning."'"
    let cmd_str = cmd_str." '".a:namedword."'"

    if a:0 == 0
        let cmd_str = cmd_str." ''"
    else
        let cmd_str = cmd_str." '".a:1."'"
    endif

    if a:0 >= 2
        let cmd_str = cmd_str." '".a:2."'"
    elseif exists('g:nw_author')
        let cmd_str = cmd_str." '".g:nw_author."'"
    endif

    exec cmd_str
endfunction

exec 'command! -nargs=+ Nwget :call GetNamedwords(<f-args>)'
exec 'command! -nargs=+ Nwpost :call PostNamedwords(<f-args>)'

検索&登録の機能自体は、"~/bin/namedwords/nwcli.php"というファイルで既に実装済みである事が前提で、呼び出す時の引数を調整する為のラッパー的な感じです。

"~/.vimrc"とかに、

let g:nw_author = 'TOM'

なんて書いておくと、投稿者名が自動で入力されるようにしています。

早速試してみよう

まず登録してみる。":Nwpost 作成する create"と入力して…

実行すると…

登録できました。

今度は登録したものを検索してみる。":Nwget 作成する"と入力して…

実行すると…

検索できました。

単純だけど、和英辞書引くのにいちいちブラウザ開いたりしなくていいし、ちょっとした綴りのチェックぐらいに使うのにはちょうどいいかもですね。

とりあえず、まずは自分自身でVim使っている時に思い付いた訳語があったら、ぼちぼち登録していくようにしようと思います。

Vim以外にも、Twitterで検索&登録できる仕組みとかあると面白そうかなと思っていたんですが、自分はTwitterは使わない人なので、どのくらい有用なのかがいまいち分からなくて、ちょっと躊躇してます…。

まぁ、実験も兼ねて、"@naduketename search 作成する"とかすると検索結果を返信してくれるぐらいのbotでも作ってみようかな…なんて思う今日この頃でしたとさ。