Octopressで記事を書くにあたってGistにコード貼ったり、それをVim上で管理できるGist.vimを導入したんです が、その際に少し嵌まったのでその解決法と使ってる内にもう少し便利にしたいな―。という欲求がフツフツと 沸いてきたので、vimスクリプトを書いてみた。
環境はWindows XP(SP3)+vim 7.3.393(Kaoriya版)。
Gist.vimの導入
cURLのダウンロードとインストール
Windows系の場合、まずはcURLは標準で入ってないのでダウンロードする必要がある。 (linux系なら多分最初から入ってる。Macも最近のなら入ってるのかな?)
よりダウンロード。cygwinは使ってないので、
Win32 - Generic
| Win32 2000/XP 7.23.1 binary SSL enabled Gunter Knauf 1.33 MB
をダウンロードしてみた。インストーラは付いてないので解凍して
curl.exe
libcurl.dll
libeay32.dll
libssl32.dll
の4ファイルをパスの通ったフォルダにコピー(または解凍したフォルダにパスを通す)すればおk。
Gist.vimのインストール
通常のvimプラグインと一緒。
のどちらかからダウンロード&解凍して、$VIMRUNTIME
にコピーすればいい。
vimプラグイン管理を使ってるなら$MYVIMRC
に
NeoBundle 'mattn/gist-vim'
とか書いてインストール(:NeoBundleInstall
)すればいい(使ってる管理プラグインによって$MYVIMRCの書き方
やExコマンドは違う。ここではNeoBundleの例)
設定
$MYVIMRC
に以下を記述
1 2 3 4 |
|
g:github_user
やg:github_token
を設定しておくとgitコマンドが動かないので若干高速化する(筈)。
ちなみにg:github_token
はGithub→Account Setting→Account Adminの以下の部分を参照すれば良い。
g:gist_curl_options
を指定しないとGist.vimが動かなかったので調べて、同じコマンドをコマンドラインか
ら打ってみると
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
てな表示が出た。SSL証明書の確認が出来ないので、確認を無視するには’-k’オプション指定してね。と書いて
あると見て、とりあえずg:gist_curl_options
に-k
を指定してみた。
なんか臭いものに蓋をしただけのような気もする。正しい解決策を誰か教えて。
Gist.vimの(基本的な)使い方
投稿(Post)
:Gist [-P|-p]
-p
を付けるとprivate、-P
を付けるとpublicで投稿される。何も付けないとg:gist_private
の値に従う。
(デフォルトはpublic)
範囲指定可能なので
:6,20Gist
とすると、6行目から20行目までを投稿できる。
通常はVisual modeで選択した後”:”を入力すると自動的に選択範囲が範囲指定されるので、それを使う。
他にも-m
を付けたら現在開いてるバッファ分の複数ファイルのgistを作成できたり、-a
を付けると
anonymous投稿出来たりするみたいだが、使ったことはない。
一覧取得
:Gist -l [user]
でgist一覧を取得できる。userを指定しない場合は自分となる。
:Gist -la
で自分のpublicとprivate全てのgist一覧を取得できる。
編集
一覧取得したバッファで[Enter]を押すかまたは
:Gist gist-id
とgist-idを指定したコマンドを実行すればgist編集バッファで編集が出来る
更新
gist編集バッファ内で
:w[rite]
または
:Gist -e
とすると編集バッファの内容を更新できる。
削除
間違えて投稿してしまった場合、gist編集バッファ内で
:Gist -d
とすると、編集しているgist-idが削除される。
:Gist -d gist-id
みたいにgist-idを指定して削除とかは出来ないみたい。(誤操作防止のため??)
説明(description)指定
投稿、更新コマンド時に
:Gist -s ほげほげ
:Gist -e -s ほげほげ
と-s <description>
とすると説明(description)を指定できる。説明を指定しておくと、一覧表示の際の画面
が
のように説明が表示されて、管理がしやすいように思う。
また
:Gist -s 2012/01/16 15:33
みたいに空白を入れると上手く動かない。空白の後ろ部分(先の例だと15:33)が説明となる。 gistの制限でそうしてあるのか単純にGist.vimのバグかまでは調べてない。全角スペースなら問題ないので、区 切りが欲しい場合は全角スペースで区切ると良い。
Gist.vimヘルパースクリプト
毎回-sオプション付けて説明指定するのは面倒なので、それを自動的に付けてしまおう。 というスクリプトを書いてみた。
導入が若干面倒なので、プラグインにしてしまった方が良いような気もする。
まあ要望があれば考えると言うことで・・・。
インストール
ここからファイルをダウンロードして、
$VIMRUNTIME/autoload/gist_vim_helper.vim
に保存。
$MYVIMRC
に以下を追加
1 2 3 |
|
使い方
投稿
:GHPostGist [is_private]
が:Gist -P
または:Gist -p
コマンドの代替コマンド。g:gist_vim_helper_new_desc
変数に従った説明を付
加する。is_private
が1なら:Gist -p
、0なら:Gist -P
、省略時は:Gist
コマンドが発行される。
g:gist_vim_helper_new_desc
に指定できるフォーマットは
- %Y,%m,%dなど
strftmime()
関数で指定可能な日付時刻指定子- $f
- 投稿するファイル名
- $d
- ユーザー記述。毎回入力を求められる。
です。先ほど述べたようにスペースを入れないように注意!
更新
:GHEditGist [is_private] [is_close]
が:Gist -e
コマンドの代替。is_private
は指定しても無意味。将来的にGist.vimがprivate→publicとかに対応す
るかもしれないので、付けてある。is_close
に1を指定すると更新が成功したらgist編集バッファを閉じる。
g:gist_vim_helper_edit_desc
変数に従った説明を付ける。
g:gist_vim_helper_edit_desc
に指定できるフォーマットはg:gist_vim_helper_edit_desc
と同様。
ただし$d
を指定した際は入力求める際の初期値が現在の説明になってるので、不要な部分を適宜削除する必要
がある。
投稿または更新を自動判別
:GHAutoGist [is_private] [is_close]
はgist編集バッファ内で実行すると:GHEditGist [is_private] [is_close]
コマンド、それ以外のバッファで
実行すると、:GHPostGist [is_private]
コマンドを実行する。
結構便利。
設定例
1 2 3 4 5 6 7 8 9 10 11 |
|
キー定義は適当に変更する。<Space>gl
、<Space>gdel
はおまけ。
Gist.vimの修正(必要ならば)
g:gist_vim_helper_edit_desc
に値を設定した場合、:GHEditGist
(または:GHAutoGist
)コマンド
で更新すると説明が更新されるが、
:w[rite]
とすると、説明が更新されない。それが気に入らない人は$VIMRUNTIME/autoload/gist.vim
のs:GistWrite()
関数(319行目くらい?)を以下のように変更する。
1 2 3 4 5 6 7 8 9 10 |
|
追加する部分は
call gist_vim_helper#edit_cmd(-1, 1, 1, 0, 0)
でもいいかもしれない。
Octopressで使用する場合にGist Tagを貼り付ける
:Gist
コマンドで記事をポストするとg:gist_put_url_to_clipboard_after_post
が1の時、
https://gist.github.com/1606832
のようなURL(‘1606832’の部分はGist-ID)がクリップボードに貼り付けられる。またOctopressには
1
|
|
と記事に書けばGistコードをページに貼り付けてくれる”Gist Tag”という便利なプラグインが存在する。
ということでクリップボードから貼り付けて、ちょっと変更加えればGistコードをページに埋め込むことが出来 る・・・んだけど、数回やっただけで面倒くさくなってきた(スペースの有無とか間違えて、Octopress Document 見に行ったりしてるし)。
ということで変換して貼り付けてくれるvimスクリプトを書いてみた。
上記コードを$MYVIMRC(または$VIMRUNTIME/ftplugin/markdown
とか)に貼り付ければ、vim上で
:PasteGist
とExコマンド打てば、カーソル行にGist Tagが貼り付けられる(クリップボードにGistのURLがないと駄目)。
カーソル行の後に貼り付けるようにしたいのなら9行目のnormal O{
→normal o{
とかにすればおk。