- 基础准备: 确保 Vim 和 Python 正确安装。
- Vim 基础配置: 一个好用的
.vimrc是一切的基础。 - 插件管理: 使用
vim-plug管理插件,这是现代 Vim 的标准做法。 - 核心 Python 插件: 安装和配置语法高亮、代码补全、Linting、代码格式化等。
- 高级功能: 代码跳转、调试、虚拟环境支持。
- 完整
.vimrc文件: 提供一个可以直接使用的配置文件。
基础准备
在开始配置之前,请确保你的系统已经安装了必要的软件。

1 安装 Vim
打开终端,检查你的 Vim 版本。强烈建议使用 Vim 8.0 或更高版本,因为它内置了 pack 插件管理器,但我们这里使用更强大的 vim-plug。
vim --version
如果版本过低或没有安装,请根据你的 Linux 发行版进行安装。
-
Debian / Ubuntu:
sudo apt update sudo apt install vim
-
Fedora / CentOS / RHEL:
(图片来源网络,侵删)sudo dnf install vim
-
Arch Linux:
sudo pacman -S vim
2 安装 Python 和 pip
确保你安装了 Python 以及其包管理器 pip。
# 检查 Python 版本 python3 --version # 推荐使用 Python 3 # 检查 pip 是否已安装 pip3 --version # pip 未安装 (在 Debian/Ubuntu 上) sudo apt install python3-pip
3 安装 Python 开发工具
为了获得最好的代码分析体验,我们需要安装一些 Python 的开发库。
# 安装 flake8 (代码风格检查和 Linting) pip3 install flake8 # 安装 mypy (类型检查) pip3 install mypy # 安装 black (代码格式化) pip3 install black # (可选) 安装 pylint (另一个强大的 Linter) pip3 install pylint
Vim 基础配置
Vim 的配置文件位于你的用户主目录下,名为 .vimrc,如果它不存在,请创建它。

