利用 python 实现 vimwiki 的全文查找

利用 python 实现 vimwiki 的全文查找

[vimwiki 帮助](vimwiki 帮助.md)有自己的全文查找命令:

:VimwikiSearch

用过的人就知道有多么慢,多么慢,多么的悲剧和难用,等了n久以后,找出的东西还得不停的 :cnext

之前写过[利用 python 实现 vimwiki 的 wiki 词查找](利用 python 实现 vimwiki 的 wiki 词查找.md),那么我还是继续发扬 pythoner 的自我折腾的精神,把全文检索的也搞定掉,为了用的时候舒爽一些.

python

python可不太好写那么高效率的全文查找程序.但是我的wiki文档又太多了.

用c扩展?太折腾了.

我在我用的是 ubuntu,我可以沿用 linux 的精神,用 grep 来完成查找,用 windows 的朋友不用继续看了(无形的歧视).我也没什么好办法.

python 主要用来对结果文本进行格式归整.

  • 归整为可以跳转的 wiki 词语,方便直接找到原文章
  • wiki 词语顶头,具体内容缩进4个空格,方便查看 把这个文件 search_all.py 保存在 wiki 目录. 别忘了 chmod a+x search_all.py
#!/usr/bin/python
#encoding=utf-8
#file_name=search_all.py

import sys
import re
import os

args=sys.argv
search=args![pic](1)

grep="grep '%s' ./*.wiki >> tmp.bigzhu"%search
print grep
os.system(grep)

all_content='- status: draft'+'\n'
f=open('tmp.bigzhu','r')
last_find=''
find_tmp=''
regular=re.compile('^\.\/.*?\.wiki')
replace=re.compile('^\.\/.*?\.wiki:')
for i in f:
    find=re.search(regular, i)
    if(find!=None):
        find=find.group()
        if (last_find==find):
            i=re.sub(replace, '    ', i)
        else:
            find_tmp=find
            find_tmp=re.sub('\./', '[[', find_tmp)
            find_tmp=re.sub('\.wiki', ']]', find_tmp)
            i=re.sub(replace, '    ', i)
            i=find_tmp+'\n'+i
        last_find=find
    all_content+=i
f.close()

os.system('rm tmp.bigzhu')

f=open('search.wiki','w')
print >>f, all_content
f.close()

vim 配置

"all search
au FileType wiki map <a-f> :AllSearchWiki 
 
function AllSearchWiki(Name)
    execute "!search_all.py '".a:Name."'"
    execute "VimwikiGoto search"
endfunction
au FileType wiki command! -buffer -nargs=1 AllSearchWiki call AllSearchWiki("<args>")

按下 alt+f ,输入要查找的关键词,开心的用吧.

ps

这个一定要注意加一下,没加的赶紧.

"设置vim的路径为打开文件的当前路径,以使得 wiki 的
"search.py search_all.py 能够正常工作,否则都是在路径 ~/下
au BufNewFile,BufRead *.wiki cd %:p:h