使用 VIM 打造 自己的 Python3 IDE 编辑器

本文链接: https://www.jianshu.com/p/bba4fcb6edb3

一、源码安装 vim

特别说明:

假如你不想使用 vim-flake8 插件 可以不用重新编译安装 vim,只要保证 vim 的版本是 >=7.3 ,查看当前 vim 版本,执行命令: vim --version

1 下载源码包

git clone https://github.com/vim/vim.git

2 配置支持 Python2 和 python3

需要保证系统中编译安装了 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 验证

安装完成后,在命令行终端输入如下命令使当前 shell 使用新的 vim

source    /etc/profile

接下来在命令行终端继续输入如下命令,验证是否支持 python3

vim --version|grep python

+python3/dyn 表示支持

image.png

二、快速执行 vim 正在编辑的代码

常用的 IDE 编辑器都提供一键执行代码的命令或插件 (如 VSCode 的 F5 快捷键)。不退出 Vim (甚至可以不保存)的情况下而直接执行 Vim 当前打开的 Python 文件是一个非常高效的操作方式。

~/.vimrc 配置文件中添加如下配置就可以实现在 Vim 的普通模式下按 F5 一键执行 Python 代码。

三、安装插件管理器

要想让 vim 更强大,就需要给它安装相应的插件,要安装和管理这些插件,首先需要安装一个插件管理器。

这里选择的是 Vundle

1 安装 Vundle

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

2 设置 Vundle

在用户家目录下的 .vimrc 文件的开头,添加如下内容

切记使用 vi 命令打开并编辑

set nocompatible              " 必须
filetype off                  " 关闭自动文件类型检查,必须

" 设置运行时包含 Vundle 的路径和 初始化,必须
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()  " 开始调用  Vundle 进行插件的管理

" 首先必须加载 Vundle 插件
Plugin 'VundleVim/Vundle.vim'

" 在下面编写自己需要用的的插件

" 所有要使用的插件,必须在下面一行之前
call vundle#end()            " 必须的
filetype plugin indent on    " 打开文件类型检查,必须的


" 下面是帮助信息
" :PluginList       - 列出已经安装且配置好的插件
" :PluginInstall    - 安装插件
" :PluginUpdate  - 更新现有的插件
" :PluginClean      - 清空没有在 .vimrc 文件中配置的插件
"
" 把你的非插件的其他设置放在这行后面

设置好配置文件后,可通过下述两种方法安装插件:

(1) 在Vim命令行模式下运行命令:PluginInstall

(2) 在终端命令行下通过命令vim +PluginInstall +qall直接安装

接着,退出 vi 并在命令行中执行如下命令安装Vundle插件

vim +PluginInstall +qall

四、安装自动代码提示补全插件 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'

接下来安装安装此插件,在 vim 命令行模式中输入如下命令

:PluginInstall

在 vim 的编辑模式中使用 . 可以激活自动提示功能
使用 Ctrl+n 也可以激活自动提示功能,并且还可以进行自动补全

四、显示缩进线的插件 indentLine

indentLine 插件在 Vim 界面中显示出来的缩进指示线,使用了 Vim 提供的 conceal 功能。

image.png

1 先决条件

vim 需要是 7.3 及其以上, Centos7的 vim 都是 7.4 的,所以应该都支持此功能。

2 安装和配置

如果使用vundle安装indentLine,只需要在Vim配置文件 ~/.vimrc 中增加如下内容
Plugin 'Yggdroot/indentLine'

并使用 :PluginInstall 进行安装即可。

3 使用

在Vim命令行模式下可以使用 :IndentLinesToggle 命令打开或者关闭显示缩进指示线。

默认情况下,当有二级缩进的时候,就会显示缩进标识了,默认的缩进标识是 ¦

image.png

  1. 定制缩进标识

可以在 .vimrc 中使用下面的配置设置自定义的缩进标识

let g:indentLine_char='🍉'

image.png

提示:显然这些缩进标识都不会真正的保存在你的文件中。

五、 代码自动格式化插件 autopep8

vim-autopep8是一个将Python源代码自动格式化为满足PEP8规范的Vim插件。

安装后在 Vim 普通模式下执行 :Autopep8 命令就可以按照 PEP8 标准规范自动格式化 Python 源代码

  1. 插件安装和配置

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 内集成 flake8 (由 Python 官方发布的一款辅助检测 Python 代码是否规范的工具,整合了 PyFlakes 和 PEP 8 两个代码检查软件的功能) 的代码检测功能的 Vim 插件,可用于对 Vim 打开的当前 Python 代码进行静态的语法检查和格式检测。该插件依赖 flake8 (Python官方发布的一款辅助检测 Python 代码是否规范和正确的工具) 工具,可通过 pip3 install flake8 命令进行安装。

