Pythonvim補全
1. 如何使 Vim 下開發 python 調試更方便
剛開始用vim寫python的時候,感覺很不方便,於是就用了圖形界面的Pycharm(如果是windows用戶,這個IDE應該是標配),用了一段時間也沒有覺得有什麼不好,不過,腦子里總是會想起《程序員修煉之道》中,那句」最好是精通一種編輯器,並將其用於所有編輯任務。如果不堅持使用一種編輯器,可能會面臨現代的巴別特大混亂。」所以,我又決定用vim來寫python。
在知乎上有很多vim寫python的插件推薦,不過我感覺很多人回答都不動腦子,這些回答主要有兩個問題:
回答不全面,很多人都只是推薦一款插件,然後貼個鏈接就完了,如果要想很爽的用vim寫python,可以肯定的是,一款插件是不夠的
貼上自己的配置,說自己的配置有多爽,然後就不管了。如果是一個vim新手,是用不著這么多配置的,如果是一個vim老手,也不會放棄自己原有的配置,使用別人自定義、認為很爽的個性化配置
- 1. 一鍵執行
- """""""""""""""""""""" "Quickly Run """"""""""""""""""""""
- map <F5> :call CompileRunGcc()<CR>
- func! CompileRunGcc()
- exec "w"
- if &filetype == 'c'
- exec "!g++ % -o %<"
- exec "!time ./%<"
- elseif &filetype == 'cpp'
- exec "!g++ % -o %<"
- exec "!time ./%<"
- elseif &filetype == 'java'
- exec "!javac %"
- exec "!time java %<"
- elseif &filetype == 'sh'
- :!time bash % elseif &filetype == 'python'
- exec "!time python2.7 %"
- elseif &filetype == 'html'
- exec "!firefox % &"
- elseif &filetype == 'go' " exec "!go build %<"
- exec "!time go run %"
- elseif &filetype == 'mkd'
- exec "!~/.vim/markdown.pl % > %.html &"
- exec "!firefox %.html &"
- endif
- endfunc
- 2. 代碼補全(snipMate)
- if __name__ == '__main__':
- main()
- for needle in haystack: # code...
snipMate
xptemplate
- 3. 語法檢查(Syntastic)
- 4. 編程提示(jedi-vim)
- sudo aptitude install vim-gnome vim vim-common vim-tiny
- 至於調試,難道你們不是用ipdb的嗎?如果不是,趕緊用用,你們會喜歡的。
所以,這些回答都不是很靠譜。我爭取推薦一些靠譜的東西,那麼,就開始吧!
這個不是插件,而是一個自定義的vim配置。很多時候我們寫python,都是寫一些較為簡單的腳本,那麼,這個一鍵執行的功能就非常實用,我個人感覺最實用的是在寫單元測試的時候,寫完一個單元測試,都不用退出vim,立即執行就能看到結果。
將下面的配置放到.vimrc文件即可:
代碼補全能夠顯著地減少你敲鍵的次數,並且將你從瑣碎的語法中解放出來。說白了,就是幫你寫代碼!
如果使用snipMate插件,那麼,當你輸入ifmain以後按tab鍵,將會自動為你生成下面的代碼:
輸入for,再按tab鍵,生成如下代碼:
代碼補全有兩款插件都比較不錯,可以根據自己的需要進行選擇:
syntastic是一款強大的語法檢查插件,當你保存源文件時,它就會執行,並提示用戶哪些代碼存在語法錯誤,哪些代碼風格不符合規范,並給出具體的提示。
例如,python代碼風格默認設置為PEP8,即使你不知道PEP8的風格,只要你使用syntastic插件,並根據它給出的提示修改,那麼,你就能寫出完全符合PEP8風格的代碼!
jedi-vim是基於jedi的自動補全插件,與Syntastic 不同的是,該插件更加智能,更貼切的稱呼是」編程提示」,而不是代碼補全插件。
如下圖所示:

