1. 程式人生 > >Vim外掛之python-mode

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, pyflakesmccabe ,我這裡使用的是pyflakespep8,其中pyflakes負責檢查語法錯誤,pep8檢查程式碼風格,要使用這個必須先在系統上安裝相應的包,在Debian上可以在終端執行

$ sudo aptitude install python-flake8 python3-flake8 flake flake8

當然這裡也可以使用其他的語法檢查引擎,安裝相應的包就可以了,特別要注意的一點是不要使用pylint因為它非常慢。而且發現錯誤後鍵入:PymodeLintAuto會根據PEP8標準自動修復當前buffer中的錯誤。