touch ~/.vimrc
我们先来写一个简单但实用的 .vimrc,作为后续插件配置的基础。
" ============================================================================= " 基础设置 " ============================================================================= " 设置编码 set encoding=utf-8 set fileencoding=utf-8 " 开启语法高亮 syntax on " 显示行号 set number " 搜索时,高亮显示匹配项 set hlsearch " 搜索时,输入即高亮 set incsearch " 搜索时忽略大小写 set ignorecase " 如果搜索词包含大写字母,则区分大小写 set smartcase " 启用鼠标支持 (在终端和 GUI 中都有效) set mouse=a " 保存历史记录 set history=1000 " 退格键在插入模式下可以删除缩进、换行符 set backspace=indent,eol,start " 在窗口间使用 Ctrl+h/j/k/l 进行导航 " 注意:这会覆盖 h/j/k/l 的默认导航功能,需要适应 " 如果不想覆盖,可以不加这行 " nnoremap <C-h> <C-w>h " nnoremap <C-j> <C-w>j " nnoremap <C-k> <C-w>k " nnoremap <C-l> <C-w>l " ============================================================================= " 界面设置 " ============================================================================= " 设置 4 个空格为缩进 set tabstop=4 set softtabstop=4 set shiftwidth=4 " 将 Tab 键转换为空格 set expandtab " 自动缩进 set autoindent " 智能缩进 (根据上下文) set smartindent " 启用状态栏 set laststatus=2 " 在状态栏显示当前命令 set showcmd " 高亮当前行 set cursorline " 启用文件类型检测 filetype on " 为不同文件类型加载对应的缩进文件 filetype indent on " 为不同文件类型加载插件 filetype plugin on " 设置配色方案 (使用 'desert' 主题) " colorscheme desert " 如果你想要更现代的配色,可以安装插件,'gruvbox' " colorscheme gruvbox " set background=dark " 针对 gruvbox 等主题
复制并粘贴到你的 ~/.vimrc 文件中,然后重启 Vim 或执行 source ~/.vimrc 使其生效。
插件管理:安装 vim-plug
vim-plug 是一个流行的 Vim 插件管理器,它非常轻量且快速。
-
安装
vim-plug在终端中运行以下命令:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim -
在
.vimrc中声明插件我们修改
.vimrc文件,在文件顶部添加call plug#begin(...)和call plug#end()部分,并在其中声明我们需要的插件。
核心 Python 插件配置
以下是我们为 Python 开发精心挑选的插件,并解释它们各自的作用。
1 插件列表
| 插件名称 | 作用 |
|---|---|
vim-plug |
插件管理器(已安装) |
ycm |
YouCompleteMe: 强大的、基于语言的代码补全引擎。 |
ale |
Asynchronous Lint Engine: 异步进行代码检查,提供实时错误和警告提示。 |
lightline.vim |
一个轻量级且高度可定制的状态栏。 |
nerdtree |
文件浏览器,方便在项目中导航。 |
fzf |
命令行模糊查找器,极其快速,需要单独安装。 |
vim-fugitive |
Git 集成插件,让你在 Vim 中完成大部分 Git 操作。 |
ale |
(再次强调) 它集成了 flake8, mypy, pylint 等。 |
black |
(格式化工具) vim-black 是它的 Vim 包装器。 |
coc.nvim |
Conquer of Completion: 一个现代化的代码补全框架,是 ycm 的一个优秀替代品,配置更简单。(我们这里主要讲解 coc.nvim,因为它更易于配置) |
重要提示:YouCompleteMe (YCM) 功能强大但配置复杂,需要编译,对于新手,我们更推荐 coc.nvim,下面的配置将以 coc.nvim 为核心。
2 修改后的 .vimrc 文件
复制到你的 ~/.vimrc 文件中。请确保先备份你原来的 .vimrc。
" =============================================================================
" vim-plug 插件管理器配置
" =============================================================================
call plug#begin('~/.vim/plugged')
" Python 核心插件 - 使用 coc.nvim 进行代码补全和 Linting
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Python 代码格式化
Plug 'psf/black', { 'for': 'python', 'do': 'pip install black' }
" 文件浏览器
Plug 'preservim/nerdtree'
" 状态栏
Plug 'itchyny/lightline.vim'
" Git 集成
Plug 'tpope/vim-fugitive'
" 模糊查找器 (需要单独安装 fzf)
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" 主题 (可选)
Plug 'morhetz/gruvbox'
call plug#end()
" =============================================================================
" 基础设置 (同上,但为了完整性再次列出)
" =============================================================================
set encoding=utf-8
set fileencoding=utf-8
syntax on
set number
set hlsearch
set incsearch
set ignorecase
set smartcase
set mouse=a
set history=1000
set backspace=indent,eol,start
" set showcmd " 被 lightline 覆盖
set laststatus=2
set cursorline
filetype on
filetype indent on
filetype plugin on
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
set smartindent
" 设置主题
colorscheme gruvbox
set background=dark
" =============================================================================
" 插件特定配置
" =============================================================================
" -----------------------------------------------------------------------------
" coc.nvim 配置
" -----------------------------------------------------------------------------
" 使用 Tab 键进行代码补全
inoremap <expr> <Tab> pumvisible() ? coc#_select_confirm() : "<Tab>"
" 使用 S-Tab 反向选择补全项
inoremap <expr> <S-Tab> pumvisible() ? coc#_select_prev() : "<S-Tab>"
" 跳转到定义
nmap <leader>gd <Plug>(coc-definition)
" 跳转到声明
nmap <leader>gy <Plug>(coc-type-definition)
" 跳转到实现
nmap <leader>gi <Plug>(coc-implementation)
" 列出所有引用
nmap <leader>gr <Plug>(coc-references)
" 显示所有错误
nnoremap <leader>el :CocList diagnostics<cr>
" 显示所有符号
nnoremap <leader>cs :CocList symbols<cr>
" 应用代码修复
nmap <leader>qf <Plug>(coc-fix-current)
" 启用代码格式化
nmap <leader>ff <Plug>(coc-format-selected)
vmap <leader>ff <Plug>(coc-format-selected)
" 查看可用命令
nnoremap <leader>cc :CocCommand<cr>
" 让 coc 使用我们安装的 linter 和 formatter
let g:coc_global_extensions = [
\ 'coc-flake8',
\ 'coc-mypy',
\ 'coc-pylint',
\ 'coc-black',
\ 'coc-pyright' " Python 语言服务器,提供更好的智能感知
\ ]
" -----------------------------------------------------------------------------
" NERDTree 配置
" -----------------------------------------------------------------------------
" 自动打开 NERDTree
" autocmd vimenter * NERDTree
" 只在启动 NERDTree 时关闭其他窗口
" autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" 设置快捷键打开/关闭 NERDTree
nnoremap <C-n> :NERDTreeToggle<CR>
" 在 NERDTree 中忽略文件
let NERDTreeIgnore = ['\.pyc$', '__pycache__', '\.git$']
" -----------------------------------------------------------------------------
" lightline.vim 配置
" -----------------------------------------------------------------------------
let g:lightline = {'colorscheme': 'gruvbox'}
" -----------------------------------------------------------------------------
" fzf.vim 配置
" -----------------------------------------------------------------------------
" 设置快捷键搜索文件
nnoremap <C-p> :Files<CR>
" 设置快捷键搜索当前缓冲区中的文本
nnoremap <C-b> :Rg<CR>
" -----------------------------------------------------------------------------
" 其他快捷键
" -----------------------------------------------------------------------------
" 保存文件
nnoremap <C-s> :w<CR>
" 退出 Vim
nnoremap <C-q> :q<CR>
" 分屏导航
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
3 安装插件
- 保存
.vimrc文件。 - 打开 Vim,在命令模式下输入
PlugInstall并回车。 - Vim 会自动下载并安装所有列出的插件。
注意:coc.nvim 的 Python 语言服务器(如 pyright)可能会在安装时提示你安装额外的包,请按照提示操作。
高级功能
1 代码跳转到定义
我们已经配置了快捷键:
<leader>gd: Go to Definition (跳转到定义)<leader>gy: Go to Type Definition (跳转到类型定义)<leader>gi: Go to Implementation (跳转到实现)<leader>gr: Show References (显示引用)
<leader> 键默认是 \,但很多人习惯用空格键,你可以在 .vimrc 中添加 let mapleader = " " 来修改。
2 代码格式化
我们安装了 black,并且通过 coc-black 插件集成了它。
- 在普通模式下,选中代码(使用
v或V),然后按<leader>ff即可格式化。 - 你也可以配置
coc.nvim在保存时自动格式化,在.vimrc中添加:" 保存时自动格式化 autocmd BufWritePre *.py :Format
3 虚拟环境支持
当你在项目中使用 Python 虚拟环境时,coc-pyright 或其他 Linter 可能找不到正确的解释器。
使用 venv-selector.nvim (推荐)
这是一个专门为 coc.nvim 设计的插件,可以自动检测和切换虚拟环境。
- 在
.vimrc的plug#begin和plug#end之间添加:Plug 'linux-cultist/venv-selector.nvim'
- 运行
PlugInstall。 - 重启 Vim。
- 在 Python 项目根目录下,运行
VenvSelect,它会自动查找并列出所有可用的虚拟环境供你选择。
手动配置
你也可以手动告诉 coc-pyright 使用哪个解释器。
- 激活你的虚拟环境:
source /path/to/venv/bin/activate - 在 Vim 中运行
CocConfig,这会打开coc-settings.json文件。 - 添加以下配置,将路径替换为你的虚拟环境中的 Python 解释器路径:
{ "python.pythonPath": "/path/to/your/venv/bin/python" }
完整工作流示例
假设你有一个项目 my_project。
-
创建项目目录并进入
mkdir my_project cd my_project
-
创建虚拟环境
python3 -m venv venv source venv/bin/activate
-
安装项目依赖
pip install requests flask
-
在 Vim 中打开项目
vim .
-
在 Vim 中操作
- 文件浏览: 按
<C-n>打开 NERDTree 查看项目文件。 - 创建文件: 在 NERDTree 窗口中按
m,然后选择a创建新文件,app.py。 - 代码补全: 在
app.py中输入import req,然后按Tab,coc.nvim会自动补全为requests。 - 代码检查: 如果代码有语法错误,
ale会在行尾用红色波浪线标出,并将错误信息显示在 Vim 的状态栏或 Quickfix 窗口中(copen)。 - 代码格式化: 选中一段代码,按
<leader>ff,代码会立即被black格式化。 - 跳转定义: 将光标放在
requests.get中的get上,按<leader>gd,Vim 会跳转到get函数的定义。 - 搜索文件: 按
<C-p>,输入文件名,快速跳转到任意文件。
- 文件浏览: 按
通过以上步骤,你已经拥有了一个功能完备的 Vim Python 开发环境,这个配置结合了 coc.nvim 的强大智能补全、ale 的实时检查、black 的代码格式化以及 NERDree 和 fzf 的便捷导航,可以媲美现代 IDE 的体验。
最重要的是,Vim 的世界非常广阔,这个配置只是一个起点,你可以根据自己的习惯不断调整 .vimrc,添加更多插件,打造真正属于你自己的神器,祝你编码愉快!
