はてなブログからエクスポートした記事からはてなキーワードのリンクを削除する

はてなブログから他のブログへ移行する際,はてなブログから記事をエクスポートし,移行先のサービスへ記事をインポートするという作業をする.
しかし,はてなブログの無料版だと,はてなキーワードのリンクを削除することができない.

手作業で一つ一つ削除していくのは非常に面倒くさい.
そのため,一度データをエクスポートし,それを正規表現を使って編集することで対応した.

Vimでエクスポートしたファイルを開き,置換コマンドを使うと一発で完了する.

:%s/\v\<a>]+\>([^<]+)\<\/a\>/\1/g

これで完了.

はじめてのVimプラグインつくった

作成した経緯

私は普段から開発や文書作成にVimを愛用しているが,プレゼン用のスライドに関してはAppleのKeynoteを使って作成していた.

しかし,スライドもテキストベースでVimで作れると楽だなと思っていろいろ調べていた.
過去にはPandocを使ってMarkdownからスライド用PDFを生成する
ということも試したが,結局Keynoteに戻っていた.

いろいろ調べた結果,reveal.jsを使うとMarkdownで書いた文書をWebスライドとしてレンダリングできるということを知った.軽く使ってみた結果,使い勝手が良さそうだったので,これをVimからすぐに使えるようにプラグインとしてまとめた.

なお,今回が初のVimプラグイン開発なので,Vim Scriptの書き方がおかしいなどあるかもしれない.

プラグイン本体はGithubのmas9612/mdslide.vimにて公開している.

プラグインの内容

現在はまだ必要最低限の機能しか実装していない.現時点ではローカルWebサーバの起動・停止,Webスライドのオープン,スライド内容を強制的に更新する,という4つの機能のみを使うことができる.

reveal.jsの仕様上,発表者ノートなどの機能を使うためにはローカルサーバを動かす必要があるため,その機能を盛り込んである.

基本的にreveal.jsのMarkdown表記に従ってMarkdownを作成し,ローカルサーバを起動するだけでWebスライドがレンダリングされて見れるようになる.

これから・所感

まだ欲しい機能など実装できていない部分も多いので,少しずつ実装をすすめていく.
英語難しい.

Lilypondのインストールと環境設定

今まで楽譜を書くときにはFinaleを使用していたが,いつも使用していたFinale2011はYosemite以降,プレイバック関係でちゃんと使えない.仕事で使っているわけではないのでわざわざ新しいバージョンを購入するのはどうかと思い,前から気になっていたLilypondを導入した.

環境はOS X v10.11.6 El Capitan.エディタにはVimを使用する.

Lilypondのインストール

homebrewで簡単にインストールできる.
事前に homebrew/tex をtapする必要がある.

$ brew tap homebrew/tex
$ brew install lilypond

Vimの設定

runtimepathの設定

Lilypondをインストールすると,一緒にVimのftpluinなどがついてくる.これを有効にするために, ~/.vimrc に以下を追記する.

filetype off
set runtimepath+=/usr/local/share/lilypond/2.18.2/vim/
filetype on

2行目で runtimepath に追加するパスは,インストールされたバージョンに応じて変更する必要があるかも.

quickrunの設定

vim-quickrun を使用して,Vimから直接コンパイルしてPDFを確認できるように設定する.

~/.vim/ftplugin/ 以下にLilypond用の設定ファイルを追加する.今回は lilypond_quickrun.vim というファイル名で作成した.
( ~/.vim/ftplugin/lilypond_quickrun.vim )

let g:quickrun_config = {}

let g:quickrun_config['lilypond'] = {
\   'command' : 'lilypond',
\   'outputter' : 'error',
\   'outputter/error/success' : 'null',
\   'outputter/error/error' : 'quickfix',
\   'srcfile' : expand("%"),
\   'exec': '%c %o %a %s',
\ }

let s:hook = {
\   'name': 'open_pdf',
\   'kind': 'hook',
\   'config': {
\     'enable': 1,
\   },
\ }

function! s:hook.on_success(...)
  let l:fileName = expand("%")
  let l:fileName = substitute(l:fileName, "ly", "pdf", "")
  " if not store retval to variable, E492 error occur
  let l:result = system("open " . l:fileName)
endfunction

call quickrun#module#register(s:hook, 1)

もっと良い設定方法があるかもしれないが,まだquickrunの設定をきちんと理解していないのでとりあえずこんな感じで.

s:hook.on_success の部分でコンパイル後に生成されたPDFを開く処理を定義している.無理矢理感はあるが良い方法が思いつかなかった.

これで :QuickRun を実行すると,自動的にPDFが開くようになった.

9/10追記

出力ファイル名を指定しない時はこの方法で上手くPDFが開くが,複数ファイルで楽譜を書いている時など,出力ファイル名を指定している時は上手くPDFを開けない.
とりあえず解決策が思いつかないのでMakefile作ってVimから :make することにした.

テンプレートファイルの作成

Lilypondは,ファイルの頭にバージョンを指定しなければいけないらしい.毎回書くのは面倒なので,Vimのテンプレート機能を使用する.

~/.vim/template/lilypond.txt に,自動的に挿入してほしい内容を記述する.とりあえずバージョンの宣言だけ書いた.

\version "2.18.2"

次に,FiletypeがLilypondの時にこのテンプレートを読み込むように設定する. ~/.vimrc に以下を追加する.

autocmd BufNewFile *.ly 0r $HOME/.vim/template/lilypond.txt

終わりに

これでとりあえずVim+Lilypondでの楽譜作成環境の構築が完了したので,Lilypondのチュートリアルでもやって勉強しようと思います.
MusicXMLへの変換もできるようにしたいので,これから調べます.