把vim配置成順手的python輕量級IDE(一)
分享一篇文章,正好最近正在折騰VIM,原文在把vim配置成順手的python輕量級IDE。
網上已經有很多很好的vim使用和配置教程。但每個人都有自己的習慣,因此教程僅作參考,只有在使用過程中才能體會到具體的問題,然後解決問題才能把vim調教的順手。本文不再贅述vim的操作,直接從配置開始。
一、配置文件
- 基礎配置
vim的所有配置都是在 ~/.vimrc 這個文件中完成。默認是沒有的需要自己新建:
cd ~ntouch .vimrcnvim .vimrcn
以下是我個人的.vimrc文件的基礎配置部分,雙引號內為注釋內容:
"去掉vi的一致性"nset nocompatiblen"顯示行號"nset numbern" 隱藏滾動條" nset guioptions-=r nset guioptions-=Lnset guioptions-=bn"隱藏頂部標籤欄"nset showtabline=0n"設置字體"nset guifont=Monaco:h13 nsyntax on "開啟語法高亮"nlet g:solarized_termcolors=256 "solarized主題設置在終端下的設置"nset background=dark "設置背景色"ncolorscheme solarizednset nowrap "設置不折行"nset fileformat=unix "設置以unix的格式保存文件"nset cindent "設置C樣式的縮進格式"nset tabstop=4 "設置table長度"nset shiftwidth_=4 "同上"nset showmatch "顯示匹配的括弧"nset scrolloff=5 "距離頂部和底部5行"nset laststatus=2 "命令行為兩行"nset fenc=utf-8 "文件編碼"nset backspace=2nset mouse=a "啟用滑鼠"nset selection=exclusivenset selectmode=mouse,keynset matchtime=5nset ignorecase "忽略大小寫"nset incsearchnset hlsearch "高亮搜索項"nset noexpandtab "不允許擴展table"nset whichwrap+=<,>,h,lnset autoreadnset cursorline "突出顯示當前行"nset cursorcolumn "突出顯示當前列"n
- 一鍵執行python代碼
其他常用的編輯器都有很方便的一鍵執行的功能或插件,例如Sublime Text的command+b、Atom的script插件。vim實現這個功能只需要在.vimrc中添加如下代碼就可以實現F5一鍵執行python代碼,而且由於是調用了vim的quickfix功能,因此還支持如果出現錯誤,跳轉到錯誤行。
"按F5運行python"nmap <F5> :Autopep8<CR> :w<CR> :call RunPython()<CR>nfunction RunPython()n let mp = &makeprgn let ef = &errorformatn let exeFile = expand("%:t")n setlocal makeprg=python -un set efm=%C %.%#,%A File "%f", line %l%.%#,%Z%[%^ ]%@=%mn silent make %n copenn let &makeprg = mpn let &errorformat = efnendfunctionn
但是這個一鍵執行有一個小問題,由於quickfix的原因,不支持標準輸入input()和raw_input(),只要代碼中有這兩個函數,100%卡死,目前這個問題貌似還無解。如果不用quickfix就可以支持輸入,但是在終端中使用的話就是跳回終端輸入和輸出;使用macvim的話又會出現輸出數據很多時就無法查看全部。由於我在寫python是標準輸入用的較少,就決定放使用quickfix來保證實用和美觀。
二、插件
先上我的插件目錄,本文只著重介紹Vundle和YouCompleteMe兩個插件因為這兩個插件的安裝過程比較複雜一些,而其他插件的安裝幾乎可以算是傻瓜式的:
Plugin VundleVim/Vundle.vimnPlugin Valloric/YouCompleteMenPlugin Lokaltog/vim-powerlinenPlugin scrooloose/nerdtreenPlugin Yggdroot/indentLinenPlugin jiangmiao/auto-pairsnPlugin tell-k/vim-autopep8nPlugin scrooloose/nerdcommentern
Vundle
殺手級插件。這是唯一一個需要手動安裝的插件。有了這個,安裝其他插件就方便很多。
- 1、安裝首先需要從github上得到項目的源碼,在終端下的命令如下(請自備git):
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vimn
若提醒目錄不存在請先自行新建目錄:
cd ~nmkdir .vimncd .vimnmkdir bundlen
然後需要在.vimrc文件中添加一些配置才能生效:
filetype offnset rtp+=~/.vim/bundle/Vundle.vimncall vundle#begin()nPlugin VundleVim/Vundle.vimnPlugin 你的插件ncall vundle#end()nfiletype plugin indent on n
- 2、使用Vundle安裝插件的方法非常簡單,只需要兩步。先在.vimrc文件中添加Plugin命令:
「這是安裝Github上的插件」nPlugin Lokaltog/vim-powerlinen
下面是安裝在vim-script上的插件的方法,引號里為插件名稱,其他插件安裝方法請自行查看項目主頁:
Plugin L9n
在添加完.vimrc的的配置後,:wq保存並退出vim,重啟vim並輸入下面的命令後,vim就會自動下載並安裝插件了
:PluginInstalln
當看到命令行出現Done!就代表所有插件安裝完成啦!
YouCompleteMe
殺手級插件。vim上的自動補全神器,能夠提供類似IDE的自動補全體驗,還能和Syntastic配合提供實時語法檢查。YouCompleteMe與其他插件不同的地方在於不僅需要安裝,還需要自己手動編譯,而且還需要在.vimrc中配置。
YouCompleteMe支持的語言有:
C、Objectiv-c、C#、C++、Objectiv-C++、Php、Javascript、Typescript、python、Go、Rust
- 安裝只需要一條命令:
Plugin Valloric/YouCompleteMen
- 編譯的命令:
cd ~/.vim/bundle/YouCompleteMen./install.py --clang-completern
參數 --clang-completer是為了加上C系列語言的自動補全,如果不需要可以不加,它同時還支持其他語言的補全,詳細請看官方文檔。
- YouCompleteMe涉及到的配置選項有很多,筆者也沒有完全了解,此外,個人覺得Syntactic的提示略醜陋,因此沒有安裝。此處指列出筆者在使用的,詳細請查看官方文檔:
"默認配置文件路徑"nlet g:ycm_global_ycm_extra_conf = ~/.ycm_extra_conf.pyn"打開vim時不再詢問是否載入ycm_extra_conf.py配置"nlet g:ycm_confirm_extra_conf=0nset completeopt=longest,menun"python解釋器路徑"nlet g:ycm_path_to_python_interpreter=/usr/local/bin/pythonn"是否開啟語義補全"nlet g:ycm_seed_identifiers_with_syntax=1n"是否在注釋中也開啟補全"nlet g:ycm_complete_in_comments=1nlet g:ycm_collect_identifiers_from_comments_and_strings = 0n"開始補全的字元數"nlet g:ycm_min_num_of_chars_for_completion=2n"補全後自動關機預覽窗口"nlet g:ycm_autoclose_preview_window_after_completion=1n" 禁止緩存匹配項,每次都重新生成匹配項"nlet g:ycm_cache_omnifunc=0n"字元串中也開啟補全"nlet g:ycm_complete_in_strings = 1n"離開插入模式後自動關閉預覽窗口"nautocmd InsertLeave * if pumvisible() == 0|pclose|endifn"回車即選中當前項"ninoremap <expr> <CR> pumvisible() ? <C-y> : <CR> n"上下左右鍵行為"ninoremap <expr> <Down> pumvisible() ? <C-n> : <Down>ninoremap <expr> <Up> pumvisible() ? <C-p> : <Up>ninoremap <expr> <PageDown> pumvisible() ? <PageDown><C-p><C-n> : <PageDown>ninoremap <expr> <PageUp> pumvisible() ? <PageUp><C-p><C-n> : <PageUp>n
vim-powerline
用於美化狀態欄,原生的狀態欄略丑而且顯示的信息很少,因此這款好看又實用的狀態欄就派上用場啦。開箱即用,方便快捷。
至於官網上的三角形效果需要安裝額外的字體,筆者表示折騰很久沒配置成功,而就這樣不影響使用,視覺效果也還不錯,因此就懶得折騰了。
NERDTree
給vim添加一個樹形目錄,更方便的查看和切換文件。
- .vimrc中的配置:
"F2開啟和關閉樹"nmap <F2> :NERDTreeToggle<CR>nlet NERDTreeChDirMode=1n"顯示書籤"nlet NERDTreeShowBookmarks=1n"設置忽略文件類型"nlet NERDTreeIgnore=[~$, .pyc$, .swp$]n"窗口大小"nlet NERDTreeWinSize=25n
indentLine、vim-autopep8
indentLine是一款縮進指示線,由純字元實現,效果比較完美。由於python是靠代碼縮進來判斷代碼塊的,因此縮進指示的功能有多方便就不言而喻了。indentLine默認是關閉的,因此需要在.vimrc中配置才能看到效果。
autopep8是一款自動格式化工具,安裝後在Normal模式輸入:Autopep8或按F8就可以自動依照pep8的標準自動格式化代碼。
以下是個人針對它們的配置,其他配置請參考項目主頁:
"縮進指示線"nlet g:indentLine_char=┆nlet g:indentLine_enabled = 1nn"autopep8設置"nlet g:autopep8_disable_show_diff=1n
auto-pairs、nerdcommenter
這兩款插件讓寫代碼更方便。auto-pairs主要功能是括弧和引號自動補全,輸入左引號和左括弧自動補全另外一半。
nerdcommenter和上面的NERDTree是同一作者,主要功能是方便的寫注釋具體用法請參考項目主頁。需要注意的是nerdcommenter的leader默認為」「,一般可以用下面的命令更改:
let mapleader=,n
一般IDE和很多編輯器都提供command+/快速添加(取消)注釋,但是vim添加註釋和取消注釋需要不同的快捷鍵,而且多行注釋就是淚啊,各種折騰後發現了nerdcommenter的ci
命令,只需要在.vimrc文件中添加一條設置就可以一鍵注釋和反注釋:
map <F4> <leader>ci <CR>n
多行注釋只需要在normal模式下按v並移動游標選擇需要注釋的行,再按F4就可以為所有選中的行添加註釋。
結語
至此,所有配置結束,就可以用vim愉快的和python玩耍啦。
水平有限,如有錯誤,歡迎指正。
你想更深入了解學習Python知識體系,你可以看一下我們花費了一個多月整理了上百小時的幾百個知識點體系內容:
【超全整理】《Python自動化全能開發從入門到精通》python基礎教程筆記全放送
推薦閱讀: