总览:我们的目标
我们将构建一个功能强大的 Vim 环境,它具备:

- 语法高亮:Python 代码关键字、函数、字符串等高亮显示。
- 代码补全:智能、上下文感知的代码补全(包括函数参数提示)。
- 代码跳转:快速跳转到函数/类的定义(需要配合
ctags或 LSP)。 - 代码检查:实时检查代码语法错误和潜在问题(Pylint, Flake8)。
- 代码格式化:一键格式化代码(Black, autopep8)。
- 虚拟环境支持:自动识别并使用项目的虚拟环境。
- 调试集成:在 Vim 中直接进行断点调试。
- 效率工具:文件浏览、项目管理、Git 集成等。
第一步:基础准备
安装必要的系统工具
这些工具是 Vim 插件和 Python 开发的基础。
# 对于 Debian/Ubuntu 系统 sudo apt update sudo apt install -y python3-dev python3-pip python3-venv build-essential cmake git # 对于 Fedora/CentOS/RHEL 系统 sudo dnf install -y python3-devel python3-pip python3-virtualenv gcc make cmake git
python3-dev/python3-devel: 提供 Python 的头文件,编译某些插件时需要。pip: Python 的包管理器。build-essential/gcc: C/C++ 编译器,很多 Vim 插件由 C 语言编写,需要编译。cmake: 构建工具,部分插件需要。git: 插件管理器需要。
选择 Vim 版本
现代 Vim 插件,特别是 LSP(语言服务器协议)客户端,需要一个功能较新的 Vim,强烈推荐使用 Neovim,它对现代插件和异步支持更好,配置也更灵活。
# 对于 Debian/Ubuntu sudo apt install neovim # 对于 Fedora/CentOS/RHEL sudo dnf install neovim
你可以通过 nvim --version 检查版本,确保 Python3 支持 (+python3) 已启用。
第二步:插件管理器
我们使用 vim-plug,它轻量、快速、易于使用。

