Vim外掛之python-mode
python-mode這款外掛應該是Vim上寫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 = '<Leader>r'
"不使用python-mode設定斷點
let g:pymode_breakpoint = 0
"let g:pymode_breakpoint_bind = '<leader>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 = '<C-c>d'
"專案修改後重新生成快取
let g:pymode_rope_regenerate_on_write = 1
"開啟補全,並設定<C-Tab>為預設快捷鍵
let g:pymode_rope_completion = 1
let g:pymode_rope_complete_on_dot = 1
let g:pymode_rope_completion_bind = '<C-Tab>'
"<C-c>g跳轉到定義處,同時新建豎直視窗開啟
let g:pymode_rope_goto_definition_bind = '<C-c>g'
let g:pymode_rope_goto_definition_cmd = 'vnew'
"重新命名游標下的函式,方法,變數及類名
let g:pymode_rope_rename_bind = '<C-c>rr'
"重新命名游標下的模組或包
let g:pymode_rope_rename_module_bind = '<C-c>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 = '<Leader>r'
這裡同樣沒有使用python-mode設定的debug方式,因為我用Vebuggerdebug,支援的語言比較多,語言切換不需要記其他的debug模式快捷鍵,如果你不用Vebugger,可以修改下面的設定啟用python-mode的debug
"不使用python-mode設定斷點
let g:pymode_breakpoint = 0
"let g:pymode_breakpoint_bind = '<leader>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中的錯誤。