1 插件安装和配置

在 Vim 配置文件 ~/.vimrc中增加 Plugin 'nvie/vim-flake8' 并使用 :PluginInstall 进行安装即可。

2 使用 F7

或者执行 flake8 /path/to/file.py

若果希望在每次保存文件的时候执行检查,可以在 ~/.vimrc 中配置如下内容

autocmd BufWritePost *.py call flake8#Flake8()

七、括号/引号自动补齐插件 auto-pairs

使用 auto-pairs 插件,可以在 Vim 插入模式下,输入左大括号后自动补全右大括号;在一对括号之间按回车键,将自动分为 3 行并调整缩进和光标位置。

1 插件安装和配置

在 Vim 配置文件 ~/.vimrc 的合适位置添加 Plugin 'jiangmiao/auto-pairs' 后再在 Vim 的命令行模式下执行 :PluginInstall 命令即可完成插件的安装。

2 使用

Insert in pair

input: [
output: [|]

八、多括号显示不同颜色的插件 rainbow_parenthsis

使用 Vim 编写 Python 代码时经常会出现一行代码中有多重括号嵌套的场景,这使得阅读和分析这种连续嵌套的多重括号变得较为困难。

rainbow_parenthsis 是一个对不同层次的括号 (包括()[]{}<>) 使用不同彩色进行高亮匹配显示的 Vim 插件,虽然功能较为简单,但是却十分实用。

1 安装和配置

~/.vimrc 中添加 Plug 'kien/rainbow_parentheses.vim' 后执行 :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 插件可以实现快速注释连续的多行代码,也可以注释掉从当前光标所在位置到行尾的剩下内容,还可以注释掉从当前光标所在位置到行尾的剩下内容。在 ~/.vimrc 文件中添加设置
map <F4> <leader>ci <CR> 可以实现按 F4 键快速注释和反注释当前行。

nerdcommenter 插件,需要打开 Vim 加载文件类型插件的功能
请保证在 ~/.vimrc 文件中正确添加了如下配置项

set  filetype plugin indent on

1 安装和配置

Vim 的配置文件中添加 Plugin 'preservim/nerdcommenter',再通过在 Vim 的命令行模式下执行 :BundleInstall 命令完成插件的安装。

2 使用

以下操作需要在 vim 的默认模式下执行
默认模式就是 按下 Esc 键后的模式

  • 注释光标所在行
    \cc

  • 注释向下连续 3 行,从光标所在行开始,也就是总共注释 3 行
    3\cc

  • 取消光标所在行的注释
    \cu

  • 取消向下连续 3 行的注释,从光标所在行开始,总共取消注释 3 行
    3\cu

  • 切换行的注释状态 ,就是注释了,就取消注释,没有注释,就添加注释🌟🌟🌟
    \ci 当前行
    3\ci 3 行

是不是感觉被骗了😄,这个才是终极办法啊。

  • 注释掉从当前光标所在位置到行尾的剩下内容 🌟🌟
    \c$

  • 在行尾添加注释,并进入 vim 的编辑模式 🌟🌟
    \cA

完整的 .vimrc

syntax on " 语法高亮
set nocompatible              " 必须
set backspace=indent,eol,start  " 使用退格键删除光标前面的字符
filetype off                  " 关闭自动文件类型检查,必须

" 设置运行时包含 Vundle 的路径和 初始化,必须
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()  " 开始调用  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 代码规范
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       - 列出已经安装且配置好的插件
" :PluginInstall    - 安装插件
" :PluginUpdate  - 更新现有的插件
" :PluginClean      - 清空没有在 .vimrc 文件中配置的插件
""""""""""""""""""""""""""""""""""""

" 把你的非插件的其他设置放在这行后面

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

" 打开语法高亮
syntax on

" 开启自动匹配
set showmatch

"设置按下 Tab 键,实际输入的是空格
set expandtab

"设置 expandtab 后,设置一下按一次 Tab 键输入  4 个空格
set tabstop=4

"set smartindent

"自动缩进时候,缩进 4 个空格
set shiftwidth=4

"总是显示状态栏
set laststatus=2
"显示光标当前位置
set ruler

"表示如果当前文件在 Vim 外被修改且未在 Vim 里面重新载入的话,则自动重新读取。
set autoread

"设置 Vim 窗口标题。
set title

"关闭错误提示的响铃
set noerrorbells

"设置新建文件时候,自动向文件中添加内容
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 教程网, 博主是个萌妹子😍,一般人儿我不告诉他。在此表示感谢!🌹

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345