Python脚本在VIM环节中的系统介绍


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替换掉原始的内容。代码如下。

  1. function! JPython(py_fname)  
  2. let w:fname = g:JPYTHON_PATH . '/' . a:py_fname  
  3. echo bufname(".")  
  4. let w:cmd = 'fp = open(r"' . bufname(".") . '", "rb");'  
  5. let w:cmd .'g_text = fp.readlines();' 
  6. let w:cmd .'fp.close(); del fp;' 
  7. let w:cmd .'execfile("' . w:fname . '");'  
  8. exec '%!python -c "' . escape(w:cmd, "'\"") . '"'  
  9. " 发现输出后会有^M,进行替换用  
  10. if has('windows')  
  11. try  
  12. exec '%s/\r//g'  
  13. catch  
  14. endtry  
  15. endif  
  16. endfunction  
  17. let g:JPYTHON_PATH = "D:/scripts/vim" 

把这个函数复制到vimrc中,然后配置g:PYTHON_PATH到指定位置即可。

这只是设想的一个简略实现,实际环境中可能会有更好的方式去操作,也应该还有更好的方式达到VIM和Python交互的目的。有朋友可能问为什么不直接用VIM的脚本,主要原因是本人对VIM脚本仅限于实现这种简单功能的水平,相信为了使用VIM而研究VIM脚本的人也不多,更谈不上复杂的应用,python相对大众化,而且日常都在使用,写与改相对熟练。

大家有什么好的想法或者建议请给我留言,也欢迎提出更好的方案。

评论关闭