python-mode这款插件应该是Vim上写Python最佳辅助型插件了,
Python-mode 的特性
它包含下面这些值得一提的特性:
支持 Python 2.6+ 至 Python 3.2 版本
语法高亮
提供 virtualenv 支持
支持 Python 式折叠
提供增强的 Python 缩进
能够在 Vim 中运行 Python 代码
能够添加/删除断点
支持 Python 代码的快捷移动和操作
能够在运行的同时检查代码(pylint、pyflakes、pylama ……)
支持自动修复 PEP8 错误
允许在 Python 文档中进行搜索
支持代码重构
支持强代码补全
支持定义跳转
相关的设置和快捷键也异常丰富繁多,
这里从项目的文档中选取了大部分实用的设置并进行适当修改,
如果你想要更详细地了解相关内容建议阅读文档,也建议阅读或者浏览一下文档
"python-mode
"开启警告
let g:pymode_warnings = 0
"保存文件时自动删除无用空格
let g:pymode_trim_whitespaces = 1
let g:pymode_options = 1
"显示允许的最大长度的列
let g:pymode_options_colorcolumn = 1
"设置QuickFix窗口的最大,最小高度
let g:pymode_quickfix_minheight = 3
let g:pymode_quickfix_maxheight = 10
"使用python3
let g:pymode_python = 'python3'
"使用PEP8风格的缩进
let g:pymode_indent = 1
"取消代码折叠
let g:pymode_folding = 0
"开启python-mode定义的移动方式
let g:pymode_motion = 1
"启用python-mode内置的python文档,使用K进行查找
let g:pymode_doc = 1
let g:pymode_doc_bind = 'K'
"自动检测并启用virtualenv
let g:pymode_virtualenv = 1
"不使用python-mode运行python代码
let g:pymode_run = 0
"let g:pymode_run_bind = 'r'
"不使用python-mode设置断点
let g:pymode_breakpoint = 0
"let g:pymode_breakpoint_bind = 'b'
"启用python语法检查
let g:pymode_lint = 1
"修改后保存时进行检查
let g:pymode_lint_on_write = 0
"编辑时进行检查
let g:pymode_lint_on_fly = 0
let g:pymode_lint_checkers = ['pyflakes', 'pep8']
"发现错误时不自动打开QuickFix窗口
let g:pymode_lint_cwindow = 0
"侧边栏不显示python-mode相关的标志
let g:pymode_lint_signs = 0
"let g:pymode_lint_todo_symbol = 'WW'
"let g:pymode_lint_comment_symbol = 'CC'
"let g:pymode_lint_visual_symbol = 'RR'
"let g:pymode_lint_error_symbol = 'EE'
"let g:pymode_lint_info_symbol = 'II'
"let g:pymode_lint_pyflakes_symbol = 'FF'
"启用重构
let g:pymode_rope = 1
"不在父目录下查找.ropeproject,能提升响应速度
let g:pymode_rope_lookup_project = 0
"光标下单词查阅文档
let g:pymode_rope_show_doc_bind = 'd'
"项目修改后重新生成缓存
let g:pymode_rope_regenerate_on_write = 1
"开启补全,并设置为默认快捷键
let g:pymode_rope_completion = 1
let g:pymode_rope_complete_on_dot = 1
let g:pymode_rope_completion_bind = ''
"g跳转到定义处,同时新建竖直窗口打开
let g:pymode_rope_goto_definition_bind = 'g'
let g:pymode_rope_goto_definition_cmd = 'vnew'
"重命名光标下的函数,方法,变量及类名
let g:pymode_rope_rename_bind = 'rr'
"重命名光标下的模块或包
let g:pymode_rope_rename_module_bind = 'r1r'
"开启python所有的语法高亮
let g:pymode_syntax = 1
let g:pymode_syntax_all = 1
"高亮缩进错误
let g:pymode_syntax_indent_errors = g:pymode_syntax_all
"高亮空格错误
let g:pymode_syntax_space_errors = g:pymode_syntax_all
下面是对上面设置的部分说明,
let g:pymode_options = 1
也就是说启用了
setlocal complete+=t
setlocal formatoptions-=t
if v:version > 702 && !&relativenumber
setlocal number
endif
setlocal nowrap
setlocal textwidth=79
setlocal commentstring=#%s
setlocal define=^\s*\\(def\\\\|class\\)
上面启用了python-mode定义的Vim移动方式,也就是这句
"开启python-mode定义的移动方式
let g:pymode_motion = 1
开启以后就可以使用下面的动作方便地跳转到函数,类和方法等
按键
功能
[[
Jump to previous class or function (normal, visual, operator modes)
]]
Jump to next class or function (normal, visual, operator modes)
[M
Jump to previous class or method (normal, visual, operator modes)
]M
Jump to next class or method (normal, visual, operator modes)
aC
Select a class. Ex: vaC, daC, yaC, caC (normal, operator modes)
iC
Select inner class. Ex: viC, diC, yiC, ciC (normal, operator modes)
aM
Select a function or method. Ex: vaM, daM, yaM, caM (normal, operator modes)
iM
Select inner function or method. Ex: viM, diM, yiM, ciM (normal, operator modes)
这里没有使用python-mode设置的快捷键运行Python是因为我在设置里已经绑定了F9运行Python代码,具体看这里,如果你想启用python-mode设置的python代码运行方式修改上面相关的设置即可,原始设置
"不使用python-mode运行python代码
let g:pymode_run = 0
"let g:pymode_run_bind = 'r'
这里同样没有使用python-mode设置的debug方式,因为我用Vebuggerdebug,支持的语言比较多,语言切换不需要记其他的debug模式快捷键,如果你不用Vebugger,可以修改下面的设置启用python-mode的debug
"不使用python-mode设置断点
let g:pymode_breakpoint = 0
"let g:pymode_breakpoint_bind = 'b'
语法检查这一块,因为我用ale,它能在编辑时实时显示错误信息,也会有相关的标志提示,所以我取消了python-mode在这一块的设置,如果你想使用python-mode在这一块的设置,修改下面的设置
"启用python语法检查
let g:pymode_lint = 1
"修改后保存时进行检查
let g:pymode_lint_on_write = 0
"编辑时进行检查
let g:pymode_lint_on_fly = 0
let g:pymode_lint_checkers = ['pyflakes', 'pep8']
"发现错误时不自动打开QuickFix窗口
let g:pymode_lint_cwindow = 0
"侧边栏不显示python-mode相关的标志
let g:pymode_lint_signs = 0
"let g:pymode_lint_todo_symbol = 'WW'
"let g:pymode_lint_comment_symbol = 'CC'
"let g:pymode_lint_visual_symbol = 'RR'
"let g:pymode_lint_error_symbol = 'EE'
"let g:pymode_lint_info_symbol = 'II'
"let g:pymode_lint_pyflakes_symbol = 'FF'
语法检查的引擎支持pylint, pep257, pep8, pyflakes和mccabe ,我这里使用的是pyflakes和pep8,其中pyflakes负责检查语法错误,pep8检查代码风格,要使用这个必须先在系统上安装相应的包,在Debian上可以在终端执行
$ sudo aptitude install python-flake8 python3-flake8 flake flake8
当然这里也可以使用其他的语法检查引擎,安装相应的包就可以了,特别要注意的一点是不要使用pylint因为它非常慢。而且发现错误后键入:PymodeLintAuto会根据PEP8标准自动修复当前buffer中的错误。