ここのスクリプトをちょっと弄ったので微細なチェックも兼ねてます。
まず最初にソース
qiitactl.vim
" qiitactlのmarkdown置き場
let s:qiitaCtlDir = ''
function! s:qiitaFetch() abort
exec 'cd '.s:qiitaCtlDir
let s:qiitaChk = getline(3)
let s:isFetchSingle = 0
if s:qiitaChk =~ '\v^url: https:\/\/qiita\.com.+\x+$'
echo 'Fetching single post.'
let s:isFetchSingle = 1
let s:qiitaCmd = system('qiitactl fetch post --id='.s:qiitaChk[-20:-1])
else
echo 'Fetching entire posts.'
let s:qiitaCmd = system('qiitactl fetch posts')
endif
echo s:qiitaCmd.'...done.'
if s:isFetchSingle == 1 | edit! | endif
endfunction
function! s:qiitaUpdate() abort
exec 'cd '.s:qiitaCtlDir
let s:qiitaCmd = system('qiitactl update post '''.expand('%:p').'''')
echo s:qiitaCmd.'...done.'
edit!
endfunction
function! s:qiitaGenerate(file) abort
exec 'cd '.s:qiitaCtlDir
let s:qiitaCmd = system('qiitactl generate file '''.a:file.'''')
exec 'new '.s:qiitaCtlDir.'\'.s:qiitaCmd
%s/\v%(tags:)@<=\s+\[\]/^M- Vim/g " 正規表現中の^Mは<C-v><CR>に置き換えてください。
endfunction
function! s:qiitaCreate() abort
exec 'cd '.s:qiitaCtlDir
let s:qiitaCmd = system('qiitactl create post --tweet '''.expand('%:p').'''')
echo s:qiitaCmd.'...done.'
edit!
endfunction
command! QiitaFetch call s:qiitaFetch()
command! QiitaUpdate call s:qiitaUpdate()
command! -nargs=1 QiitaGenerate call s:qiitaGenerate(<f-args>)
command! QiitaCreate call s:qiitaCreate()
手が入ったのはs:qiitaFetch()
で、要は単発Fetchを出来るようにしようってことです。
別に、勝手に選んでも構わないのであろう?
VimからQiitaにアクセスするにしても、自分の場合は投稿と更新だけできればいいので、引数を取って柔軟にFetchする必要はないわけです。ただYAML部分から今のバッファがqiitactlのmarkdownであることを確認して、そうであれば単発Fetch、そうじゃなければ全体Fetchをするという方法をとっています。
qiitactlからの単発ページのFetchにはページのIDが必要で、それを確認するためにgetline()
を使っているのですが、念の為qiitactlのファイルであることがより確認しやすい3行目を使って確認した後、末尾を切り出してIDを取得します。あとは条件分岐をして、単発のFetchであればリロードもしてあげれば問題ないでしょう。