故事是這樣子的,今年不知道為什麼靈感大爆發,一直不斷的寫blog。
用blogger 最麻煩的就是它的介面,不太能像 jekyll 之類的由文字檔轉成blog,要直接用它的編輯器介面寫文章,如果是一般的文章就很方便,插圖、連結都能一鍵完成,但要插入tag 就麻煩大了。
像我的blog 常會有程式碼或一些執行結果要highlight,我通常會插入兩種不同的tag,一種是單純的highlight <div class="hl"></div>
;
另一個是包住程式碼用的 <pre class="prettyprint lang-xx">
,要在blogger 上面加上這兩個tag ,就必須切換到html 編輯模式,自己到適當的地方加上open tag,然後找到末尾加上close tag,這是一個很累人的過程。
特別像是上一篇rust helloworld 的文章,充滿許多程式碼跟執行結果,編輯起來要十幾分鐘,還要不斷的修稿,每每寫到這種文章就想要放棄blogger換到其他平台… 但想想還是不太想放棄blogger 平台,雖然有無痛轉移到其他平台wordpress,但其實blogger 上傳圖片等等還是滿好用的。
那編輯耗時這點總不能這樣下去吧…最近死腦筋終於想到:可以利用vim script 改善這個流程。
首先是HTML跳脫的部分,其實這個可以把文字貼去blogger 再從HTML 抓回來就行了,也可以用vim script 代勞,
例如這個自動轉成 html 的指令
。
於是我自幹一個 Make Blogger funciton,會用這個function對整份文件執行EscapeHTML 取代,並在每個行尾插入 換行tag:
" Escape & < > HTML entities in range (default current line).
function! EscapeHTML(line1, line2)
let search = @/
let range = 'silent ' . a:line1 . ',' . a:line2
execute range . 'sno/&/&/eg'
execute range . 'sno/</</eg'
execute range . 'sno/>/>/eg'
nohl
let @/ = search
endfunction
command! -range MakeHTML call EscapeHTML(<line1>, <line2>)
function! Blogger()
let range = 'silent ' . 0 . ',' . line("$")
call EscapeHTML(0, line("$"))
execute range . 'sno/$/<br \/>/eg'
endfunction
command! MakeBlogger call Blogger()
另外有兩個help funciton MakePre 跟MakeDiv,功用是可以用vim 執行range 指令,在前後加上tag,如果是Pre的話會把當中的<br />
給代換掉,利用vim 優秀的整行選取,方便加入各種tag。
" Pre, add <pre class="prettyprint"> and </pre>
function! MakePre(line1, line2)
call cursor(a:line2, 0)
:normal o</pre><ESC>
call cursor(a:line1, 0)
:normal O<pre class="prettyprint">\r<ESC>
endfunction
command! -range Pre call MakePre(<line1>, <line2>)
" Div, add <div class="hl"> and </pre>
function! Div(line1, line2)
call cursor(a:line2, 0)
:normal o</div>
call cursor(a:line1, 0)
:normal O<div class="hl notranslate">
endfunction
command! -range MakeDiv call Div(<line1>, <line2>)
如此一來就能有效的加速blog 發文的流程了,使用時先把libreoffice 裡的文件貼到文字檔裡面,然後用vim script 編輯過, 就能整篇由blogger的文字介面中貼入,這篇文用這個方式發,不到十分鐘就發完了。
話說在這個FB, LINE, HackMD 當道的年代,這樣一直寫blogger 感覺怪土裡土氣的,不知各位看倌怎麼想呢?