总览:我们将使用现代的 Vim 配置方式
我们将采用 vim-plug 作为插件管理器,这是目前最流行、最易用的 Vim 插件管理器,我们的配置将围绕以下几个核心目标:
- 代码补全:强大的、基于语言的智能补全。
- 语法高亮与检查:实时语法检查和错误提示。
- 代码跳转:轻松在函数定义和调用之间跳转。
- 代码格式化:一键美化代码。
- 美观与效率:美观的界面和高效的操作。
第一步:安装必要的工具
在配置 Vim 之前,我们需要确保 Mac 上有一些基础工具。
安装 Homebrew (如果尚未安装)
Homebrew 是 macOS 的包管理器,可以方便地安装各种开发工具。
打开终端,运行以下命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装完成后,可以运行 brew --version 验证。
安装 Python 3
macOS 通常自带 Python 2,但我们应该使用 Python 3。
# 安装 Python 3 brew install python # 验证安装 python3 --version # pip3 是 Python 3 的包管理器 pip3 --version
安装 Node.js 和 Linters (代码检查工具)
很多现代 Vim 插件依赖 Node.js,我们还需要安装 Python 的代码检查工具。
# 安装 Node.js (LSP 服务器可能需要) brew install node # 安装 Python 代码检查工具 # flake8: 代码风格检查 # mypy: 类型检查 pip3 install flake8 mypy
安装 Linter/Formatters 的语言服务器
为了实现强大的代码补全和跳转,我们需要一个语言服务器。pyright 是一个非常好的 Python LSP 服务器。
# 安装 pyright Python 语言服务器 npm install -g pyright
第二步:安装并配置 Vim 插件管理器 (vim-plug)
-
备份你的旧配置 (如果存在)
mv ~/.vimrc ~/.vimrc.backup mv ~/.vim ~/.vim.backup
-
创建新的配置文件 创建或编辑
~/.vimrc文件,你可以使用vim ~/.vimrc命令。 -
安装 vim-plug 在
~/.vimrc文件的开头,粘贴以下代码,这会自动下载并安装 vim-plug。" === vim-plug 插件管理器 === if empty(glob('~/.vim/autoload/plug.vim')) silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif
第三步:配置 .vimrc 文件
我们将分步构建 .vimrc 文件,你可以直接复制下面的完整配置到你的 ~/.vimrc 中,然后我会逐部分解释。
完整 .vimrc 配置
" === 基础设置 ===
" 设置编码
set encoding=utf-8
set fileencoding=utf-8
" 启用语法高亮
syntax on
" 显示行号
set number
set relativenumber " 显示相对行号,方便跳转
" 搜索时,高亮显示匹配项
set hlsearch
" 搜索时,输入即搜索
set incsearch
" 按下 ESC 后,取消高亮
nnoremap <ESC> :nohlsearch<CR>
" 启用鼠标支持
set mouse=a
" 设置 Tab 和缩进
" 使用空格代替 Tab
set expandtab
" 设置 Tab 宽度为 4 个空格
set tabstop=4
" 设置自动缩进为 4 个空格
set shiftwidth=4
" 智能缩进
set smartindent
" 启用文件类型检测
filetype plugin indent on
" === 界面设置 ===
" 设置主题 (这里使用 gruvbox,你也可以选择 solarized, onedark 等)
Plug 'morhetz/gruvbox'
" 状态栏插件
Plug 'itchyny/lightline.vim'
" === 代码补全和 LSP (Language Server Protocol) ===
" LSP 客户端插件
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" === 代码跳转和结构 ===
" 代码大纲/符号列表
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
" 在文件中快速跳转
Plug 'easymotion/vim-easymotion'
" 显示当前光标位置的上下文
Plug 'preservim/tagbar', { 'on': 'TagbarToggle' }
" === Python 开发增强 ===
" 代码自动补全括号等
Plug 'jiangmiao/auto-pairs'
" 代码注释
Plug 'tpope/vim-commentary'
" 代码格式化 (支持 black, yapf 等)
Plug 'sbdchd/neoformat'
" === Git 集成 ===
" Git 状态显示
Plug 'airblade/vim-gitgutter'
" Git 命令行工具
Plug 'tpope/vim-fugitive'
" === 文件搜索 ===
" 模糊查找文件
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" === 插件配置 ===
" 运行 PlugInstall
call plug#begin('~/.vim/plugged')
" 在这里粘贴上面的所有 Plug 命令
Plug 'morhetz/gruvbox'
Plug 'itchyny/lightline.vim'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'easymotion/vim-easymotion'
Plug 'preservim/tagbar', { 'on': 'TagbarToggle' }
Plug 'jiangmiao/auto-pairs'
Plug 'tpope/vim-commentary'
Plug 'sbdchd/neoformat'
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()
" === 主题和界面配置 ===
" 设置主题
colorscheme gruvbox
set background=dark " 或 light,根据你的喜好
" === NERDTree 配置 ===
nnoremap <C-n> :NERDTreeToggle<CR>
let NERDTreeShowHidden=1
let NERDTreeQuitOnOpen=1
let NERDTreeAutoDeleteBuffer=1
" === Tagbar 配置 ===
nnoremap <C-t> :TagbarToggle<CR>
" === FZF 配置 ===
nnoremap <C-p> :Files<CR>
" === coc.nvim 配置 ===
" 使用 Tab 键进行补全导航
inoremap <expr> <Tab> coc#pum#visible() ? coc#pum#next(1) : coc#refresh()
inoremap <expr> <S-Tab> coc#pum#visible() ? coc#pum#prev(1) : coc#refresh()
" 回车确认补全
inoremap <expr> <cr> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"
" 跳转到定义
nnoremap <leader>gd <Plug>(coc-definition)
" 跳转到声明
nnoremap <leader>gD <Plug>(coc-declaration)
" 跳转到实现
nnoremap <leader>gi <Plug>(coc-implementation)
" 跳转到引用
nnoremap <leader>gr <Plug>(coc-references)
" 显示错误/警告
nnoremap <leader>rn <Plug>(coc-rename)
" === Neoformat 配置 ===
" 自动格式化
autocmd BufWritePre *.py Neoformat
" 指定格式化工具 (black)
let g:neoformat_python_black = {
\ 'exe': 'black',
\ 'args': ['--quiet', '--line-length', '88'],
\ 'stdin': 1
\ }
" 如果你喜欢 yapf,可以这样配置
" let g:neoformat_python_yapf = {
" \ 'exe': 'yapf',
" \ 'args': [],
" \ 'stdin': 1
" \ }
" === 快捷键 ===
" 保存文件
nnoremap <C-s> :w<CR>
" 退出 Vim
nnoremap <C-q> :q<CR>
第四步:安装和配置插件
-
打开 Vim 并安装插件 保存
~/.vimrc文件后,打开 Vim,在命令行模式下输入PlugInstall,Vim 会自动下载并安装所有在配置文件中定义的插件。:PlugInstall
-
配置 coc.nvim 的 Python 语言服务器
coc.nvim需要你手动安装语言服务器,因为我们前面已经安装了pyright,所以这里只需要告诉coc.nvim即可。在 Vim 中运行以下命令:
:CocInstall coc-pyright
这会安装 Python 的语言服务器,你也可以安装其他语言的 LSP,如
coc-tsserver(JavaScript/TypeScript)。 -
安装 black (代码格式化工具) 如果你选择使用
black进行代码格式化,请确保已安装:pip3 install black
第五步:如何使用
你的 Vim Python 环境已经配置完成!以下是一些常用操作的快捷键:
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 文件/项目导航 | ||
| 打开文件模糊查找 | <C-p> |
使用 FZF 查找并打开文件 |
| 打开/关闭目录树 | <C-n> |
打开或关闭 NERDTree |
| 代码跳转 | ||
| 跳转到函数定义 | <leader>gd |
leader 键通常是 \ |
| 跳转到函数实现 | <leader>gi |
|
| 跳转到函数引用 | <leader>gr |
|
| 显示符号列表 | <C-t> |
打开/关闭 Tagbar,显示当前文件的函数/类 |
| 代码编辑 | ||
| 格式化当前文件 | (自动或在普通模式下) Neoformat |
保存文件时自动格式化 |
| 切换注释/取消注释 | gcc (普通模式) |
注释或取消注释当前行 |
| 自动补全 | Tab / Shift-Tab |
在补全菜单中导航 |
| 确认补全 | Enter |
选择补全项 |
| 其他 | ||
| 保存文件 | <C-s> |
|
| 退出 Vim | <C-q> |
|
| 查找 | (普通模式) | 向下搜索 |
| 取消高亮 | <ESC> |
第六步:进阶与优化
使用 YouCompleteMe (YCM) 替代 coc.nvim
coc.nvim 轻量且易于配置,但 YouCompleteMe (YCM) 是性能最强、最全面的补全引擎,但配置也更复杂。
如果你想尝试 YCM,可以:
- 卸载
coc.nvim:Plug 'neoclide/coc.nvim' - 安装 YCM:
Plug 'ycm-core/YouCompleteMe' - 安装完成后,在 Vim 中运行
YCMInstallPython来编译 Python 支持模块。 - 配置
.vimrc中的补全相关快捷键。
继续探索 Vim 的强大功能
help:Vim 最好的文档,遇到任何问题,首先想到help。w !python %:一个非常酷的技巧,在 Vim 中直接运行当前 Python 文件。term:打开一个终端窗口,可以在不离开 Vim 的情况下执行命令。
恭喜你!现在你拥有了一个功能强大、高度可定制的 Vim 开发环境,这个配置涵盖了 Python 开发的大部分需求,并且通过插件系统,你可以随时根据需要添加新功能。
享受高效、流畅的 Vim 编程体验吧!
