使用 VIM 打造 自己的 Python3 IDE 編輯器

本文鏈接: http://www.reibang.com/p/bba4fcb6edb3

一终抽、源碼安裝 vim

特別說(shuō)明:

假如你不想使用 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 驗(yàn)證

安裝完成后,在命令行終端輸入如下命令使當(dāng)前 shell 使用新的 vim

source    /etc/profile

接下來(lái)在命令行終端繼續(xù)輸入如下命令桶至,驗(yàn)證是否支持 python3

vim --version|grep python

+python3/dyn 表示支持

image.png

二昼伴、快速執(zhí)行 vim 正在編輯的代碼

常用的 IDE 編輯器都提供一鍵執(zhí)行代碼的命令或插件 (如 VSCode 的 F5 快捷鍵)。不退出 Vim (甚至可以不保存)的情況下而直接執(zhí)行 Vim 當(dāng)前打開(kāi)的 Python 文件是一個(gè)非常高效的操作方式镣屹。

~/.vimrc 配置文件中添加如下配置就可以實(shí)現(xiàn)在 Vim 的普通模式下按 F5 一鍵執(zhí)行 Python 代碼圃郊。

三、安裝插件管理器

要想讓 vim 更強(qiáng)大女蜈,就需要給它安裝相應(yīng)的插件持舆,要安裝和管理這些插件色瘩,首先需要安裝一個(gè)插件管理器。

這里選擇的是 Vundle

1 安裝 Vundle

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

2 設(shè)置 Vundle

在用戶家目錄下的 .vimrc 文件的開(kāi)頭逸寓,添加如下內(nèi)容

切記使用 vi 命令打開(kāi)并編輯

set nocompatible              " 必須
filetype off                  " 關(guān)閉自動(dòng)文件類型檢查居兆,必須

" 設(shè)置運(yùn)行時(shí)包含 Vundle 的路徑和 初始化,必須
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()  " 開(kāi)始調(diào)用  Vundle 進(jìn)行插件的管理

" 首先必須加載 Vundle 插件
Plugin 'VundleVim/Vundle.vim'

" 在下面編寫自己需要用的的插件

" 所有要使用的插件竹伸,必須在下面一行之前
call vundle#end()            " 必須的
filetype plugin indent on    " 打開(kāi)文件類型檢查泥栖,必須的


" 下面是幫助信息
" :PluginList       - 列出已經(jīng)安裝且配置好的插件
" :PluginInstall    - 安裝插件
" :PluginUpdate  - 更新現(xiàn)有的插件
" :PluginClean      - 清空沒(méi)有在 .vimrc 文件中配置的插件
"
" 把你的非插件的其他設(shè)置放在這行后面

設(shè)置好配置文件后,可通過(guò)下述兩種方法安裝插件:

(1) 在Vim命令行模式下運(yùn)行命令:PluginInstall

(2) 在終端命令行下通過(guò)命令vim +PluginInstall +qall直接安裝

接著勋篓,退出 vi 并在命令行中執(zhí)行如下命令安裝Vundle插件

vim +PluginInstall +qall

四吧享、安裝自動(dòng)代碼提示補(bǔ)全插件 jedi-vim

image.png
  • 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'

接下來(lái)安裝安裝此插件,在 vim 命令行模式中輸入如下命令

:PluginInstall

在 vim 的編輯模式中使用 . 可以激活自動(dòng)提示功能
使用 Ctrl+n 也可以激活自動(dòng)提示功能譬嚣,并且還可以進(jìn)行自動(dòng)補(bǔ)全

四钢颂、顯示縮進(jìn)線的插件 indentLine

indentLine 插件在 Vim 界面中顯示出來(lái)的縮進(jìn)指示線,使用了 Vim 提供的 conceal 功能孤荣。

image.png

1 先決條件

vim 需要是 7.3 及其以上甸陌, Centos7的 vim 都是 7.4 的须揣,所以應(yīng)該都支持此功能盐股。

2 安裝和配置

如果使用vundle安裝indentLine,只需要在Vim配置文件 ~/.vimrc 中增加如下內(nèi)容
Plugin 'Yggdroot/indentLine'

