rcmdnk's blog
Last update

Amazon | Markdown 101: A hands-on guide (English Edition) [Kindle edition] by Hans-Martin Ramsl | Languages & Tools | Kindleストア

このブログはMarkdownで書いたものを変換して作っていますが、 Vimで書くのでVimでvim-markdownというプラグインを使って書いています。 VimのMarkdownドキュメントのシンタックスなどを決めるプラグインですが 本家のplasticboy/vim-markdown だとやりにくいことがあるので Forkしたもの:rcmdnk/vim-markdown を使っています。

いくつかアップデートや本家を追ったりしたものがあるので 覚書を兼ねて その辺のまとめなど。

本家側のアップデート

久しぶりに見るとかなりアップデートされていて、シンタックスハイライトは 以前自分用にFork版に入れていた事と同じ事が出来る様になっていることもいくつかありました。

それとは別に必要な設定も加えられてたりしました。

また、gxとURLの上で打つとそれをブラウザで開く、といった機能がVimにはありますが、 [example](https://example.com)みたいなMarkdownのリンクの書き方をすると [example]の部分でgxを打ってもhttps://exmaple.comを開いてくれる様になる マッピングなどが加えられています。

Commandsもいくつか加えられていてセクションのレベルを上げたり下げたりしたり、 セクションからTable of Contentを作って別窓にナビゲーション窓を作ってくれるTocというコマンドなどがあります。

この辺詳しくはREADMEやヘルプ参照。

シンタックスハイライトの部分で大分本家と同じ様な感じでOKになってきましたが、 まだ変えたい部分が結構残ってるので引き続きForkして使っていきたいと思います。 (好みによる所も多いのでPull Requestして直してもらう、というのはちょっと違うかなというのがあるので。)

本家との違い

本家:

rcmdnk版:

Folding

よりシンプルに高速に。

本家ではpython-modeという別の方法に出来たり しますがrcmdnk版ではその様な設定もありません。

根本的にやり方が別物になっていますが、 出来ることは大体同じで、加えてLiquid(Jekyll)のタグなどにも対応しています。

本家の方では行の内容を見て解析していますが こちらでは付けたシンタックスハイライトの内容を主に見ていて その分シンプルなコードに出来、有効にしても大分高速になっています。

Text emphasis on multi-lines

**太字**みたいにして太字にしたりする場合、

1
let g:vim_markdown_emphasis_multiline = 1

の値が1だと複数行でも続けて強調、0だと同じ行内に閉じる**がなければ 強調しない、という設定が出来ます。

本家では初期値が1なんですが、これだと文中に_とか*とかある場合に 次にそれが出てくるまで延々と強調を続けます。

これが結構面倒で複数行に渡って強調する必要があることはあまりないし、 したければ一行にまとめるか、 複数行ならその行毎に強調を当てれば出来るので初期値を0にしてあります。

まあ設定で出来ることなのでどちらでも良いのですが自分用に。

後一部Mathの設定で、この設定の有無にかかわらず$~$が複数行でもハイライトするようになってましたが、 これも上と同じ理由かつ結構頻繁に単独で出てくるのでmultiline設定の有無に関わらずoneline設定にしてあります。

コードのシンタックスハイライト

Markdownでは

1
2
3
<div class='bogus-wrapper'><notextile><div class='bogus-wrapper'><notextile><figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='vim'><span class='line'><span></span><span class="k">let</span> <span class="k">g</span>:vim_markdown_emphasis_multiline <span class="p">=</span> <span class="m">1</span>
</span></code></pre></td></tr></table></div></figure></notextile></div></notextile></div>

みたいに三点バックチックで囲ったりしてコードの表示を表します。

この際に拡張Markdownだと上の様に直後に言語名を書いたりして言語指定し、 その指定を見てエディタ上でシンタックスハイライトをつけたり出来る様にしています。

rcmdnk版ではこれを vim-markdown-quote-syntax というプラグインを使って行っています(別途インストールが必要)。

追記: 2017/07/01

言語設定の所でファイルの拡張子での指定などが上手く行かない部分があったので Pull Requestを出してあります。

とりあえずFixされるまではFork版を使えばきちんと 言語指定が出来ます。

このバグは以前色々拡張するために出したPull Requestが入れた バグなので申し訳ない。。。

追記ここまで

vim-markdownの中で三点バックチック以外にも ~によるコードブロックやOctopressのcodeblockにも対応しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{% codeblock  lang:vim %}
let g:vim_markdown_emphasis_multiline = 1
{% endcodeblock %}

{% codeblock a.vim %}
let g:vim_markdown_emphasis_multiline = 1
{% endcodeblock %}

{% highlight vim %}
let g:vim_markdown_emphasis_multiline = 1
{% endhighlight %}

<div class='bogus-wrapper'><notextile><div class='bogus-wrapper'><notextile><figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='vim'><span class='line'><span></span><span class="k">let</span> <span class="k">g</span>:vim_markdown_emphasis_multiline <span class="p">=</span> <span class="m">1</span>
</span></code></pre></td></tr></table></div></figure></notextile></div></notextile></div>

~~~ a.vim
let g:vim_markdown_emphasis_multiline = 1
~~~

こんな感じでちょっとそれぞれ言語の指定が違いますが、

  • codeblock: lang:<言語>があればそれを使用。直接与えられる引数はファイル名になり、lang:がない場合ファイル名の指定があればその拡張子を使用。
  • highlight: 渡せる引数は言語なのでそれを使用。
  • 三点バックチック: 直後に言語を渡す(スペースなし)仕様なのでそれを使用。
  • 三点~: 直後にファイル名を渡す(スペースあってもなくても良し)仕様なのでその拡張子を使用。

これ以外にもg:markdown_quote_syntax_codeblocks.vimrcで変更することで 他のコードブロックを追加することも出来ます。

最初から使える言語はこちらにあるg:markdown_quote_syntax_defaultsのもの:

vim-markdown-quote-syntax/markdown_quote_syntax.vim at master · joker1007/vim-markdown-quote-syntax

言語を追加する場合は

.vimrc
1
2
3
4
5
6
7
8
9
10
11
let g:markdown_quote_syntax_filetypes = {
      \ 'css' : {
      \   'start' : 'css',
      \},
      \ 'scss' : {
      \   'start' : 'scss',
      \},
      \ 'markdown' : {
      \   'start' : '\%(markdown\|md\)',
      \},
\}

こんな感じでmarkdown等の各言語のシンタックスハイライトを使うための 拡張子の設定をstartという値で設定します。

複数の拡張子を設定したい場合には上のmarkdownのケースの様な感じで。 (文字列を処理するため、シングルクォートで囲って書く場合は上の様に通常通りなバックスラッシュ1つで。 デフォルト設定のmarkdown_quote_syntax.vimではダブルクォートで囲ってバックスラッシュ2つ使う書き方になっています。)

その他シンタックスハイライト

その他にも特にシンタックスハイライトのところで変更しています。

1つはLiquidタグを入れている所。

他は細かいところですが括弧周辺のシンタックスや **太字**みたいな時に*もハイライトするかどうか、 等好みの問題かもしれないところも含めて変更してあります。

違いは以下参照。

ftdetect

md.tmp, md.oldも。

インデント

本家ではリスト表示の行を書いて次の行に行こうとすると1つインデントされた形で リスト行が始まります。

1
2
* aaa
    * <cursor>

ですがリストを書いてる時、同じインデントレベルに移りたいことの方が圧倒的に 多いので同じインデントレベルで始まるように。

1
2
* aaa
* <cursor>

この部分も余計な処理が減るので少しは軽くなってます。

vim-markdown 関連記事

Sponsored Links
Sponsored Links

« GNU screen 4.6.0リリース WindowsでMacのクイックルック機能を再現するWinQuickLook »

}