Windows下,VIM调试python

2023-01-31 05:01:21 windows vim 调试
作者:半瓶墨水 链接: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

 

转自:http://www.2maomao.com/blog/win32-vim-debug-python/

相关文章