并使用 :PluginInstall 進(jìn)行安裝即可耻卡。

3 使用

在Vim命令行模式下可以使用 :IndentLinesToggle 命令打開(kāi)或者關(guān)閉顯示縮進(jìn)指示線疯汁。

默認(rèn)情況下,當(dāng)有二級(jí)縮進(jìn)的時(shí)候卵酪,就會(huì)顯示縮進(jìn)標(biāo)識(shí)了幌蚊,默認(rèn)的縮進(jìn)標(biāo)識(shí)是 |

image.png

  1. 定制縮進(jìn)標(biāo)識(shí)

可以在 .vimrc 中使用下面的配置設(shè)置自定義的縮進(jìn)標(biāo)識(shí)

let g:indentLine_char='??'

image.png

提示:顯然這些縮進(jìn)標(biāo)識(shí)都不會(huì)真正的保存在你的文件中。

五溃卡、 代碼自動(dòng)格式化插件 autopep8

vim-autopep8是一個(gè)將Python源代碼自動(dòng)格式化為滿足PEP8規(guī)范的Vim插件溢豆。

安裝后在 Vim 普通模式下執(zhí)行 :Autopep8 命令就可以按照 PEP8 標(biāo)準(zhǔn)規(guī)范自動(dòng)格式化 Python 源代碼

  1. 插件安裝和配置

vim-autopep8插件依賴于Python工具autopep8,所以在使用vim-autopep8插件前必須先安裝autopep8瘸羡。

pip3 install --upgrade autopep8

接著在 .vimrc中配置并安裝

Plugin 'tell-k/vim-autopep8'

:PluginInstall

2 使用

在 vim 中格式化代碼

:Autopep8

指定行范圍進(jìn)行格式化

:Autopep8 --range 1 5

自定義快捷鍵, 按下 F8 進(jìn)行格式化代碼

autocmd FileType python noremap <buffer> <F8> :call Autopep8()<CR>

六 語(yǔ)法檢測(cè)插件vim-flake8

vim-flake8 是一款在 Vim 內(nèi)集成 flake8 (由 Python 官方發(fā)布的一款輔助檢測(cè) Python 代碼是否規(guī)范的工具漩仙,整合了 PyFlakes 和 PEP 8 兩個(gè)代碼檢查軟件的功能) 的代碼檢測(cè)功能的 Vim 插件,可用于對(duì) Vim 打開(kāi)的當(dāng)前 Python 代碼進(jìn)行靜態(tài)的語(yǔ)法檢查和格式檢測(cè)犹赖。該插件依賴 flake8 (Python官方發(fā)布的一款輔助檢測(cè) Python 代碼是否規(guī)范和正確的工具) 工具队他,可通過(guò) pip3 install flake8 命令進(jìn)行安裝。

1 插件安裝和配置

在 Vim 配置文件 ~/.vimrc中增加 Plugin 'nvie/vim-flake8' 并使用 :PluginInstall 進(jìn)行安裝即可峻村。

2 使用 F7

或者執(zhí)行 flake8 /path/to/file.py

若果希望在每次保存文件的時(shí)候執(zhí)行檢查麸折,可以在 ~/.vimrc 中配置如下內(nèi)容

autocmd BufWritePost *.py call flake8#Flake8()

七、括號(hào)/引號(hào)自動(dòng)補(bǔ)齊插件 auto-pairs

使用 auto-pairs 插件粘昨,可以在 Vim 插入模式下垢啼,輸入左大括號(hào)后自動(dòng)補(bǔ)全右大括號(hào)窜锯;在一對(duì)括號(hào)之間按回車鍵,將自動(dòng)分為 3 行并調(diào)整縮進(jìn)和光標(biāo)位置芭析。

1 插件安裝和配置

在 Vim 配置文件 ~/.vimrc 的合適位置添加 Plugin 'jiangmiao/auto-pairs' 后再在 Vim 的命令行模式下執(zhí)行 :PluginInstall 命令即可完成插件的安裝衬浑。

2 使用

Insert in pair