可以說,這個插件是寫vim的標配,並且,真正讓vim寫python變成一件輕松愉快的事情。
注意: 安裝驚jedi-vim插件,需要在電腦中安裝jedi,根據jedi-vim給出的提示,正常按裝即可。不過我之前遇到一個問題,在公司的虛擬機裡面,安裝以後不起作用,google了半天沒有成功,最後更新了一下vim就可以了,希望遇到相同問題的人,能夠看到。
2. 如何在vim中使用tab進行python代碼補全
我這里要介紹的功能叫"new-omni-completion(全能補全)", 你可以用下面的命令看看介紹:
:help new-omni-completion
你還需要在~/.vimrc文件中增加下面兩句:
filetype plugin indent on
打開文件類型檢測, 加了這句才可以用智能補全
set completeopt=longest,menu
關掉智能補全時的預覽窗口
請確定你的Ctags 已經安裝好, 並且生成的tags文件已經可以用了, 那麼我們就要抄傢伙開搞了.
用vim打開源文件
$ vim /home/wooin/vim71/src/main.c (linux下的,文件是一樣的。)
設置tags文件
:set tags=/home/wooin/vim71/tags
隨便找一個有成員變數的對象, 比如"parmp",
進入Insert模式, 將游標放在"->"後面,
然後按下"Ctrl+X Ctrl+O",, 顯示所有匹配的標簽,。
如果你增加了一些成員變數, 全能補全還不能馬上將新成員補全, 需要你重新生成一下tags文件, 但是你不用重啟vim, 只是重新生成一下tags文件就行了,
這時全能補全已經可以自動補全了。
vim中的其他補全方式還有:
Ctrl+X Ctrl+L 整行補全 Ctrl+X Ctrl+N
根據當前文件里關鍵字補全
Ctrl+X Ctrl+K
根據字典補全 Ctrl+X Ctrl+T
根據同義詞字典補全
Ctrl+X Ctrl+I
根據頭文件內關鍵字補全 Ctrl+X Ctrl+]
根據標簽補全
Ctrl+X Ctrl+F
補全文件名 Ctrl+X Ctrl+D
補全宏定義
Ctrl+X Ctrl+V
補全vim命令 Ctrl+X Ctrl+U
用戶自定義補全方式
Ctrl+X Ctrl+S
拼寫建議
是不是還是覺得沒有tab方便?好的,人家開發了一個叫做supertab.vim這個插件。安裝後,
在你的~/.vimrc文件中加上這兩句:
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
以後當你准備按"Ctrl+X
Ctrl+O"的時候直接按<Tab>就好了,這下你滿足了吧。
我稍微再介紹一下上面那兩句配置信息:
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" 設置按下<Tab>後默認的補全方式, 默認是<C-P>, 「
現在改為<C-X><C-O>. 關於<C-P>的補全方式,
" 還有其他的補全方式,
你可以看看下面的一些幫助:
" :help ins-completion
" :help compl-omni
let g:SuperTabRetainCompletionType=2
" 0 -
不記錄上次的補全方式
" 1 - 記住上次的補全方式,直到用其他的補全命令改變它
" 2 - 記住上次的補全方式,直到按ESC退出插入模式為止
3. vim怎麼設置自動補全python關鍵字
使用tab鍵可以實現自動補全。
參考:
http://kodango.com/bash-competion-programming
4. ubutu python vim 自動補全怎麼設置
試試吧。 在ubuntu下,vim配置就是可以放.vimrc里的。不過python.vim還是要復制到syntax目錄。沒有root許可權不知道行不行。mqfv夜歸人同學說可以放在/home/你的用戶/.vim/syntax目錄。也要試過才知道。不過預設的vi用來編輯python已經足夠用了。也是高亮的。我通常用geany,不過自動補全功能,聽說也可以放進vim里了。不過python的自動補全意義不大。在eclipse和wing里用,感覺也有些意外。不過因為python不是嚴格編譯語言,所以代碼沒有執行到那裡之間都是不知道什麼含義的。自動補全經常沒有什麼效果。可以減少標准庫的記憶量。
5. 如何啟用vim自帶python自動補全功能
Python omni complete, 安裝啟用之後,是這個樣子的:
1. 如何安裝 'Python omni complete' plugin.
如果是VIM7.3,不需要再下載 pythoncomplete.vim 這個插件,因為安裝時自帶了。
但是, 必須保證編譯安裝 VIM 的時候啟用了 Python 特性, 即
./configure --with-features=huge --enable-pythoninterp=yes
因為,pythoncomplete.vim 是用 python 寫的。
我們可以在vim autoload 目錄下看到
ls -la /usr/local/share/vim/vim73/autoload/
drwxr-xr-x 3 root root 4096 2011-02-16 16:29 .
drwxr-xr-x 17 root root 4096 2011-02-16 16:29 ..
-rw-r--r-- 1 root root 3669 2011-02-16 16:29 adacomplete.vim
-rw-r--r-- 1 root root 22439 2011-02-16 16:29 ada.vim
-rw-r--r-- 1 root root 16938 2011-02-16 16:29 ccomplete.vim
-rw-r--r-- 1 root root 15922 2011-02-16 16:29 csscomplete.vim
-rw-r--r-- 1 root root 2998 2011-02-16 16:29 decada.vim
-rw-r--r-- 1 root root 23804 2011-02-16 16:29 getscript.vim
-rw-r--r-- 1 root root 5331 2011-02-16 16:29 gnat.vim
-rw-r--r-- 1 root root 6093 2011-02-16 16:29 gzip.vim
-rw-r--r-- 1 root root 24253 2011-02-16 16:29 htmlcomplete.vim
-rw-r--r-- 1 root root 27028 2011-02-16 16:29 javascriptcomplete.vim
-rw-r--r-- 1 root root 10130 2011-02-16 16:29 netrwFileHandlers.vim
-rw-r--r-- 1 root root 8684 2011-02-16 16:29 netrwSettings.vim
-rw-r--r-- 1 root root 338720 2011-02-16 16:29 netrw.vim
-rw-r--r-- 1 root root 1232 2011-02-16 16:29 paste.vim
-rw-r--r-- 1 root root 293714 2011-02-16 16:29 phpcomplete.vim
-rw-r--r-- 1 root root 21507 2011-02-16 16:29 python3complete.vim
-rw-r--r-- 1 root root 22019 2011-02-16 16:29 pythoncomplete.vim
-rw-r--r-- 1 root root 773 2011-02-16 16:29 README.txt
-rw-r--r-- 1 root root 23443 2011-02-16 16:29 rubycomplete.vim
-rw-r--r-- 1 root root 6184 2011-02-16 16:29 spellfile.vim
-rw-r--r-- 1 root root 30201 2011-02-16 16:29 sqlcomplete.vim
-rw-r--r-- 1 root root 16839 2011-02-16 16:29 syntaxcomplete.vim
-rw-r--r-- 1 root root 21145 2011-02-16 16:29 tar.vim
-rw-r--r-- 1 root root 12646 2011-02-16 16:29 tohtml.vim
-rw-r--r-- 1 root root 23031 2011-02-16 16:29 vimball.vim
drwxr-xr-x 2 root root 4096 2011-02-16 16:29 xml
-rw-r--r-- 1 root root 14933 2011-02-16 16:29 xmlcomplete.vim
-rw-r--r-- 1 root root 11906 2011-02-16 16:29 zip.vim
如果沒有,則下載 pythoncomplete.vim, 並復制到 ~/.vim/autoload/ 目錄下。
2. 如何啟用自動補全
在 ~/.vimrc 中添加這樣兩行
[plain] view plain
filetype plugin on
autocmd FileType python set omnifunc=pythoncomplete#Complete
此時,我們就完成了安裝及配置工作。
3. 如何使用自動補全
例如我們輸入
[python] view plain 在CODE上查看代碼片派生到我的代碼片
import sys
print sys.
此時, 按下 Ctrl+x, Ctrl+o, 就能看到提示列表框,以及對應的 docstring.
Ctrl+n, Ctrl+p 來上下選擇
ESC 來取消提示框。
4. 不足之處
a. 屬性沒有 docstring, 只有函數有。
:( 這個似乎不好搞,因為屬性似乎沒有 docstring 這個概念。
b. 在沒有下拉框的情況下,沒有 docstring.
好在, pythoncomplete.vim 是 python 寫的,有空大家可以自己完善一下。
6. 怎樣用vim自動補全python
Pydiction 可以是我們使用Tab鍵自動補全Python代碼在Vim,是一款非常不錯的插件。
Pydiction不需要安裝,所有沒有任何依賴包問題,Pydiction主要包含三個文件。
1
2
3
python_pydiction.vim -- Vim plugin that autocompletes Python code.
complete-dict -- Dictionary file of Python keywords, moles, etc.
pydiction.py -- Python script to add more words to complete-dict.
下載Pydiction
1
2
3
4
5
mkdir ~/.vim
mkidr ~/.vim/bundle
cd ~/.vim/bundle
#這里我們也可以自己下載好上傳到linux系統中
git clone https://github.com/rkulla/pydiction.git
配置Pydiction
1
2
3
4
#- UNIX/LINUX/OSX: Put python_pydiction.vim in ~/.vim/after/ftplugin/
#- WINDOWS: Put python_pydiction.vim in C:\vim\vimfiles\ftplugin\
# Assuming you installed Vim to C:\vim\
cp -r ~/.vim/bundle/pydiction/after/ ~/.vim
新建.vimrc文件
1
vim ~/.vimrc
在.vimrc文件添加如下配置:
1
2
3
filetype plugin on
let g:pydiction_location = '~/.vim/tools/pydiction/complete-dict'
let g:pydiction_menu_height = 3
到此已經可以使用Tab鍵自動補全python代碼了。