-
安装 vim-plug
# 在 Linux/macOS 上 curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim -
创建/编辑配置文件
创建或编辑你的 Neovim 主配置文件:
touch ~/.config/nvim/init.vim
-
在
init.vim中配置插件
(图片来源网络,侵删)打开
~/.config/nvim/init.vim,粘贴以下基本结构,我们将逐步向其中添加插件。" --- 基础设置 --- set nocompatible " 使用 Vim 的改进模式,而不是 Vi 兼容模式 filetype plugin indent on " 开启文件类型检测 syntax on " 开启语法高亮 " --- 编码与界面 --- set encoding=utf-8 set fileencoding=utf-8 set termencoding=utf-8 set number " 显示行号 set relativenumber " 显示相对行号,方便跳转 set cursorline " 高亮当前行 set showmatch " 高亮匹配的括号 set laststatus=2 " 总是显示状态栏 " --- 搜索与缩进 --- set hlsearch " 高亮搜索结果 set incsearch " 输入时即搜索 set ignorecase " 搜索时忽略大小写 set smartcase " 如果搜索词包含大写,则区分大小写 set autoindent " 自动缩进 set smartindent " 智能缩进 set expandtab " 用空格代替 Tab set tabstop=4 " Tab 宽度为 4 个空格 set shiftwidth=4 " 缩进宽度为 4 个空格 set softtabstop=4 " 将连续 4 个空格视为一个 Tab " --- 性能与备份 --- set nobackup set noswapfile set hidden " 允许在缓冲区有未保存的更改时切换到其他缓冲区 " --- 插件管理器 vim-plug --- call plug#begin('~/.local/share/nvim/plugged') " 在这里添加你的插件 call plug#end()
第三步:核心 Python 插件
我们向 init.vim 的插件区域添加以下插件。
代码补全和 LSP (强烈推荐)
这是现代 Vim Python 开发的核心,我们使用 LSP (Language Server Protocol)。
- nvim-lspconfig: 用于配置各种语言服务器,包括 Python。
- nvim-cmp: 强大的自动补全引擎。
- LuaSnip: 代码片段引擎。
在 init.vim 的 call plug#begin() 和 call plug#end() 之间添加:
" --- LSP (语言服务器协议) --- Plug 'neovim/nvim-lspconfig' Plug 'hrsh7th/cmp-nvim-lsp' " LSP 源 Plug 'hrsh7th/cmp-buffer' " 缓冲区词源 Plug 'hrsh7th/cmp-path' " 路径词源 Plug 'hrsh7th/cmp-cmdline' " 命令行词源 Plug 'hrsh7th/nvim-cmp' " 补全引擎 " --- 代码片段 --- Plug 'L3MON4D3/LuaSnip' Plug 'saadparwaiz1/cmp_luasnip' " Snip 源 " --- 文件浏览器 --- Plug 'preservim/nerdtree' " --- 状态栏 --- Plug 'itchyny/lightline.vim' " --- Git 集成 --- Plug 'tpope/vim-fugitive'
Python 语言服务器配置
我们需要一个 Python 语言服务器,推荐使用 pyright 或 pylsp。
安装 pyright (推荐,由微软维护,速度快):
npm install -g pyright
或者使用 pip 安装 python-lsp-server (它包含 pylsp):
pip install python-lsp-server[all]
其他实用插件
- ALE (Asynchronous Lint Engine): 语法检查和代码格式化,即使不使用 LSP,它也是一个非常强大的工具。
- vim-indent-object: 按
ii或ai选择缩进块,非常高效。 - vim-surround: 用
cs",ds',ysiw"等命令轻松修改字符串周围的符号。 - coc.nvim: 另一个流行的 LSP 客户端,配置不同,但功能强大,这里我们以 nvim-lspconfig 为例。
第四步:编写完整配置文件
将所有设置和插件组合起来,你的 ~/.config/nvim/init.vim 文件内容如下:
" =====================================================================
" 基础设置
" =====================================================================
set nocompatible
filetype plugin indent on
syntax on
" 编码与界面
set encoding=utf-8
set fileencoding=utf-8
set termencoding=utf-8
set number
set relativenumber
set cursorline
set showmatch
set laststatus=2
" 搜索与缩进
set hlsearch
set incsearch
set ignorecase
set smartcase
set autoindent
set smartindent
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
" 性能与备份
set nobackup
set noswapfile
set hidden
" 键盘映射
let mapleader = " " " 设置空格键为 leader 键
nnoremap <leader>w :w<CR> " 保存
nnoremap <leader>q :q<CR> " 退出
nnoremap <leader>wq :wq<CR> " 保存并退出
nnoremap <leader>e :NERDTreeToggle<CR> " 切换文件树
" =====================================================================
" 插件管理器 (vim-plug)
" =====================================================================
call plug#begin('~/.local/share/nvim/plugged')
" --- LSP 和自动补全 ---
Plug 'neovim/nvim-lspconfig'
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-cmdline'
Plug 'hrsh7th/nvim-cmp'
Plug 'L3MON4D3/LuaSnip'
Plug 'saadparwaiz1/cmp_luasnip'
" --- 文件浏览器和状态栏 ---
Plug 'preservim/nerdtree'
Plug 'itchyny/lightline.vim'
" --- Git 集成 ---
Plug 'tpope/vim-fugitive'
" --- 代码检查和格式化 (可选,但推荐) ---
Plug 'dense-analysis/ale'
call plug#end()
" =====================================================================
" 插件配置
" =====================================================================
" --- Nvim-Cmp (自动补全) 配置 ---
lua << EOF
-- nvim-cmp setup
local cmp = require('cmp')
cmp.setup({
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Replace,
select = true,
}),
}),
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'buffer' },
{ name = 'path' },
},
})
-- LSP setup
local lspconfig = require('lspconfig')
-- 为 Python 配置 pyright 语言服务器
lspconfig.pyright.setup{
on_attach = function(client, bufnr)
-- 在这里可以添加按键绑定,例如跳转到定义
local nmap = function(keys, func, desc)
if desc then
desc = 'LSP: ' .. desc
end
vim.keymap.set('n', keys, func, { buffer = bufnr, noremap = true, silent = true, desc = desc })
end
nmap('<leader>gd', vim.lsp.buf.definition, 'Goto Definition')
nmap('<leader>gr', vim.lsp.buf.references, 'Goto References')
end
}
-- 你也可以配置 pylsp
-- lspconfig.pylsp.setup{}
EOF
" --- ALE 配置 ---
let g:ale_linters = {'python': ['flake8', 'pylint']}
let g:ale_fixers = {'python': ['black', 'autopep8']}
let g:ale_fix_on_save = 1 " 保存时自动修复
let g:ale_python_flake8_options = '--max-line-length=88' " 符合 PEP 8
" --- NERDTree 配置 ---
let NERDTreeQuitOnOpen = 1
let NERDTreeAutoDeleteBuffer = 1
第五步:安装与激活
-
打开 Neovim
nvim
-
安装插件 第一次打开
init.vim,Vim 会提示你安装插件,输入PlugInstall并回车,它会自动下载所有插件。 -
安装 LSP 服务器 如果你选择了
pyright,确保你已经通过npm安装了它,如果你选择了python-lsp-server,确保它在你的 Python 环境中。
第六步:使用指南
基本工作流
- 打开文件:
nvim my_app.py - 打开文件树: 按
<leader> e(即空格键 + e) - 保存/退出:
<leader> w,<leader> q,<leader> wq - 代码补全: 在输入时,会自动弹出补全菜单,使用
Tab或Enter选择,Ctrl-n/Ctrl-p在菜单中导航。 - 跳转到定义: 将光标放在函数/变量上,按
<leader> gd。 - 查看错误: ALE 会在底部状态栏显示错误信息,你也可以用
ALEDetail查看详细信息。 - 格式化代码:
ale_fix_on_save为 1,保存时自动格式化,也可以手动执行ALEFix。
虚拟环境
Vim 和 LSP 通常不会自动检测虚拟环境,你需要手动告诉它。
-
使用
venv插件 (推荐) 在init.vim中添加Plug 'janko-m/vim-venv',然后安装。 在 Python 项目中,进入虚拟环境后,在 Vim 中执行VenvSelect,选择你的虚拟环境即可,LSP 会自动使用该环境的 Python 解释器。 -
手动设置 你可以在 Vim 中手动设置
g:python3_host_prog指向虚拟环境中的 Python 解释器。" 在 vimrc 中或者在项目目录下的 .vimrc 中设置 let g:python3_host_prog = '/path/to/your/venv/bin/python'
调试
调试配置相对复杂一些,通常需要 DAP (Debug Adapter Protocol) 客户端。
- 插件:
mfussenegger/nvim-dap - Python 调试适配器:
ms-python/python(通过 VS Code 扩展市场安装,然后通过DAPInstall python安装适配器)
调试配置超出了本指南的范围,但当你熟悉了 LSP 后,可以进一步探索 DAP,它能让你在 Vim 中拥有类似 IDE 的调试体验。
总结与进阶
这份配置为你提供了一个功能齐全、现代化的 Vim Python 开发环境。
- 进阶方向:
- Telescope: 一个模糊查找器,用于搜索文件、缓冲区、Git 提交等,比 NERDTree 更高效。
- Treesitter: 提供更精确的语法高亮和代码分析。
- ColorScheme: 探索更多漂亮的 Vim 主题,如
gruvbox,tokyonight。 - 自定义按键: 根据自己的习惯,不断优化
init.vim中的键盘映射。
配置 Vim 是一个持续迭代的过程,不要害怕修改和尝试,找到最适合你工作流的配置才是最好的配置,祝你编码愉快!
