一、源碼安裝 vim
特別說明:
假如你不想使用 vim-flake8 插件可以不用重新編譯安裝 vim,只要保證 vim 的版本是>=7.3,查看當(dāng)前 vim 版本,執(zhí)行命令:vim --version
1 下載源碼包
git clone https://github.com/vim/vim.git
2 配置支持 Python2 和 python3
需要保證系統(tǒng)中編譯安裝了 python3
cd vim
./configure --enable-python3interp=yes --with-python3-config-dir=/usr/local/lib/python3.8/config-3.8-x86_64-linux-gnu/
3 編譯并安裝
make && make install
4 驗證
安裝完成后,在命令行終端輸入如下命令使當(dāng)前 shell 使用新的 vim
source /etc/profile
接下來在命令行終端繼續(xù)輸入如下命令,驗證是否支持 python3
vim --version|grep python
+python3/dyn 表示支持

二、快速執(zhí)行 vim 正在編輯的代碼
常用的 IDE 編輯器都提供一鍵執(zhí)行代碼的命令或插件 (如 VSCode 的 F5 快捷鍵)。不退出 Vim (甚至可以不保存)的情況下而直接執(zhí)行 Vim 當(dāng)前打開的 Python 文件是一個非常高效的操作方式。
在 ~/.vimrc 配置文件中添加如下配置就可以實現(xiàn)在 Vim 的普通模式下按 F5 一鍵執(zhí)行 Python 代碼。
三、安裝插件管理器
要想讓 vim 更強大,就需要給它安裝相應(yīng)的插件,要安裝和管理這些插件,首先需要安裝一個插件管理器。
這里選擇的是 Vundle
1 安裝 Vundle
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
2 設(shè)置 Vundle
在用戶家目錄下的 .vimrc 文件的開頭,添加如下內(nèi)容
切記使用 vi 命令打開并編輯
set nocompatible " 必須
filetype off " 關(guān)閉自動文件類型檢查,必須
" 設(shè)置運行時包含 Vundle 的路徑和 初始化,必須
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin() " 開始調(diào)用 Vundle 進行插件的管理
" 首先必須加載 Vundle 插件
Plugin 'VundleVim/Vundle.vim'
" 在下面編寫自己需要用的的插件
" 所有要使用的插件,必須在下面一行之前
call vundle#end() " 必須的
filetype plugin indent on " 打開文件類型檢查,必須的
" 下面是幫助信息
" :PluginList - 列出已經(jīng)安裝且配置好的插件
" :PluginInstall - 安裝插件
" :PluginUpdate - 更新現(xiàn)有的插件
" :PluginClean - 清空沒有在 .vimrc 文件中配置的插件
"
" 把你的非插件的其他設(shè)置放在這行后面
設(shè)置好配置文件后,可通過下述兩種方法安裝插件:
(1) 在Vim命令行模式下運行命令:PluginInstall
(2) 在終端命令行下通過命令vim +PluginInstall +qall直接安裝
接著,退出 vi 并在命令行中執(zhí)行如下命令安裝Vundle插件
vim +PluginInstall +qall
四、安裝自動代碼提示補全插件 jedi-vim

- Completion <C-Space>
- Goto assignment <leader>g (typical goto function)
- Goto definition <leader>d (follow identifier as far as possible, includes imports and statements)
- Goto (typing) stub <leader>s
- Show Documentation/Pydoc K (shows a popup with assignments)
- Renaming <leader>r
- Usages <leader>n (shows all the usages of a name)
- Open module, e.g. :Pyimport os (opens the os module)
在 .vimrc 文件中添加下面的配置
Plugin 'davidhalter/jedi-vim'
接下來安裝安裝此插件,在 vim 命令行模式中輸入如下命令
:PluginInstall
在 vim 的編輯模式中使用 . 可以激活自動提示功能
使用 Ctrl+n 也可以激活自動提示功能,并且還可以進行自動補全
四、顯示縮進線的插件 indentLine
indentLine 插件在 Vim 界面中顯示出來的縮進指示線,使用了 Vim 提供的 conceal 功能。

1 先決條件
vim 需要是 7.3 及其以上, Centos7的 vim 都是 7.4 的,所以應(yīng)該都支持此功能。
2 安裝和配置
如果使用vundle安裝indentLine,只需要在Vim配置文件 ~/.vimrc 中增加如下內(nèi)容
Plugin 'Yggdroot/indentLine'
并使用 :PluginInstall 進行安裝即可。
3 使用
在Vim命令行模式下可以使用 :IndentLinesToggle 命令打開或者關(guān)閉顯示縮進指示線。
默認情況下,當(dāng)有二級縮進的時候,就會顯示縮進標識了,默認的縮進標識是 |

- 定制縮進標識
可以在 .vimrc 中使用下面的配置設(shè)置自定義的縮進標識
let g:indentLine_char='??'

