Python腳本在VIM環(huán)節(jié)中的系統(tǒng)介紹
Python腳本在使用的時候有不適的知識需要學(xué)習(xí)。在VIM中就有很廣泛的Python腳本應(yīng)用。在當(dāng)前實現(xiàn)原理很簡單,在VIM中執(zhí)行JPython()這個VIM函數(shù),然后函數(shù)負(fù)責(zé)去調(diào)用python(當(dāng)然這里需要把常用版本的python放到環(huán)境變量中去)。
調(diào)用的命令是"python -c ...",即直接執(zhí)行后面的字符串,字符串中有完整的執(zhí)行腳本。腳本中,首先打開一個文件,用fp.readlines()讀出所有行放入一個列表中(g_text),然后使用execfile()去調(diào)用JPython()傳入的腳本名和全局變量g:JPYTHON_PATH。這樣一來Python腳本中就無需關(guān)心文件IO和路徑的問題,直接去使用g_text變量即可。當(dāng)python把內(nèi)容用print或者sys.stdout輸出后會被VIM替換掉原始的內(nèi)容。代碼如下。
- function! JPython(py_fname)
- let w:fname = g:JPYTHON_PATH . '/' . a:py_fname
- echo bufname(".")
- let w:cmd = 'fp = open(r"' . bufname(".") . '", "rb");'
- let w:cmd .= 'g_text = fp.readlines();'
- let w:cmd .= 'fp.close(); del fp;'
- let w:cmd .= 'execfile("' . w:fname . '");'
- exec '%!python -c "' . escape(w:cmd, "'\"") . '"'
- " 發(fā)現(xiàn)輸出后會有^M,進(jìn)行替換用
- if has('windows')
- try
- exec '%s/\r//g'
- catch
- endtry
- endif
- endfunction
- let g:JPYTHON_PATH = "D:/scripts/vim"
把這個函數(shù)復(fù)制到vimrc中,然后配置g:PYTHON_PATH到指定位置即可。
這只是設(shè)想的一個簡略實現(xiàn),實際環(huán)境中可能會有更好的方式去操作,也應(yīng)該還有更好的方式達(dá)到VIM和Python交互的目的。有朋友可能問為什么不直接用VIM的腳本,主要原因是本人對VIM腳本僅限于實現(xiàn)這種簡單功能的水平,相信為了使用VIM而研究VIM腳本的人也不多,更談不上復(fù)雜的應(yīng)用,python相對大眾化,而且日常都在使用,寫與改相對熟練。
大家有什么好的想法或者建議請給我留言,也歡迎提出更好的方案。
【編輯推薦】