input: [
output: [|]

八、多括號(hào)顯示不同顏色的插件 rainbow_parenthsis

使用 Vim 編寫 Python 代碼時(shí)經(jīng)常會(huì)出現(xiàn)一行代碼中有多重括號(hào)嵌套的場(chǎng)景放刨,這使得閱讀和分析這種連續(xù)嵌套的多重括號(hào)變得較為困難工秩。

rainbow_parenthsis 是一個(gè)對(duì)不同層次的括號(hào) (包括()[]进统、{}助币、<>) 使用不同彩色進(jìn)行高亮匹配顯示的 Vim 插件,雖然功能較為簡(jiǎn)單螟碎,但是卻十分實(shí)用眉菱。

1 安裝和配置

~/.vimrc 中添加 Plug 'kien/rainbow_parentheses.vim' 后執(zhí)行 :PlugInstall命令進(jìn)行安裝

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 插件可以實(shí)現(xiàn)快速注釋連續(xù)的多行代碼俭缓,也可以注釋掉從當(dāng)前光標(biāo)所在位置到行尾的剩下內(nèi)容,還可以注釋掉從當(dāng)前光標(biāo)所在位置到行尾的剩下內(nèi)容酥郭。在 ~/.vimrc 文件中添加設(shè)置
map <F4> <leader>ci <CR> 可以實(shí)現(xiàn)按 F4 鍵快速注釋和反注釋當(dāng)前行华坦。

nerdcommenter 插件,需要打開(kāi) Vim 加載文件類型插件的功能
請(qǐng)保證在 ~/.vimrc 文件中正確添加了如下配置項(xiàng)

set  filetype plugin indent on

1 安裝和配置

Vim 的配置文件中添加 Plugin 'preservim/nerdcommenter'不从,再通過(guò)在 Vim 的命令行模式下執(zhí)行 :BundleInstall 命令完成插件的安裝惜姐。

2 使用

以下操作需要在 vim 的默認(rèn)模式下執(zhí)行
默認(rèn)模式就是 按下 Esc 鍵后的模式

  • 注釋光標(biāo)所在行
    \cc

  • 注釋向下連續(xù) 3 行,從光標(biāo)所在行開(kāi)始椿息,也就是總共注釋 3 行
    3\cc

  • 取消光標(biāo)所在行的注釋
    \cu

  • 取消向下連續(xù) 3 行的注釋歹袁,從光標(biāo)所在行開(kāi)始,總共取消注釋 3 行
    3\cu

  • 切換行的注釋狀態(tài) 寝优,就是注釋了条舔,就取消注釋,沒(méi)有注釋乏矾,就添加注釋??????
    \ci 當(dāng)前行
    3\ci 3 行

是不是感覺(jué)被騙了??孟抗,這個(gè)才是終極辦法啊。

  • 注釋掉從當(dāng)前光標(biāo)所在位置到行尾的剩下內(nèi)容 ????
    \c$

  • 在行尾添加注釋妻熊,并進(jìn)入 vim 的編輯模式 ????
    \cA

完整的 .vimrc

syntax on " 語(yǔ)法高亮
set nocompatible              " 必須
set backspace=indent,eol,start  " 使用退格鍵刪除光標(biāo)前面的字符
filetype off                  " 關(guān)閉自動(dòng)文件類型檢查夸浅,必須

" 設(shè)置運(yùn)行時(shí)包含 Vundle 的路徑和 初始化,必須
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()  " 開(kāi)始調(diào)用  Vundle 進(jìn)行插件的管理

" 首先必須加載 Vundle 插件
Plugin 'VundleVim/Vundle.vim'

" 在下面編寫自己需要用的的插件
"""""""""""""""""""""""""""""""

" Python 代碼自動(dòng)補(bǔ)全提示
Plugin 'davidhalter/jedi-vim'

" 縮進(jìn)標(biāo)識(shí)
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'

" 自動(dòng)括號(hào)匹配
Plugin 'jiangmiao/auto-pairs'

" 不同括號(hào)顯示不同顏色
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'],
    \ ]
" 最多多少個(gè)
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0

" 打開(kāi)Vim后自動(dòng)啟用rainbow_parenthsis插件
au VimEnter * RainbowParenthesesToggle

