2012/11/01


先日「Google 日本語入力 - CGI API」が公開されましたね。
Google 日本語入力 - CGI API
Google 日本語入力 - CGI API デベロッパーガイド

Google CGI API for Japanese Input Google CGI API for Japanese Input は、日本語変換をインターネット上で実現するための、CGI サービ...

http://www.google.com/intl/ja/ime/cgiapi.html
こんなの migemo の為にあるみたいなもんじゃないですか!

さっそく作りました。 "=============================================================================
" File: gmigemo.vim
" Author: Yasuhiro Matsumoto <mattn.jp@gmail.com>
" Last Change:08-Oct-2010.
" Version: 0.1
" WebPage: http://github.com/mattn/gmigemo-vim
" Usage:
"
"   :GoogleMigemo ここではきものをぬぐ
"     match: "ココでは着物を脱ぐ"
"
"   :GoogleMigemo ここで はきものを ぬぐ
"     match: "此処で履物を脱ぐ"
"
" Require:
"   webapi-vim: http://github.com/mattn/webapi-vim

if exists("loaded_gmigemo") || v:version < 700
  finish
endif
let loaded_gmigemo = 1

function! s:nr2byte(nr)
  if a:nr < 0x80
    return nr2char(a:nr)
  elseif a:nr < 0x800
    return nr2char(a:nr/64+192).nr2char(a:nr%64+128)
  else
    return nr2char(a:nr/4096%16+224).nr2char(a:nr/64%64+128).nr2char(a:nr%64+128)
  endif
endfunction

function! s:nr2enc_char(charcode)
  if &encoding == 'utf-8'
    return nr2char(a:charcode)
  endif
  let char = s:nr2byte(a:charcode)
  if strlen(char) > 1
    let char = strtrans(iconv(char, 'utf-8', &encoding))
  endif
  return char
endfunction

function! g:GoogleMigemo(word)
  let word = substitute(a:word, '\s', ',', 'g')
  let url = "http://www.google.com/transliterate"
  let res = http#get(url, { "langpair": "ja-Hira|ja", "text": word }, {})
  let str = iconv(res.content, "utf-8", &encoding)
  let str = substitute(str, '\\u\(\x\x\x\x\)', '\=s:nr2enc_char("0x".submatch(1))', 'g')
  let str = substitute(str, "\n", "", "g")
  let g:hoge = str
  let arr = eval(str)
  let mx = ''
  for m in arr
    call map(m[1], 'substitute(v:val,"\\\\", "\\\\\\\\", "g")')
    let mx .= '\('.join(m[1], '\|').'\)'
  endfor
  return mx
endfunction

function! s:GoogleMigemo(word)
  if executable('curl') == 0
    echohl ErrorMsg
    echo 'GoogleMigemo: curl is not installed'
    echohl None
    return
  endif

  let word = a:word != '' ? a:word : input('GoogleMigemo:')
  if word == ''
    return
  endif
  let mx = g:GoogleMigemo(word)
  let @/ = mx
  let v:errmsg = ''
  silent! normal n
  if v:errmsg != ''
    echohl ErrorMsg
    echo v:errmsg
    echohl None
  endif
endfunction

command! -nargs=* GoogleMigemo :call <SID>GoogleMigemo(<q-args>)
nnoremap <silent> <leader>mg :call <SID>GoogleMigemo('')<cr>

" vi:set ts=8 sts=2 sw=2 tw=0:
いつも1ファイルで動くものを提供してきましたが、そろそろvimもライブラリとアプリケーションを分けないとvimの今後があやぶまれるな...(vimjoltsってなんだっけ汗)...と思ったので、今回は手前味噌ですが「webapi-vim」というのを使っています。
mattn's webapi-vim at master - GitHub

webapi-vim: vim interface to Web APIDescription:Require: curl command : http://curl.haxx.se/Thanks T...

http://github.com/mattn/webapi-vim
先日 vim-oauth で使った奴ですね。
まぁ単体にしたい人は書き換えて下さい。

使い方は簡単。 :GogoleMigemo ここではきものをぬぐ とすると、「ココで履物を脱ぐ」がマッチします。なお、「ここでは着物を脱ぐ」が検索したかったよ...という全国2000万人のエロいオッサン達。慌てないで。
:GogoleMigemo ここでは きものを ぬぐ とスペースを入れると認識してくれ、ちゃんと「此処では着物を脱ぐ」にマッチします。もちろん「ここで はきものを ぬぐ」とすれば「此処で履物を脱ぐ」や「個々で履物を脱ぐ」にマッチしたりもします。
<leader>mg にキーマップしてあります。あと、グローバル関数「GoogleMigemo」も提供してあるので「let foo = GoogleMigemo(xxx)」な使い方も出来ます。
それなりに便利かもしれません。もちろんネットに繋がってないと使えませんし、エロい語句を検索すると、Google先生にネタを送ってしまいます。
ご利用は計画的に。
Posted at by



2012/10/30