提示:顯然這些縮進標識都不會真正的保存在你的文件中。
五、 代碼自動格式化插件 autopep8
vim-autopep8是一個將Python源代碼自動格式化為滿足PEP8規(guī)范的Vim插件。
安裝后在 Vim 普通模式下執(zhí)行 :Autopep8 命令就可以按照 PEP8 標準規(guī)范自動格式化 Python 源代碼
- 插件安裝和配置
vim-autopep8插件依賴于Python工具autopep8,所以在使用vim-autopep8插件前必須先安裝autopep8。
pip3 install --upgrade autopep8
接著在 .vimrc中配置并安裝
Plugin 'tell-k/vim-autopep8'
:PluginInstall
2 使用
在 vim 中格式化代碼
:Autopep8
指定行范圍進行格式化
:Autopep8 --range 1 5
自定義快捷鍵, 按下 F8 進行格式化代碼
autocmd FileType python noremap <buffer> <F8> :call Autopep8()<CR>
六 語法檢測插件vim-flake8
vim-flake8 是一款在 Vim 內(nèi)集成 flake8 (由 Python 官方發(fā)布的一款輔助檢測 Python 代碼是否規(guī)范的工具,整合了 PyFlakes 和 PEP 8 兩個代碼檢查軟件的功能) 的代碼檢測功能的 Vim 插件,可用于對 Vim 打開的當(dāng)前 Python 代碼進行靜態(tài)的語法檢查和格式檢測。該插件依賴 flake8 (Python官方發(fā)布的一款輔助檢測 Python 代碼是否規(guī)范和正確的工具) 工具,可通過 pip3 install flake8 命令進行安裝。
1 插件安裝和配置
在 Vim 配置文件 ~/.vimrc中增加 Plugin 'nvie/vim-flake8' 并使用 :PluginInstall 進行安裝即可。
2 使用 F7 鍵
或者執(zhí)行 flake8 /path/to/file.py
若果希望在每次保存文件的時候執(zhí)行檢查,可以在 ~/.vimrc 中配置如下內(nèi)容
autocmd BufWritePost *.py call flake8#Flake8()
七、括號/引號自動補齊插件 auto-pairs
使用 auto-pairs 插件,可以在 Vim 插入模式下,輸入左大括號后自動補全右大括號;在一對括號之間按回車鍵,將自動分為 3 行并調(diào)整縮進和光標位置。
1 插件安裝和配置
在 Vim 配置文件 ~/.vimrc 的合適位置添加 Plugin 'jiangmiao/auto-pairs' 后再在 Vim 的命令行模式下執(zhí)行 :PluginInstall 命令即可完成插件的安裝。
2 使用
Insert in pair
input: [
output: [|]
八、多括號顯示不同顏色的插件 rainbow_parenthsis
使用 Vim 編寫 Python 代碼時經(jīng)常會出現(xiàn)一行代碼中有多重括號嵌套的場景,這使得閱讀和分析這種連續(xù)嵌套的多重括號變得較為困難。
rainbow_parenthsis 是一個對不同層次的括號 (包括()、[]、{}、<>) 使用不同彩色進行高亮匹配顯示的 Vim 插件,雖然功能較為簡單,但是卻十分實用。
1 安裝和配置
在 ~/.vimrc 中添加 Plug 'kien/rainbow_parentheses.vim' 后執(zhí)行 :PlugInstall命令進行安裝
let g:rbpt_colorpairs = [
\ ['brown', 'RoyalBlue3'],
\ ['Darkblue', 'SeaGreen3'],
\ ['darkgray', 'DarkOrchid3'],
\ ['darkgreen', 'firebrick3'],
\ ['darkcyan', 'RoyalBlue3'],
\ ['darkred', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['brown', 'firebrick3'],
\ ['gray', 'RoyalBlue3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['Darkblue', 'firebrick3'],
\ ['darkgreen', 'RoyalBlue3'],
\ ['darkcyan', 'SeaGreen3'],
\ ['darkred', 'DarkOrchid3'],
\ ['red', 'firebrick3'],
\ ]
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces
九、快速代碼注釋插件 nerdcommenter
在 Vim 的普通模式和可視化模式下,nerdcommenter 插件可以實現(xiàn)快速注釋連續(xù)的多行代碼,也可以注釋掉從當(dāng)前光標所在位置到行尾的剩下內(nèi)容,還可以注釋掉從當(dāng)前光標所在位置到行尾的剩下內(nèi)容。在 ~/.vimrc 文件中添加設(shè)置
map <F4> <leader>ci <CR> 可以實現(xiàn)按 F4 鍵快速注釋和反注釋當(dāng)前行。
nerdcommenter 插件,需要打開 Vim 加載文件類型插件的功能
請保證在 ~/.vimrc 文件中正確添加了如下配置項
set filetype plugin indent on
1 安裝和配置
Vim 的配置文件中添加 Plugin 'preservim/nerdcommenter',再通過在 Vim 的命令行模式下執(zhí)行 :BundleInstall 命令完成插件的安裝。
2 使用
以下操作需要在 vim 的默認模式下執(zhí)行
默認模式就是 按下 Esc 鍵后的模式
注釋光標所在行
\cc注釋向下連續(xù) 3 行,從光標所在行開始,也就是總共注釋 3 行
3\cc取消光標所在行的注釋
\cu取消向下連續(xù) 3 行的注釋,從光標所在行開始,總共取消注釋 3 行
3\cu切換行的注釋狀態(tài) ,就是注釋了,就取消注釋,沒有注釋,就添加注釋??????
\ci當(dāng)前行
3\ci3 行
是不是感覺被騙了??,這個才是終極辦法啊。
注釋掉從當(dāng)前光標所在位置到行尾的剩下內(nèi)容 ????
\c$在行尾添加注釋,并進入 vim 的編輯模式 ????
\cA
完整的 .vimrc
syntax on " 語法高亮
set nocompatible " 必須
set backspace=indent,eol,start " 使用退格鍵刪除光標前面的字符
filetype off " 關(guān)閉自動文件類型檢查,必須
" 設(shè)置運行時包含 Vundle 的路徑和 初始化,必須
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin() " 開始調(diào)用 Vundle 進行插件的管理
" 首先必須加載 Vundle 插件
Plugin 'VundleVim/Vundle.vim'
" 在下面編寫自己需要用的的插件
"""""""""""""""""""""""""""""""
" Python 代碼自動補全提示
Plugin 'davidhalter/jedi-vim'
" 縮進標識
Plugin 'Yggdroot/indentLine'
let g:indentLine_color_term = 239
"let g:indentLine_char='??'
"let g:indentLine_concealcursor = 'inc'
"let g:indentLine_conceallevel = 2
Plugin 'MarcWeber/vim-addon-mw-utils'
" 文件名模糊匹配
Plugin 'tomtom/tlib_vim'
Plugin 'garbas/vim-snipmate'
" Optional:
Plugin 'honza/vim-snippets'
" Python 代碼規(guī)范
Plugin 'tell-k/vim-autopep8'
Plugin 'nvie/vim-flake8'
" 自動括號匹配
Plugin 'jiangmiao/auto-pairs'
" 不同括號顯示不同顏色
Plugin 'kien/rainbow_parentheses.vim'
let g:rbpt_colorpairs = [
\ ['brown', 'RoyalBlue3'],
\ ['Darkblue', 'SeaGreen3'],
\ ['darkgray', 'DarkOrchid3'],
\ ['darkgreen', 'firebrick3'],
\ ['darkcyan', 'RoyalBlue3'],
\ ['darkred', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['brown', 'firebrick3'],
\ ['gray', 'RoyalBlue3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['Darkblue', 'firebrick3'],
\ ['darkgreen', 'RoyalBlue3'],
\ ['darkcyan', 'SeaGreen3'],
\ ['darkred', 'DarkOrchid3'],
\ ['red', 'firebrick3'],
\ ]
" 最多多少個
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
" 打開Vim后自動啟用rainbow_parenthsis插件
au VimEnter * RainbowParenthesesToggle
" 同時開啟對以下 3 種擴號的多彩色高亮顯示
au Syntax * RainbowParenthesesLoadRound " ()
au Syntax * RainbowParenthesesLoadSquare " []
au Syntax * RainbowParenthesesLoadBraces " {}
" 快速注釋
Plugin 'preservim/nerdcommenter'
" 所有要使用的插件,必須在下面一行之前
call vundle#end() " 必須的
filetype plugin indent on " 打開文件類型檢查,必須的
" 下面是幫助信息
" :PluginList - 列出已經(jīng)安裝且配置好的插件
" :PluginInstall - 安裝插件
" :PluginUpdate - 更新現(xiàn)有的插件
" :PluginClean - 清空沒有在 .vimrc 文件中配置的插件
""""""""""""""""""""""""""""""""""""
" 把你的非插件的其他設(shè)置放在這行后面
" 保存 .vimrc 文件后,配置立刻生效
autocmd! bufwritepost $HOME/.vimrc source %
" 打開語法高亮
syntax on
" 開啟自動匹配
set showmatch
"設(shè)置按下 Tab 鍵,實際輸入的是空格
set expandtab
"設(shè)置 expandtab 后,設(shè)置一下按一次 Tab 鍵輸入 4 個空格
set tabstop=4
"set smartindent
"自動縮進時候,縮進 4 個空格
set shiftwidth=4
"總是顯示狀態(tài)欄
set laststatus=2
"顯示光標當(dāng)前位置
set ruler
"表示如果當(dāng)前文件在 Vim 外被修改且未在 Vim 里面重新載入的話,則自動重新讀取。
set autoread
"設(shè)置 Vim 窗口標題。
set title
"關(guān)閉錯誤提示的響鈴
set noerrorbells
"設(shè)置新建文件時候,自動向文件中添加內(nèi)容
autocmd BufNewFile *.sh,*.py exec ":call AutoSetFileHead()"
function! AutoSetFileHead()
"對于 .sh 文件 "
if &filetype == 'sh'
call setline(1, "#!/bin/bash")
endif
"對于 python3 文件 "
if &filetype == 'python'
call setline(1, "#!/usr/bin/env python3")
call append(1, "# Author: 西瓜甜??")
call append(2, "# Email: shark@126.com")
endif
normal G
normal o
normal o
endfunc
最后附上友情鏈接VIM 教程網(wǎng), 博主是個萌妹子??,一般人兒我不告訴他。在此表示感謝!??