vim8python
1. 為啥vim和gvim對python的支持不一樣
有人在realpython.com宣揚Sublime Text 3。作為公司的資深開發人員(呃,也就是老古董),我覺得有義務介紹一個真正的Python開發環境給大家——我要推薦的當然就是Vim了。不錯,Vim編輯器無處不在,速度快,從來不會崩潰。並且,它能做任何事情!
不過,不利之處也有,就是Vim配置起來很讓人頭疼。但是,別擔心,本文將告訴你如何配置一個強大的Vim環境,專門用於天天搗鼓Python開發。
下面是最終效果預覽。
如果想充分地利用好本文,你應該對如何使用Vim和它的命令模式至少有一個基本的了解。如果你是初學者,你可以通過vim-adventure或者openvim網站學習。在繼續閱讀本文之前,請花點時間瀏覽那兩個網站的內容。
安裝
因為許多Unix衍生系統已經預裝了Vim,我們首先要確認編輯器是否成功安裝:
vim --version
如果已經安裝了,你應該看到類似下面的文字:
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 5 2014 21:00:28)
Compiled by [email protected]
Normal version without GUI. Features included (+) or not (-):
-arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
-conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs
-dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path
+find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv
+insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent
+listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape
-mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse
+mouse_xterm +multi_byte +multi_lang -mzscheme +netbeans_intg -osfiletype
+path_extra -perl +persistent_undo +postscript +printer -profile +python/dyn
-python3 +quickfix +reltime -rightleft +ruby/dyn +scrollbind +signs
+smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary
+tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title
-toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo
+vreplace +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp
-xterm_clipboard -xterm_save
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -D_FORTIFY_SOURCE=0 -Iproto -DHAVE_CONFIG_H -arch i386 -arch x86_64 -g -Os -pipe
Linking: gcc -arch i386 -arch x86_64 -o vim -lncurses
在這一步,你要確保已經滿足以下兩點要求:
Vim編輯版本應該大於7.3。
支持Python語言。在所選編輯器的功能中,確保你看到了+python。
如果滿足上述要求,接下來可以安裝Vim擴展了。如果不滿足,則需要安裝/升級。
Unix衍生系統
Debian或Ubuntu系統,可以使用下面的代碼:
sudo apt-get remove vim-tiny
apt-get update
apt-get install vim
如果是其他版本的Linux系統,請查閱相應版本包管理器的文檔。不清楚的話,可以先閱讀這篇文章:安裝Vim
驗證安裝
確保你已經安裝了7.3版本以上、支持Python的Vim編輯器。你可以再次運行vim --version進行確認。如果你想知道Vim中使用的Python版本,你可以在編輯器中運行:python import sys; print(sys.version)。
2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]
這行命令會輸出你的編輯器當前的Python版本。如果報錯,那麼你的編輯器就不支持Python語言,需要重裝或重新編譯。
Vim編輯器安裝完成後,我們來看看如何將其設置為Python開發的強大環境。
Vim擴展
Vim本身能夠滿足開發人員的很多需求,但是它的可擴展性也極強,並且已經有一些殺手級的擴展,可以讓Vim擁有「現代」集成開發環境的特性。所以,你所需要的第一件東西就是一個好用的擴展管理器。
Vim的擴展通常也被成為bundle或插件。
Vundle
Vim有多個擴展管理器,但是我們強烈推薦Vundle。你可以把它想像成Vim的pip。有了Vundle,安裝和更新包這種事情不費吹灰之力。
我們現在來安裝Vundle:
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
該命令將下載Vundle插件管理器,並將它放置在你的Vim編輯器bundles文件夾中。現在,你可以通過.vimrc配置文件來管理所有擴展了。
將配置文件添加到你的用戶的home文件夾中:
touch ~/.vimrc
接下來,把下來的Vundle配置添加到配置文件的頂部:
set nocompatible " required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
這樣,你就完成了使用Vundle前的設置。之後,你就可以在配置文件中添加希望安裝的插件,然後打開Vim編輯器,運行下面的命令:
:PluginInstall
這個命令告訴Vundle施展它的魔法——自動下載所有的插件,並為你進行安裝和更新。
開始打造IDE吧
本文不可能列舉Vim的全部功能,只能快速介紹一些Vim自帶的強大功能,它們對於Python開發來說是非常有用的。
扔掉滑鼠
或許,Vim編輯器最重要的功能就是它不要求使用滑鼠(除了GUI版本外)。一開始,你可能會覺得這是個非常糟糕的做法,但是只要你投入時間——是的,這很花時間——學習快捷組合鍵,就可以大幅提升工作流的速度。
分割布局(Split Layouts)
使用:sv <filename>命令打開一個文件,你可以縱向分割布局(新文件會在當前文件下方界面打開),使用相反的命令:vs <filename>, 你可以得到橫向分割布局(新文件會在當前文件右側界面打開)。
你還可以嵌套分割布局,所以你可以在分割布局內容再進行分割,縱向或橫向都可以,直到你滿意為止。眾所周知,我們開發時經常需要同時查看多個文件。
專業貼士:記得在輸入完:sv後,利用tab補全功能,快速查找文件。
專業貼士:你還可以指定屏幕上可以進行分割布局的區域,只要在.vimrc文件中添加下面的代碼即可:
set splitbelow
set splitright
專業貼士:想要不使用滑鼠就切換分割布局嗎?只要將下面的代碼添加到.vimrc文件中,你就可以通過快捷組合鍵進行切換。
"split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
組合快捷鍵:
Ctrl-j 切換到下方的分割窗口
Ctrl-k 切換到上方的分割窗口
Ctrl-l 切換到右側的分割窗口
Ctrl-h 切換到左側的分割窗口
換句話說, 按Ctrl+Vim的標准移動鍵,就可以切換到指定窗口。
等等,nnoremap是什麼意思?——簡單來說,nnoremap將一個組合快捷鍵映射為另一個快捷鍵。一開始的n,指的是在Vim的正常模式(Normal Mode)下,而不是可視模式下重新映射。基本上,nnoremap <C-J> <C-W><C-j>就是說,當我在正常模式按下<C-J>時,進行<C-W><C-j>操作。更多信息請看這里。
緩沖區(Buffers)
雖然Vim支持tab操作,仍有很多人更喜歡緩沖區和分割布局。你可以把緩沖區想像成最近打開的一個文件。Vim提供了方便訪問近期緩沖區的方式,只需要輸入:b <buffer name or number>,就可以切換到一個已經開啟的緩沖區(此處也可使用自動補全功能)。你還可以通過ls命令查看所有的緩沖區。
專業貼士: 在:ls命令輸出的最後,Vim會提示「敲擊Enter繼續查看」,這時你可以直接輸入:b <buffer name>,立即選擇緩沖區。這樣可以省掉一個按鍵操作,也不必去記憶緩沖區的名字。
代碼折疊(Code Folding)
大多數「現代」集成開發環境(IDE)都提供對方法(methods)或類(classes)進行折疊的手段,只顯示類或方法的定義部分,而不是全部的代碼。
你可以在.vimrc中添加下面的代碼開啟該功能:
" Enable folding
set foldmethod=indent
set foldlevel=99
這樣就可以實現,但是你必須手動輸入za來折疊(和取消折疊)。使用空格鍵會是更好的選擇。所以在你的配置文件中加上這一行命令吧:
" Enable folding with the spacebar
nnoremap <space> za
現在你可以輕松地隱藏掉那些當前工作時不需要關注的代碼了。
第一個命令,set foldmethod=ident會根據每行的縮進開啟折疊。但是這樣做會出現超過你所希望的折疊數目。但是別怕,有幾個擴展就是專門解決這個問題的。在這里,我們推薦SimplyFold。在.vimrc中加入下面這行代碼,通過Vundle進行安裝:
Plugin 'tmhedberg/SimpylFold'
不要忘記執行安裝命令::PluginInstall
專業貼士: 希望看到折疊代碼的文檔字元串?
let g:SimpylFold_docstring_preview=1
Python代碼縮進
當然,想要代碼折疊功能根據縮進情況正常工作,那麼你就會希望自己的縮進是正確的。這里,Vim的自帶功能無法滿足,因為它實現不了定義函數之後的自動縮進。我們希望Vim中的縮進能做到以下兩點:
首先,縮進要符合PEP8標准。
其次,更好地處理自動縮進。
PEP8
要支持PEP8風格的縮進,請在.vimrc文件中添加下面的代碼:
au BufNewFile,BufRead *.py
\ set tabstop=4
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79
\ set expandtab
\ set autoindent
\ set fileformat=unix
這些設置將讓Vim中的Tab鍵就相當於4個標準的空格符,確保每行代碼長度不超過80個字元,並且會以unix格式儲存文件,避免在推送到Github或分享給其他用戶時出現文件轉換問題。
另外,對於全棧開發,你可以設置針對每種文件類型設置au命令:
au BufNewFile,BufRead *.js, *.html, *.css
\ set tabstop=2
\ set softtabstop=2
\ set shiftwidth=2
自動縮進
自動縮進有用,但是在某些情況下(比如函數定義有多行的時候),並不總是會達到你想要的效果,尤其是在符合PEP8標准方面。我們可以利用indentpython.vim插件,來解決這個問題:
Plugin 'vim-scripts/indentpython.vim'
標示不必要的空白字元
我們希望避免出現多餘的空白字元。可以讓Vim幫我們標示出來,使其很容易發現並刪除。
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
這會將多餘的空白字元標示出來,很可能會將它們變成紅色突出。
支持UTF-8編碼
大部分情況下,進行Python開發時你應該使用UTF-8編碼,尤其是使用Python 3的時候。確保Vim設置文件中有下面的命令:
set encoding=utf-8
自動補全
支持Python自動補全的最好插件是YouCompleteMe。我們再次使用Vundle安裝:
Bundle 'Valloric/YouCompleteMe'
YouCompleteMe插件其實底層使用了一些不同的自動補全組件(包括針對Python開發的Jedi),另外要安裝一些C庫才能正常工作。插件官方文檔提供了很好的安裝指南,我就不在這里重復了。切記跟隨文檔的步驟進行安裝。
安裝完成後,插件自帶的設置效果就很好,但是我們還可以進行一些小的調整:
let g:ycm_autoclose_preview_window_after_completion=1
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
上面的第一行確保了在你完成操作之後,自動補全窗口不會消失,第二行則定義了「轉到定義」的快捷方式。
支持Virtualenv虛擬環境
上面「轉到定義」功能的一個問題,就是默認情況下Vim不知道virtualenv虛擬環境的情況,所以你必須在配置文件中添加下面的代碼,使得Vim和YouCompleteMe能夠發現你的虛擬環境:
"python with virtualenv support
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
project_base_dir = os.environ['VIRTUAL_ENV']
activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
EOF
這段代碼會判斷你目前是否在虛擬環境中編輯,然後切換到相應的虛擬環境,並設置好你的系統路徑,確保YouCompleteMe能夠找到相應的site packages文件夾。
語法檢查/高亮
通過安裝syntastic插件,每次保存文件時Vim都會檢查代碼的語法:
Plugin 'scrooloose/syntastic'
還可以通過這個小巧的插件,添加PEP8代碼風格檢查:
Plugin 'nvie/vim-flake8'
最後,讓你的代碼變得更漂亮:
let python_highlight_all=1
syntax on
配色方案
配色方案可以和你正在使用的基礎配色共同使用。GUI模式可以嘗試solarized方案, 終端模式可以嘗試Zenburn方案:
Plugin 'jnurmine/Zenburn'
Plugin 'altercation/vim-colors-solarized'
接下來,只需要添加一點邏輯判斷,確定什麼模式下使用何種方案就可以了:
if has('gui_running')
set background=dark
colorscheme solarized
else
colorscheme Zenburn
endif
Solarized方案同時提供了暗色調和輕色調兩種主題。要支持切換主題功能(按F5)也非常簡單,只需添加:
call togglebg#map("<F5>")
文件瀏覽
如果你想要一個不錯的文件樹形結構,那麼NERDTree是不二之選。
Plugin 'scrooloose/nerdtree'
如果你想用tab鍵,可以利用vim-nerdtree-tabs插件實現:
Plugin 'jistr/vim-nerdtree-tabs'
還想隱藏.pyc文件?那麼再添加下面這行代碼吧:
let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree
超級搜索
想要在Vim中搜索任何文件?試試ctrlP插件吧:
Plugin 'kien/ctrlp.vim'
正如插件名,按Ctrl+P就可以進行搜索。如果你的檢索詞與想要查找的文件相匹配的話,這個插件就會幫你找到它。哦,對了——它不僅僅可以搜索文件,還能檢索標簽!更多信息,可以觀看這個Youtube視頻.
顯示行號
開啟顯示行號:
set nu
Git集成
想要在Vim中執行基本的Git命令?vim-fugitive插件則是不二之選。
Plugin 'tpope/vim-fugitive'
請看Vimcasts的這部視頻,了解更多情況。
Powerline狀態欄
Powerline是一個狀態欄插件,可以顯示當前的虛擬環境、Git分支、正在編輯的文件等信息。
這個插件是用Python編寫的,支持諸如zsh、bash、tmux和IPython等多種環境。
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}
請查閱插件的官方文檔,了解配置選項。
系統剪貼板
通常Vim會忽視系統剪貼板,而使用自帶的剪貼板。但是有時候你想從Vim之外的程序中剪切、復制、粘貼文本。在OS X平台上,你可以通過這行代碼訪問你的系統剪貼板:
set clipboard=unnamed
Shell開啟Vim編輯模式
最後,當你熟練掌握了Vim和它的鍵盤快捷方式之後,你會發現自己經常因為shell中缺乏相同的快捷鍵而懊惱。沒關系,大部分的shell程序都有Vi模式。在當前shell中開啟Vi模式,你只需要在~/.inputrc文件中添加這行代碼:
set editing-mode vi
現在,你不僅可以在shell中使用Vim組合快捷鍵,還可以在Python解釋器以及任何利用GNU Readline程序的工具(例如,大多數的資料庫shell)中使用。現在,你在什麼地方都可以使用Vim啦!
結語
Vim的設置到這里就差不多了(至少對於Python開發來說是這樣的)。當然,開源世界裡還有大量你可以使用的其他擴展,以及本文中所提到插件的替代品。你最喜愛的擴展是什麼?你又是如何將Vim設置符合你喜好的?
這是我本人的Vim配置文件鏈接。你有沒有自己的設置代碼?請與我們分享!
謝謝!
資源
Vim Tutor是Vim自帶的程序,安裝結束之後,只要在命令行輸入vimtutor即可,程序將會用Vim編輯器教你如何使用Vim。
Vimcasts是一系列的高階視頻教程,內容涉及許多Vim的功能。
Vim官方文檔
Open Vim
笨辦法學Vimscript是學習vimscript的極好材料。
2. 寫python程序什麼編輯器最好用
一、Vim
作為文本編輯器來說,Vim最大的優勢,就是速度和效率,是其他編輯器無法媲美的,這要歸功於Vim的模式設計、高度可擴展性和高度可定製等特性,它的自由度很高,使用起來也很方便。
二、Visual Studio Code
是一款兼容Linux、Mac OS
X和Windows平台的全功能代碼編輯器,自由度極高,幾乎可以對所有任務進行配置,同樣也可以安裝外部插件,最重要的是,它是免費的。
三、Sublime Text
相信不少同學在剛接觸代碼時,不少人都會給你推薦這個編輯器,它不僅支持代碼編輯,還兼容所有平台,該有的插件擴展一個都不少。
四、GNU Emacs
兼容任何平台,終身免費,相信這兩點,就已經吸引不少程序員了,不過它和其他編輯器不一樣的是,需要用Lips編程語言進行定製,並為Python開發提供各種定製腳本。
五、Atom
兼容所有平台,其界面也十分美觀,擁有豐富的擴展插件及文件系統瀏覽器,它的核心優勢,在於能夠兼容Vim模式,這也吸引了大批Vim的忠實用戶。
六、PyCharm
是一款專門面向Python的全功能集成開發環境,同樣擁有付費版和免費開源版,支持多平台使用,不想要花錢的話,可以找到PyCharm的教育版,新手用它就完全足夠了,用起來也十分方便,打開一個新的文件然後就可以直接開始編寫代碼了,也可以在PyCharm中直接運行和調試Python程序,還支持源碼管理和項目,且擁有眾多便利和支持社區。
3. 在vim中怎樣自動生成#/usr/bin/env python
在用戶家目錄下創建vimrc文件,然後將如下內容添加進來:
function HeaderPython()
call setline(1, "#!/usr/bin/env python")
call append(1, "#-*- coding:utf8 -*-")
normal G
normal o
normal o
endf
autocmd bufnewfile *.py call HeaderPython()
保存退出即可
比如我用的是root用戶,那麼我創建過程如下:
vim ~/.vimrc
function HeaderPython()
call setline(1, "#!/usr/bin/env python")
call append(1, "#-*- coding:utf8 -*-")
normal G
normal o
normal o
endf
autocmd bufnewfile *.py call HeaderPython()
保存後退出
然後在任何目錄下直接vim 文件名即可
4. VIM 中寫python,寫完elif 這句後不能自動縮進,跪求大神解答
(1)Command Line,中文翻譯為命令行,簡單解釋為 你最長看到的那個黑色背景的,類似於DOS界面的窗口,用於輸入命令的。
(2)不過Python的Command Line和Windows的cmd,不是一回事。詳情參考帖子:
Windows的cmd下運行Python腳本,不是在Python的Command Line工具下運行Python腳本
其中,關於Windows的cmd,參見這個帖子:2.2.2.1. cmd簡介
(3)import sys
是導入sys模塊的。
關於什麼是模塊,可參考帖子:
【教程】Python中的內置的模塊 和第三方的模塊
(4)sys.agv[1:]
sys模塊有獲得執行python腳本時所傳遞的參數的功能,
此處就是利用這點,通過sys.agv獲得對應的參數,
然後再用sys.agv[1:]獲得從起始位置索引號為1到最後的那段字元的
(5)所謂字典類型變數
就是 一個 key(鍵),對應一個value(值)
比如
{"yourName":"hihihi789123"}
其中yourName就是key,鍵
hihihi789123就是value,值
(6)ditionary,list,set,key等等,
都是屬於Python中自帶的變數類型
平時使用過程中,需要根據自己的所要實現的功能,定義合適的類型的變數
然後寫python代碼,去實現對應的功能的。
(7)ditionary,list,set,key 他們和sys,簡單說,沒關系
因為前者,是變數類型
後者sys,是一個模塊
(8)hash在python裡面到底是什麼意思
我寫了很多代碼了,貌似暫時還沒用到hash。
所以,估計你在今後很長時間內,都很可能暫時用不到hash,可以暫時不用學習。等需要的時候再學。
(9)set((2,3,5))可以loop每一個,但是set([2,3,5]) 不能通過每一個值,為什麼
沒看懂你要表達啥意思。
(10)argument 在python 裡面到底是什麼意思,運用起來和以上的有什麼關聯么
參見(8)的解釋,暫時你可以不用關心。
(11)你的代碼,就不解釋了。因為太亂了。沒有縮進。
Python代碼是必須有對應的縮進的,表示對應的代碼間的邏輯關系的。
關於以上所有的內容,建議你去看:
【整理】如何學習Python + 如何有效利用Python有關的網路資源 + 如何利用Python自帶手冊(Python Manual)
然後還有什麼不懂。
再一點一點問。
不要想一口吃個胖子,否則被撐死了,還都木有消化。
(此處不給貼地址,以上所有帖子,都請自己搜標題,即可找到)
5. 用vim寫python時,用中文注釋後不能運行!
ubuntu好像是utf-8編碼的,第一行用下面shenwei5566說的# -*- coding:utf-8 -*-就可以了。在windows下就要注意文件字元編碼是utf-8格式了。
6. 如何配置個性化vim
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"一般設定
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"設定默認解碼
setfenc=utf-8
setfencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
"設置顏色
colorschemedesert
"setguifont=NimbusMonoL12
"setguifont=WenQuanYiBitmapSong12
"setguifont=Verdana10
"setguifont=Courier11
setguifont=BitstreamVeraSansMono10
"不要使用vi的鍵盤模式,而是vim自己的
setnocompatible
"history文件中需要記錄的行數
sethistory=100
"在處理未保存或只讀文件的時候,彈出確認
setconfirm
"與windows共享剪貼板
setclipboard+=unnamed
"偵測文件類型
filetypeon
"載入文件類型插件
filetypepluginon
"為特定文件類型載入相關縮進文件
filetypeindenton
"保存全局變數
setviminfo+=!
"帶有如下符號的單詞不要被換行分割
setiskeyword+=_,$,@,%,#,-
"語法高亮
syntaxon
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""高亮顯示gtk關鍵字""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
argbooleangpointer
highlightlinkgtkTypeType"高亮字元,讓其不受100列限制
highlightOverLengthctermbg=redctermfg=whiteguibg=redguifg=white
matchOverLength'\%101v.*'
"狀態行顏色
highlightStatusLineguifg=SlateBlueguibg=Yellow
highlightStatusLineNCguifg=Grayguibg=White
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"文件設置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"不要備份文件(根據自己需要取捨)
setnobackup
"不要生成swap文件,當buffer被丟棄的時候隱藏它
setlocalnoswapfile
setbufhidden=hide
"字元間插入的像素行數目
setlinespace=0
"增強模式中的命令行自動完成操作
setwildmenu
"在狀態行上顯示游標所在位置的行號和列號
setruler
setrulerformat=%20(%2*%<%f%=\%m%r\%3l\%c\%p%%%)
"命令行(在狀態行下)的高度,默認為1,這里是2
setcmdheight=2
"使回格鍵(backspace)正常處理indent,eol,start等
setbackspace=2
"允許backspace和游標鍵跨越行邊界
setwhichwrap+=<,>,h,l
"可以在buffer的任何地方使用滑鼠(類似office中在工作區雙擊滑鼠定位)
setmouse=a
setselection=exclusive
setselectmode=mouse,key
"啟動的時候不顯示那個援助索馬里兒童的提示
setshortmess=atI
"通過使用:commands命令,告訴我們文件的哪一行被改變過
setreport=0
"不讓vim發出討厭的滴滴聲
setnoerrorbells
"在被分割的窗口間顯示空白,便於閱讀
setfillchars=vert:,stl:,stlnc:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"搜索和匹配
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"高亮顯示匹配的括弧
setshowmatch
"匹配括弧高亮的時間(單位是十分之一秒)
setmatchtime=5
"在搜索的時候忽略大小寫
setignorecase
"不要高亮被搜索的句子(phrases)
setnohlsearch
"在搜索時,輸入的詞句的逐字元高亮(類似firefox的搜索)
setincsearch
"輸入:setlist命令是應該顯示些啥?
setlistchars=tab:|,trail:.,extends:>,precedes:<,eol:$
"游標移動到buffer的頂部和底部時保持3行距離
setscrolloff=3
"不要閃爍
setnovisualbell
"我的狀態行顯示的內容(包括文件類型和解碼)
setstatusline=%F%m%r%h%w[FORMAT=%{&ff}][TYPE=%Y][POS=%l,%v][%p%%]\%{strftime("%d/%m/%y-\%H:%M")}
"總是顯示狀態行
setlaststatus=2
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"文本格式和排版
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"自動格式化
setformatoptions=tcrqn
"繼承前一行的縮進方式,特別適用於多行注釋
setautoindent
"為C程序提供自動縮進
setsmartindent
"使用C樣式的縮進
setcindent
"製表符為4
settabstop=4
"統一縮進為4
setsofttabstop=4
setshiftwidth=4
"不要用空格代替製表符
setnoexpandtab
"不要換行
setnowrap
"在行和段開始處使用製表符
setsmarttab
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"CTags的設定
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"按照名稱排序
letTlist_Sort_Type="name"
"在右側顯示窗口
letTlist_Use_Right_Window=1
"壓縮方式
letTlist_Compart_Format=1
"如果只有一個buffer,kill窗口也kill掉buffer
letTlist_Exist_OnlyWindow=1
"不要關閉其他文件的tags
letTlist_File_Fold_Auto_Close=0
"不要顯示折疊樹
letTlist_Enable_Fold_Column=0
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Autocommands
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"只在下列文件類型被偵測到的時候顯示行號,普通文本文件不顯示
ifhas("autocmd")
autocmdFileTypexml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,rubysetnumber
autocmdFileTypexml,htmlvmap<C-o><ESC>'<i<!--<ESC>o<ESC>'>o-->
autocmdFileTypejava,c,cpp,csvmap<C-o><ESC>'<o/*<ESC>'>o*/
autocmdFileTypehtml,text,php,vim,c,java,xml,bash,shell,perl,pythonsetlocaltextwidth=100
autocmdFiletypehtml,xml,xslsource$VIMRUNTIME/plugin/closetag.vim
ifline("'"")>0&&line("'"")<=line("{1}quot;)|
exe"normalg`""|
endif
endif"has("autocmd")
"F5編譯和運行C程序,F6編譯和運行C++程序
"請注意,下述代碼在windows下使用會報錯
"需要去掉./這兩個字元
"C的編譯和運行
map<F5>:callCompileRunGcc()<CR>
func!CompileRunGcc()
exec"w"
exec"!gcc%-o%<"
exec"!./%<"
endfunc
"C++的編譯和運行
map<F6>:callCompileRunGpp()<CR>
func!CompileRunGpp()
exec"w"
exec"!g++%-o%<"
exec"!./%<"
endfunc
"能夠漂亮地顯示.NFO文件
setencoding=utf-8
function!SetFileEncodings(encodings)
letb:myfileencodingsbak=&fileencodings
let&fileencodings=a:encodings
endfunction
function!RestoreFileEncodings()
let&fileencodings=b:myfileencodingsbak
unletb:myfileencodingsbak
endfunction
auBufReadPre*.nfocallSetFileEncodings('cp437')|setambiwidth=single
auBufReadPost*.nfocallRestoreFileEncodings()
"高亮顯示普通txt文件(需要txt.vim腳本)
auBufRead,BufNewFile*setfiletypetxt
"用空格鍵來開關折疊
setfoldenable
"setfoldmethod=manual
setfoldmethod=syntax
setfoldlevel=100
nnoremap<space>@=((foldclosed(line('.'))<0)?'zc':'zo')<CR>
"minibufexpl插件的一般設置
letg:miniBufExplMapWindowNavVim=1
letg:miniBufExplMapWindowNavArrows=1
letg:miniBufExplMapCTabSwitchBufs=1
letg:miniBufExplModSelTarget=1
"設置快捷方式Setmapleader
letmapleader=","
"快捷載入,當輸入",ss"時,載入.vimrc文件
map<silent><leader>ss:source~/.vimrc<cr>
"快速打開編輯.vimrc配置文件--->",ee"
map<silent><leader>ee:e~/.vimrc<cr>
"快速保存文件--->",w"
map<silent><leader>w:w<cr>
"快速保存並退出文件--->",w"
map<silent><leader>wq:wq<cr>
"自動命令,每次寫入.vimrc後,都會執行這個自動命令,source一次~/.vimrc
autocmd!bufwritepost.vimrcsource~/.vimrc
7. 誰知道Vim如何配置Python的縮進
類似C語言風格的縮進
set cindent
智能縮進:每一行都和前一行有相同的縮進量,
同時這種縮進形式能正確的識別出花括弧,當遇到右花括弧(}),
則取消縮進形式。此外還增加了識別C語言關鍵字的功能。
如果一行是以#開頭的(比如宏),那麼這種格式將會被特殊對待而不採用縮進格式
set smartindent
For Python Programmers
autocmd FileType python set textwidth=79 PEP-8 Friendly
把輸入的tab自動轉換成空格,Python用戶必用~
set expandtab
一個tab鍵占據4個空格
set tabstop=4
一開始,插入的就是4個空格,此時一旦你再按下一次tab,這次的四個空格就會和上次的四個空格組合起來變成一個製表符
set softtabstop=4
每一級自動縮進的空格數
set shiftwidth=4
根據文件類型設定縮進,覆蓋掉默認的~
autocmd FileType python setlocal tabstop=4 shiftwidth=4 softtabstop=4 textwidth=79
另外即使配置如此 ,Python的縮進也並不是很理想。
比較好的選擇是再使用一個插件 hynek/vim-python-pep8-indent
8. vim 編輯 python代碼 為什麼會回到開頭
vim/etc/vimrc
不要去看有沒有這個文件
在裡面寫:
functionHeaderPython()
callsetline(1,"#!/usr/bin/envpython")
callappend(1,"#-*-coding:utf8-*-")
normalG
normalo
normalo
endf
autocmdbufnewfile*.pycallHeaderPython()
9. vim與jupyter哪個好用
python2的編譯器本身處理中文就不太好,有些不同組合你可以試下,解碼用gbk,編碼用utf8,解碼用utf8,編碼用gbk,實在不行就在cmd里運行這個程序。
10. 用vim寫python腳本的時候能自動縮進么
我的vimrc有這樣的:
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set shiftwidth=4
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set softtabstop=4
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set tabstop=4
au BufRead,BufNewFile *.py,*.pyw set expandtab
au BufRead,BufNewFile *.c,*.h set noexpandtab
au BufRead,BufNewFile Makefile* set noexpandtab
highlight BadWhitespace ctermbg=red guibg=red
au BufRead,BufNewFile *.py,*.pyw match BadWhitespace /^\t\+/
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set textwidth=79
au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix
autocmd bufnewfile *.py call setline(1,'#! /usr/bin/env python') |
\ call setline(2,'# -*- coding: utf-8 -*-') |
\ call setline(3,'') |
\ call setline(4,'# Author: N23 <[email protected]>') |
\ call setline(5,'') |
\ call setline(6,'') |
\ exe "normal G"
"Python iMaps
au FileType python set cindent
au FileType python inoremap <buffer> $r return
au FileType python inoremap <buffer> $s self
au FileType python inoremap <buffer> $c ##<cr>#<space><cr>#<esc>kla
au FileType python inoremap <buffer> $f from
au FileType python inoremap <buffer> $i import
au FileType python inoremap <buffer> $p print
au FileType python inoremap <buffer> $d """<cr>"""<esc>O