てきとうなさいと べぇたばん

VimでMarkdownを使う

VimでMarkdown。こんな感じになりました。

VimでMarkdown

GVimでMarkdownを使いたいと思ってたんです。と思ってvimでMarkdownのsyntaxを取り入れて、それをコピペでサイトに取り入れています。

とは言ったものの、Vimの時点でプレビューしたいなぁ・・・って思っちゃったんですが、quickrun.vimがどうもうまく動かない。いろいろ試行錯誤をしてようやくできました。妥協の塊ですが。

ちなみに、Windows 7です。Windows XPと少々違うようで。

markdownからHTMLへ変換する

gemでkramdownを取り入れます。

gem install kramdown

Vimのシンタックスハイライト

Vimでは、mkd.vimをダウンロードして、Markdownのシンタックスハイライトを反映させます。詳しくは、http://vim-users.jp/2009/08/hack52/参照。

quickrun

vim-quickrunをインストール。設定はすでに入っている模様。なので、\\rとして(Leaderはデフォルトなので\\であります)実行してみるが・・・

ruby.exe: No such file or directory -- C:/path/to/dir/kramdown (LoadError)

となってしまう。これになんでだと数日ほど悩んでしまった。

回避・・・?

回避とは言いづらいのだけれど、この状況を整理すると

  • kramdownをコマンドプロンプトで直接実行すると問題なく動作する
  • \\rだと、「カレントディレクトリのkramdownというrubyスクリプト」を実行したがるが、無いのでエラーになる

んで、「kramdown」というスクリプトは、確かにスクリプトなので、いろいろ考えた結果、シンボリックリンクを貼ってしまおう。mklinkでの作成は管理者権限でないとできない。

cd C:\\path\\to\\dir\\
mklink kramdown "C:\\Program Files (x86)\\ruby-1.8\\bin\\kramdown"

こうすると、「カレントディレクトリ」の時だけ、正常に起動するようになる、つまり:cdしたらquickrunから呼び出せない。これは課題。

もともとWindowsには対応していないのか・・・まぁ仕方がないっす。Windowsでシンボリックリンクを作成するのに権限が必要なのは、なんでだろう?

シンボリックリンクの悪用

7-1. シンボリックリンクの悪用を見つけた。IPA セキュア・プログラミング講座のページ。

スーパユーザ権限で実行しているプログラムがファイルにアクセスしようとして使ったパス 名がシンボリックリンクだった場合,リンク先のファイルへのアクセスもスーパユーザ権限 で行われる。

なるほど。典型例として紹介されているのが、以下。

典型的な例はテンポラリファイルへのアクセスである。もし/tmp/my_tmpfileというテンポラリファイルに書き込むプログラムがスーパユーザ権限で動作する場合,予め一般ユーザが次のようにシンボリックリンクを作成しておくと,パスワードファイルが破壊されてしまう。

% ln -s /etc/passwd /tmp/my_tmpfile

スーパーユーザーがシンボリックリンクを使って仕掛けた罠にアクセスすると、シンボリックリンクの参照先がスーパーユーザーでしかアクセス出来ないファイルにアクセスさせて編集させると言うことか。

だから、Windowsではシンボリックリンクに権限を与えているわけですね。

スーパーユーザーのみ作成できる領域をシンボリックリンクのリンク先としているので、あまり適切ではないですね。

quickrunの結論

妥協しましょう。コピーです。必要な部分だけ抜き取ってコピペです。 以下だけコピペして、kramdownというファイルでまとめました。もうこれでいいです。

require 'rubygems'

version = ">= 0"

if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

gem 'kramdown', version
load Gem.bin_path('kramdown', 'kramdown', version)

おしまい。

という感じで、この記事も書いております。修正すべきところいっぱいですねぇ・・・