Vim で Markdown を編集するとき、 vim-quickrun を使って Marked でプレビューするようにしてる。これが便利で体に染みついてるので、 Deckset で表示する用の Markdown スライドを Vim で編集しているときに一発で Deckset を開いてプレビューできたら便利だなと思ったので以下のようにしてみた。

  1. ファイルのパスに slides が含まれていたら filetype を markdown.slide にする
  2. そんで ft=markdown.slide のときは vim-quickrun で Deckset にファイルをプレビューできるようにする

こんな感じ。

au Bufread,BufNewFile /*/slides/*.markdown set filetype=markdown.slide
let g:quickrun_config['markdown.slide'] = {
      \ 'outputter' : 'null',
      \ 'command'   : 'open',
      \ 'cmdopt'    : '-a',
      \ 'args'      : 'Deckset',
      \ 'exec'      : '%c %o %a %s',
      \ }

便利。

@glidenote 先生作の memolist.vim 便利で、仕事のドキュメントからメモ書き、ポエムに至るまで memolist.vim で書いてるけど、 ~/Dropbox/memolist/ にドキュメントが溜まりまくって厳しい感じになってきてた。文章を書く、ということに関しては vim + memolist.vim はとても良いのだけど、書いたものを後から読み直す、という面では弱い部分があると感じる。 iPhone で読みづらいし。その点、 Day One は過去記事を読みやすいし、 iPhone アプリもあるので夜寝る前に過去に書いた文章を読んでニヤニヤしながら眠ることも出来る1

というわけで ~/Dropbox/memolist/ にある Markdown のファイルを Day One.app ( Day One 2)に取り込むやつを書いた。

タイトルにマッチする文字列が入ったファイルを除外したり、その日以降のやつだけ、という感じで絞り込み指定したりできる。めっちゃ便利。

使い方

rb-dayonejson gem が必要なのでインストールしてください。 --execute オプションを付けないとデフォルトは dry-run です。

Example) 今日書いた記事をインポートする

ruby memolist2dayone.rb

Example) 2015/01/01 以降の記事を取り込むが、「日報」という文字列をタイトルに含む記事は除外する

ruby memolist2dayone.rb --since 2015/01/01 --exclude 日報

Example) ~/Dropbox/memolist 以外のディレクトリを対象ディレクトリにしたいとき

ruby memolist2dayone.rb --target_dir ~/memolist/

  1. 前も似たような記事書いてる。 昔の日記を全部 Day One.app にぶっ込んだ - portal shit! 

memolist.vim のデフォルトのテンプレートが挿入する YAML Frontmatter なんか変わってて、 Jekyll のと違った。 Markdown のプレビューは Marked 2 で見るようにしてるんだけど、 Marked 2 は memolist の特殊 YAML Frontmatter を正しく処理してくれない。 YAML Frontmatter はメタ情報なのでプレビュー時には表示して欲しくない( Marked 2 には YAML Frontmatter を表示しないオプションがある)んだけど必ず表示されてしまう。具体的にはこうなる。

調べてみたら memolist には標準のテンプレート以外に自分の好きなテンプレートを設定できる機能あったので、 ~/.vim/template/memolist/markdown.txt というファイル置いて以下のようにしておいた。なお memolist はテンプレート用ディレクトリに置いてある 拡張子.txt というファイルをテンプレートして利用するようだった。なので Markdown 用のテンプレートは markdown.txt となる。

---
title: {{_title_}}
date: {{_date_}}
tags: [{{_tags_}}]
categories: [{{_categories_}}]
---

テンプレートを変更した上で Marked 2 で YAML Frontmatter を Ignore するよう設定する。

すると以下のような表示になる。すっきりする。

すでに過去に書いた記事の YAML Frontmatter も Jekyll のやつに直す雑なスクリプト書いて直しておいた。

files = Dir.glob("#{ENV['HOME']}/Dropbox/memolist/*.markdown")
files.each_with_index do |file, index|
  filename = File.basename(file)
  filepath = File.expand_path(file)
  flag = true

  lines = File.readlines(file)
  lines[0..5].each_with_index do |line, i|
    case
    when line =~ /^title:(.+)/
      lines[i] = "---\n#{line}"
    when line == "==========\n"
      lines[i] = nil
    when line =~/^(?:date|tags|categories|tags):/
      # do nothing
    when line == "- - -\n"
      lines[i] = line.gsub(' ', '')
    else
      flag = false
      next
    end
  end

  if flag
    p filename
    File.write(filepath, lines.compact.join(""))
  end
end

Vim で Emoji 補完したいと思ってプラグイン探したら見つかった。

GitHub のユーザー名とかリポジトリ名も補完してくれるっぽい。設定すれば Neocomplete と組み合わせて使える。

しかしこいつは自分の環境では単体では動かなかった。(補完用のデータの読み込みに失敗してるっぽい?)元になっている vim-emoji プラグインを入れたら動くようになった。

ユニコード絵文字表示できる環境では補完候補に Emoji が出てくる。

Terminal Vim

ユニコード絵文字を表示できない環境では日本語で Emoji の内容説明してくれる(要設定)。

Mac Vim

便利。

WK4TriqbFk.gif (565×373)

US キーボードに使うようになってから、JIS キーボードでは単独で入力できるコロン(:)を打つときにシフトキー(Shift)押してないといけなくなった( Shift + の組み合わせでコロン : になる)。 .vimrc で : を入れ替える方法もあるらしいけど、なんとなく抵抗があってやってなかった。(Happy Hacking Keyboard Professional 2 を買った

それでよく起こるのが、ファイルを保存しようとしたときに Shit + を押してコマンドモードに入って w を押すと、 Shift が押されっぱなしの状態になっていて W となり保存できず警告メッセージが表示されてしまう現象や、終了しようとして Shift + ‘ => q したつもりが Shift + ‘ => Shift + q になっていて大文字の Q コマンドが実行されて Quickrun が実行されてしまう現象。プログラムを書いてるときにこういうのでつまずくとイラッとする。

:W:Q がそれぞれ小文字のコマンドと解釈されるようにすればいいわけなので、以下のように .vimrc に記述した。

" 大文字 W で保存
command W w
" Q で quickrun 実行しないように
command Q q

便利。

最近 Emacs を触っていることもあってテキストエディター熱が高まっているので思いつきで社内で Vim 勉強会を開催した。

自分は最初はプラグインをいかに使いこなすかというところから Vim を使い始めて(Vim テクニックバイブル的 Vim の活用)、Emacs に手を出したことによる素の Vim の少ないキーストロークでの編集能力の高さ再発見(実践Vim的 Vim の活用)し、Vim の真骨頂は後者にあるのではないかとむさ苦しく語った。

準備不足で資料とか作れなかったのであまり意味わからない感じだったかも知れないけど、話をするために実践Vimを読んだり積ん読になっていたオライリーの Learning the vi and Vim Editors を読んだりして勉強のきっかけを作ることができて良かった。

自分の他に同僚の @monochromegane 氏が Unite.vim の上級活用法 (agとUnite.vimで快適高速grep環境を手に入れる - Thinking-megane)や、氏が EUC-JP/Shift-JIS 対応を進めている ag による Unite grep の高速化などについて話した。カーソル位置の単語で Unite grep する方法*1なんかが個人的には参考になった。Unite の設定とかはネットで拾った情報のコピペで済ませていたので、実際に目の前で解説してもらいながら使い方の設定をすることで新たな発見をすることができ、大変良かったと思う。

4月に勉強会がつらくなって Fukuoka.rb もやってなかったんだけど、またぼちぼち再開していきたいと思った。


*1 以下のようなコードだけどなぜか自分の環境だと期待した通りに動いてくれなくて、Pattern: というプロンプトが出て検索キーワードが確認できるはずなんだけど、何かキーを入力しないキーワードが表示されなくて不便な感じ。

" grep current word
nnoremap <silent> ,cg :<C-u>Unite grep:. -buffer-name=search-buffer<CR><C-r><C-w>

先日、自宅の MacBook Pro (Mid 2009) 内の MacVim kaoriya で quickrun が実行できないと書いた(Homebrew で入れた MacVim だと quickrun できる)。どうも Python が原因らしいことがわかっていた。

MacVim で quickrun すると変なエラーが出るようになって困ってる - portal shit!

Mac に入っている Python のバージョンが古いのかなと思い(でもそれだとなぜ CUI 版の Vim で quickrun できるの説明がつかない)、 Homebrew で Python を入れてみた。なんか symlink を作成できなかったとかエラーが出たので brew link --overwrite python とかやってかなり無理気味に入れてみた。しかし相変わらず MacVim kaoriya から qiuckrun を実行すると MacVim が落ちる。

そもそも会社の MacBook Pro や自己所有の MacBook Air ではこのような現象は起こらないため、この Mac に入ってる Python が異常なのでは? と思い至った。

確認してないのでテキトーなんだけど、おそらく、この Mac に入ってる Python は 32bit OS 用のやつが入ってたような気がする。というのは /usr/local/bin にあるいくつかの symlink が以下のように 2008 年に作成されたファイルを指していたから。

https://resources.portalshit.net/930-pythons.png

かつて NOKIA の携帯を使っていたときにゴニョゴニョするために Mac OS X 用の Python パッケージをダウンロードしてインストールしていて、それが 32bit OS 用のバイナリだったために問題が発生しているのかも知れないと思った。試しに python.org から 64bit OS 用の Python パッケージをダウンロードしてきてインストールしてみたら無事 MacVim kaoriya で quickrun できるようになった。

CPU が Core Solo、Core Duo の Mac だったら 64bit でしか動作しない Mac OS X (Lion 以降の OS)をインストールできないのでこんな問題には遭遇しないのだろうけど、自宅の MacBook Pro は Core2 Duo なので 32bit OS でも 64bit OS でもインストールできてしまうためにこのような問題に行き当たってしまったのだと思う。

あと OS のアップグレード時にアーカイブインストールではなくクリーンインストールを選んでいたらこのような問題には遭遇しなかったかも知れない。写真や音楽などだけ TimeMachine から復旧するようにして、Mac をアップグレードするときは OS そのものはまっさらな状態でインストールする方が良いということが分かった。アプリケーションもいまは Mac AppStore があるので昔より前の環境に戻すのが難しくない。

ただ Adobe 製品のライセンス認証解除とかは OS のクリーンインストール前にぬかりなく行っておかないとシリアルキーが通らなくなって死ねそう。

そういうわけで、Snow Leopard 時代から Core2 Duo CPU の Mac を Mountain Lion まで Upgrade して使っていて MacVim の quickrun が動かない人は Python をインストールし直すことを試してみてください。