vim で markdown のリンクをタイトルを取得しインサートする
前回の続きになるが、もし hugo 等にブログを乗り換えた際はてな記法が使えなくなり markdown 等で書く必要がある。
現在このブログは基本的には markdown で記述しているが、リンク周りは [http://example.com:title]
というはてな記法を使っていることが多い。これはリンク先のタイトルをよしなに取得してくれるという機能である。また、
のような埋め込み式?の物も [http://example.com:embed:cite]
と記述すると展開される。
自分は vim を普段使っているので markdown も vim で書くことになるがまずは前者について考え、リンクする際に毎度タイトルを手打ちするのも手間なので下のようなコマンドを定義してタイトル付きの markdown のリンクをインサートするようにしてみた。
function! s:InsertMarkdownLink(url) let dom = webapi#html#parseURL(a:url) let head = dom.childNodes('head') if len(head) < 1 return endif let metas = head[0].childNodes('meta') let encoding = "utf-8" for meta in metas if has_key(meta.attr, "http-equiv") && meta.attr["http-equiv"] == "Content-Type" let matched = matchstr(meta.attr["content"], 'charset=\zs[a-zA-Z0-9-]*\ze') if matched != "" let encoding = matched endif break elseif has_key(meta.attr, "charset") let encoding = meta.attr["charset"] break endif endfor let title = iconv(webapi#html#decodeEntityReference(head[0].find('title').value()), encoding, &encoding) execute ":normal i[" . title . "](" . a:url . ")" endfunction command! -nargs=1 InsertMarkdownLink call s:InsertMarkdownLink("<args>")
一言ブログを乗り換えると言っても、いろいろなものに依存していたりするのでとても気が進まない。