Windows下,VIM调试python的设置

作者:半瓶墨水 链接:http://www.2maomao.com/blog/win32-vim-debug-python/

vim很好用,但是python的set_trace太难用了,参考这篇文章,自己搞了一下。
现在Ctrl+M插入set_trace,Ctrl+U消除所有set_trace,Ctrl+D运行。觉得快捷键不爽的自己改改。
(M=>Mark, U=>Unmark, D=>Do)

总共四个步骤:

1. 安装python新版,http://www.python.org,并把python安装目录加入到系统路径

2. 安装VIM的runscript插件:其作用是在vim脚本中执行python脚本

3. 下载python2.4版本的python24.dll,放到c:\windows\system32目录。(注意,如果你的vim用的不是这个版本,后面的步骤中vim会出错,提示你没有pythonxx.dll,自己去找相应的版本下载),这个主要配合vim使用,也就是解释下面那一步的脚本的,和你调试的时候所用的python版本没有关系。

4. 把下面这段加入到_vimrc文件里面(我加在最后了):

python << EOF
import time
import vim
def SetBreakpoint():
    
nLine = int( vim.eval( 'line(".")'))
    
strLine = vim.current.line
    
i = 0
    
strWhite = ""
    
while strLine[i] == ' ' or strLine[i] == "\t":
        
i += 1
        
strWhite += strLine[i]
    
vim.current.buffer.append(
      
"%(space)spdb.set_trace() %(mark)s Breakpoint %(mark)s" %
         {
'space':strWhite, 'mark': '#' * 30}, nLine - 1)
    
for strLine in vim.current.buffer:
        
if strLine == "import pdb":
            
break
        
else:
            
vim.current.buffer.append( 'import pdb', 0)
            
vim.command( 'normal j1')
            
break
vim.command( 'map <C-M> :py SetBreakpoint()<cr>')
 
def RemoveBreakpoints():
    
nCurrentLine = int( vim.eval( 'line(".")'))
    
nLines = []
    
nLine = 1
    
for strLine in vim.current.buffer:
        
if strLine == 'import pdb' or strLine.lstrip()[:15] == 'pdb.set_trace()':
            
nLines.append( nLine)
        
nLine += 1
    
nLines.reverse()
    
for nLine in nLines:
        
vim.command( 'normal %dG' % nLine)
        
vim.command( 'normal dd')
        
if nLine < nCurrentLine:
            
nCurrentLine -= 1
    
vim.command( 'normal %dG' % nCurrentLine)
vim.command( 'map <C-U> :py RemoveBreakpoints()<cr>')
vim.command( 'map <C-D> :!python %<cr>')
EOF

共 4 条评论

vim是linux的vim吗

是windows下的gvim,不过和linux下应该是同源的。

  • kero 十一月 10th, 2008 10:37 am

vimgdb不知道你有没有试过,就是在vim里一个buffer显示源文件,一个buffer显示gdb窗口,可以给gdb发命令,也可以用key mapping,当前运行行高亮,总之用起来几乎和visual studio一样了。但是那个东西只支持gdb,所以我希望有一个同等功能的支持pdb的。
看了你的文章,但是我在linux上,runscript和这个代码都是windows的,我实在没有精力把它调通,只想问问,用起来的效果是怎么样的?可以同时看到代码、pdb窗,并且跟踪当前行吗?就是比如我从一个py文件调用到另一个文件了,能不能自动把另一个文件打开并跟踪到该位置?
说得比较多,主要是上vim.org找了很久都没发现合适的插件,呵呵

呵呵就这一段脚本,不可能做到那么强大,只是执行的时候在这些断点停止下来,可以做一些命令行的本地变量查询工作

发表评论

  • :(
  • :)
  • :D
  • :X
  • :^
  • :d
  • :e
  • :h
  • :k
  • :l
  • :p
  • :q
  • :s
  • :v
  • :w
  • :x

注意:评论中需包含至少一个中文字,否则视为无效