" 同時(shí)開(kāi)啟對(duì)以下 3 種擴(kuò)號(hào)的多彩色高亮顯示
au Syntax * RainbowParenthesesLoadRound " ()
au Syntax * RainbowParenthesesLoadSquare " []
au Syntax * RainbowParenthesesLoadBraces " {}

" 快速注釋
Plugin 'preservim/nerdcommenter'

" 所有要使用的插件扔役,必須在下面一行之前
call vundle#end()            " 必須的
filetype plugin indent on    " 打開(kāi)文件類型檢查帆喇,必須的


" 下面是幫助信息
" :PluginList       - 列出已經(jīng)安裝且配置好的插件
" :PluginInstall    - 安裝插件
" :PluginUpdate  - 更新現(xiàn)有的插件
" :PluginClean      - 清空沒(méi)有在 .vimrc 文件中配置的插件
""""""""""""""""""""""""""""""""""""

" 把你的非插件的其他設(shè)置放在這行后面

" 保存 .vimrc 文件后,配置立刻生效
autocmd! bufwritepost $HOME/.vimrc source %

" 打開(kāi)語(yǔ)法高亮
syntax on

" 開(kāi)啟自動(dòng)匹配
set showmatch

"設(shè)置按下 Tab 鍵亿胸,實(shí)際輸入的是空格
set expandtab

"設(shè)置 expandtab 后坯钦,設(shè)置一下按一次 Tab 鍵輸入  4 個(gè)空格
set tabstop=4

"set smartindent

"自動(dòng)縮進(jìn)時(shí)候预皇,縮進(jìn) 4 個(gè)空格
set shiftwidth=4

"總是顯示狀態(tài)欄
set laststatus=2
"顯示光標(biāo)當(dāng)前位置
set ruler

"表示如果當(dāng)前文件在 Vim 外被修改且未在 Vim 里面重新載入的話,則自動(dòng)重新讀取婉刀。
set autoread

"設(shè)置 Vim 窗口標(biāo)題吟温。
set title

"關(guān)閉錯(cuò)誤提示的響鈴
set noerrorbells

"設(shè)置新建文件時(shí)候,自動(dòng)向文件中添加內(nèi)容
autocmd BufNewFile *.sh,*.py exec ":call AutoSetFileHead()"
function! AutoSetFileHead()
    "對(duì)于 .sh 文件 "
    if &filetype == 'sh'
        call setline(1, "#!/bin/bash")
    endif

    "對(duì)于 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)突颊, 博主是個(gè)萌妹子??鲁豪,一般人兒我不告訴他。在此表示感謝律秃!??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爬橡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棒动,更是在濱河造成了極大的恐慌糙申,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件船惨,死亡現(xiàn)場(chǎng)離奇詭異柜裸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)粱锐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門疙挺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人卜范,你說(shuō)我怎么就攤上這事衔统÷拱瘢” “怎么了海雪?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)舱殿。 經(jīng)常有香客問(wèn)我奥裸,道長(zhǎng),這世上最難降的妖魔是什么沪袭? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任湾宙,我火速辦了婚禮,結(jié)果婚禮上冈绊,老公的妹妹穿的比我還像新娘侠鳄。我一直安慰自己,他們只是感情好死宣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布伟恶。 她就那樣靜靜地躺著,像睡著了一般毅该。 火紅的嫁衣襯著肌膚如雪博秫。 梳的紋絲不亂的頭發(fā)上潦牛,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音挡育,去河邊找鬼巴碗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛即寒,可吹牛的內(nèi)容都是我干的橡淆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼母赵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼明垢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起市咽,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痊银,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后施绎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體溯革,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年谷醉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了致稀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俱尼,死狀恐怖抖单,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遇八,我是刑警寧澤矛绘,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站刃永,受9級(jí)特大地震影響货矮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斯够,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一囚玫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧读规,春花似錦抓督、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至枪汪,卻和暖如春涌穆,著一層夾襖步出監(jiān)牢的瞬間怔昨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工宿稀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趁舀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓祝沸,卻偏偏與公主長(zhǎng)得像矮烹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罩锐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355