function! zkvim#create_link(zk_title, zk_id) return '[' . a:zk_title . ']' . '(' . a:zk_id . ')' endfunction function! zkvim#create_append_link_command(zk_title, zk_id) return 'normal! a' . zkvim#create_link(a:zk_title, a:zk_id) endfunction function! zkvim#get_new_zettel_id() let zk_cmd = 'NOZKEDIT=true zk new' return system(zk_cmd) endfunction function! zkvim#get_zettel_id(selection) return trim(matchstr(a:selection, '[0-9]*\ ')) " TODO: Find out why this requires a space at the end endfunction function! zkvim#get_zettel_title(selection) return trim(matchstr(a:selection, '#\zs.*\ze')) endfunction function! zkvim#znew() let zk_filename = zkvim#get_new_zettel_id() execute 'edit ' . zk_filename endfunction function! zkvim#zinsertnew(zk_title) let zk_filename = zkvim#get_new_zettel_id() let zk_id = zkvim#get_zettel_id(zk_filename) execute zkvim#create_append_link_command(a:zk_title, zk_id) execute 'write' execute 'edit ' . zk_filename execute 'normal! a# ' . a:zk_title endfunction function! zkvim#sink(selection) abort let zk_id = zkvim#get_zettel_id(a:selection) let zk_title = zkvim#get_zettel_title(a:selection) execute zkvim#create_append_link_command(zk_title, zk_id) endfunction function! zkvim#zsearch() let zk_cmd = 'zk list' let fzf_options = #{ \source: zk_cmd, \sink: function('zkvim#sink')} call fzf#run(fzf_options) endfunction