Python脚本在使用的时候有不适的知识需要学习。在VIM中就有很广泛的Python脚本应用。在当前实现原理很简单,在VIM中执行JPython()这个VIM函数,然后函数负责去调用python(当然这里需要把常用版本的python放到环境变量中去)。
调用的命令是"python -c ...",即直接执行后面的字符串,字符串中有完整的执行脚本。脚本中,首先打开一个文件,用fp.readlines()读出所有行放入一个列表中(g_text),然后使用execfile()去调用JPython()传入的脚本名和全局变量g:JPYTHON_PATH。这样一来Python脚本中就无需关心文件IO和路径的问题,直接去使用g_text变量即可。当python把内容用print或者sys.stdout输出后会被VIM替换掉原始的内容。代码如下。
- 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, "'\"") . '"'
- " 发现输出后会有^M,进行替换用
- if has('windows')
- try
- exec '%s/\r//g'
- catch
- endtry
- endif
- endfunction
- let g:JPYTHON_PATH = "D:/scripts/vim"
把这个函数复制到vimrc中,然后配置g:PYTHON_PATH到指定位置即可。
这只是设想的一个简略实现,实际环境中可能会有更好的方式去操作,也应该还有更好的方式达到VIM和Python交互的目的。有朋友可能问为什么不直接用VIM的脚本,主要原因是本人对VIM脚本仅限于实现这种简单功能的水平,相信为了使用VIM而研究VIM脚本的人也不多,更谈不上复杂的应用,python相对大众化,而且日常都在使用,写与改相对熟练。
大家有什么好的想法或者建议请给我留言,也欢迎提出更好的方案。
【编辑推荐】