最近 yuroyoro さんが作った git issue が便利でたまらない。コンソールから redmine や github の issue が操作できるし、全て CUI で完結出来る。
しかしながら、どうしても「Vim で、しかも REST 的に redmine を扱いたい!」という欲望がおさえられず、作ってしまった。
mattn/vim-metarw-redmine - GitHub
https://github.com/mattn/vim-metarw-redmine/
kana さんの vim-metarw 経由で redmine を読み書きできます。動作には vim-metarw が必要です。
kana/vim-metarw - GitHub
https://github.com/kana/vim-metarw
let g:metarw_redmine_server = 'https://your-redmine.example.com'
let g:metarw_redmine_apikey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
vimrc 等にこの様に設定しておけば使えます。
redmine 側は「管理」→「設定」→「認証」→「RESTによるWebサービスを有効にする」をチェックし、「個人設定」からAPIキーを表示すれば見れます。

:e redmine: とするとプロジェクト一覧
project list
プロジェクト一覧でエンターすると、チケットの一覧
issue list
さらにエンターすると
issue edit
チケットが直接編集出来ます。status を閉じたりする場合、Close に相当する status の ID を覚えておく必要がありますが、「管理」→「チケットのステータス」から ID が分かるのでそこから知って下さい。
こんなの喜ぶのは僕しかいないかも知れませんが、奇特な人へ。

どうしてもこれを Windows から使いたいという、さらに奇特な人は vim-metarw を Windows でも動作する様にした私の fork をお使い下さい。
mattn/vim-metarw - GitHub
https://github.com/mattn/vim-metarw

追記
投稿の方法を書くのを忘れてました。

タイトル1行、本文数行を書いて :w redmine:/[プロジェクトID] に書き込んで下さい。

Posted at by



2012/10/22


私も結構長くvimを使ってきましたが、実はsnippet系やsorround系のプラグインは殆ど使っていません。理由は入力の規則が多様すぎて覚えられないのと、それくらい手で入力出来るんじゃないか...と思っていたのが理由でもあります。
sorround.vimなんかは何度か常用をチャレンジしてみましたが、結局諦めました。
先日、zen-codingを見つけ、「へー便利そうだなぁ」と思ったと同時にこのくらいならvimscript(pure vimscript)だけで書けるな...と思ったので書いてみました。
と言ってもEmacsへの移植なんかと同様に「Expand Abbreviation」だけです。
正直言うとzen-codingのプロジェクトページにvimがラインナップされていなかったのがキッカケだったりもしますが...。ただ、後から知ったのですがsnipMateという物でzen-codingらしき事が出来るらしく、またsparkupというプラグイン(python拡張使用)でzen-codingと同等の事が出来るらしいのです。
しまった...とも思ったのですが残念ながらそれを知ったのが完成間近だったので、思いっきり後出しジャンケンになってしまいました。
でももったいなかったので紹介しておきます。

zen-codingとはHTML/CSSを入力するのに便利な機能で、どんな物かはこの辺を見てもらえると分かるかと思います。
以下、vim版の動作として紹介します。
キーバインドはzen-codingの移植先エディタによって異なります。

例えば、「よーしパパ、今日はHTML5書くぞ!」って時には html:5_ "_"はカーソル位置(挿入モード)です。
までタイプして<c-y>,とタイプすると <!DOCTYPE HTML>
<html lang="en">
<head>
    <title></title>
    <meta charset="UTF-8">
</head>
<body>
    _
</body>
</html>
こんな感じに展開されてママもご機嫌です。これだけだと単なるsnippet機能でしかありませんが、例えば「じゃぁ今度はid属性が"foo"のDIVにclass属性が連番でbar1,bar2,bar3ってなる様なアンカー作るぞ!」って時には div#foo > a.bar$*3
とタイプして、おもむろに<c-y>,をタイプします。すると
<div id="foo">
    <a href="" class="bar1">_</a>
    <a href="" class="bar2"></a>
    <a href="" class="bar3"></a>
</div>
と展開されママもニコニコ、もう夫婦円満間違いなしです。
zen-codingとしてはほぼ完成してます。ただ上記で言った様にsparkupを見つけて悔しかったのでsparkupが採用している拡張記法もサポートしてみました。
たとえば a[href=index.html]{Home}
こんなのが <a href="index.html">Home</a>
この様に展開されたり #header > ul > li < p{Footer}
こんなのが <div id="header">
    <ul>
        <li>_</li>
    </ul>
    <p>Footer</p>
</div>
こんな風に展開されたりします。一応、現状sparkupと同様にzen-codingの上位互換でありながら、sparkupの拡張記法も使える様にしました。
更に変数 g:user_zen_settings を設定する事で自前の snippet や展開式を書く事が出来ます。
例えばperlであれば
let g:user_zen_settings = {
\  'perl' : {
\    'indentation' : '  ',
\    'aliases' : {
\      'req' : "require '|'"
\    },
\    'snippets' : {
\      'use' : "use strict\nuse warnings\n\n",
\      'w' : "warn \"|\";",
\    }
\  }
\}
こんな風にしておき
(perl専用のindentationの位置はperlの下です。)
w<c-y>, と挿入モードでタイプすると warn "_";
と展開されてメシウマウマです。


使っているvimでpython拡張が動かなかったり、夫婦仲がピンチって方、お一つどうでしょうか。
mattn's zencoding-vim at master - GitHub

zen-coding for vim: http://code.google.com/p/zen-coding/

http://github.com/mattn/zencoding-vim
Posted at by