Debian Vim 安装与插件配置指南#
这份文档适用于 Debian 上的 Vim,不是 Neovim 的 init.lua。配置基于 vim-plug 管理插件,并针对目录树、项目搜索、Vue/JavaScript 编辑和中文编码做了设置。1 2
配置已在 Debian 13、Vim 9.1 下测试:包括插件安装、NERDTree、J/K 移动、Vue 语法识别、中文搜索和不创建 swap 文件。其他 Debian/Vim 版本的插件兼容性可能有差异。
**不会自动修改你的服务器。**请在目标 Debian 机器上备份原配置,然后按下面步骤保存和安装。
1. 安装 Vim 与依赖#
sudo apt update
sudo apt install -y vim git curl ca-certificates ripgrep diffutilsvim:完整 Vim,不要只使用功能受限的vim-tiny。git:供 vim-plug 下载插件,也供 Git 插件使用。ripgrep:提供rg命令,供项目内容搜索使用。diffutils:提供diff,供 UndoTree 的差异窗口使用。
查看版本:
vim --version | head -n 5
git --version
rg --version | head -n 1安装 vim-plug#
如果之前已经安装,可以跳过。以下命令以日常使用 Vim 的普通用户执行:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim这一步和后面的 :PlugInstall 都需要访问 GitHub。不要用 sudo 下载到普通用户的插件目录;sudo vim 也可能使用不同的用户配置。
2. 备份并编辑配置#
如果已经有 ~/.vimrc,先备份:
if [ -f ~/.vimrc ]; then
cp -L ~/.vimrc ~/.vimrc.bak."$(date +%Y%m%d-%H%M%S)"
fi然后编辑配置:
vim -u NONE ~/.vimrc-u NONE 只在这次编辑时不加载旧配置,避免旧配置报错。
如果要用下面的配置整体替换旧内容:
- 在 Vim 中按
Esc,输入:%delete并回车。 - 按
i,粘贴下一节的完整配置。 - 按
Esc,输入:wq并回车保存。
如果旧配置里有自己需要保留的内容,应先备份并手动合并,不要盲目覆盖。
3. 完整的 ~/.vimrc#
__FULL_VIMRC__4. 安装或更新插件#
保存 .vimrc 后,重新打开 Vim:
vim在 Vim 中输入并回车:
:PlugInstall等待下载完成,然后输入 :qa 退出所有窗口,重新打开 Vim。首次安装完成并重启后,配色和插件才会完整加载。
以后更新已安装插件:
:PlugUpdate查看插件安装状态:
:PlugStatus5. 插件列表#
| 插件 | 作用 | 备注 |
|---|---|---|
preservim/nerdtree | 左侧文件目录树 | 重点插件 |
Xuyuanp/nerdtree-git-plugin | 在目录树中显示 Git 状态 | 需要 git |
ctrlpvim/ctrlp.vim | 按文件名模糊查找 | Ctrl+p |
jremmen/vim-ripgrep | 在项目中搜索文件内容 | 新增;需要 rg |
tpope/vim-commentary | 注释和取消注释 | gcc、可视模式下 gc |
tpope/vim-surround、vim-repeat | 操作括号、引号,并增强重复操作 | 不等同于自动补全代码 |
jiangmiao/auto-pairs | 输入括号、引号时自动配对 | 新增;可在当前缓冲区切换 |
mbbill/undotree | 图形化查看当前文件的撤销历史 | 新增;不是 swap 崩溃恢复 |
vim-airline/vim-airline | 底部状态栏 | 配置不要求 Nerd Font |
tpope/vim-fugitive | 在 Vim 中查看和操作 Git | 需要在 Git 项目中使用 |
airblade/vim-gitgutter | 在行号附近标记 Git 修改 | 对 Git 跟踪的文件生效 |
pangloss/vim-javascript、posva/vim-vue | JavaScript 和 Vue 单文件组件语法高亮 | 新增;结合你的 Vue 项目 |
morhetz/gruvbox | 深色配色 | 首次安装前使用默认配色 |
这套配置中的 Vue 插件主要是语法高亮,不是语言服务器或智能代码补全;没有自动安装 Node.js、Vue LSP 或 TypeScript LSP。插件文档:CtrlP 3、vim-ripgrep 1、UndoTree 1、vim-vue 1。
6. 常用快捷键#
先按 Esc,进入普通模式。本配置将 <leader> 设为空格:例如 空格 e 指先按空格,再按 e。
6.1 移动、文件树和窗口#
| 操作 | 按键或命令 |
|---|---|
| 向下移动 1 行 | j |
| 向上移动 1 行 | k |
| 向下移动 3 行 | J |
| 向上移动 3 行 | K |
| 打开或关闭目录树 | Ctrl+n |
| 在树中定位当前文件 | 空格 e 或 :NERDTreeFind |
| 在窗口之间切换 | Ctrl+w,松开后再按 w |
| 在树中展开目录或打开文件 | Enter |
| 刷新整棵目录树 | 在树窗口按 R |
| 查看目录树内的帮助 | 在树窗口按 ? |
| 退出所有窗口 | :qa |
J/K 移动的是三条实际文本行,不是三条屏幕折行。它们在普通模式的编辑窗口和 NERDTree 中生效;其他插件的专用窗口可能有自己的局部映射。
原本的按键功能已保留:
- Vim 默认的
J是合并行,现改为空格 j。 - Vim 默认的
K是查询光标下关键字,现改为空格 k;具体查询内容取决于keywordprg。 - NERDTree 原本的
J/K用于跳到同级目录项末尾 / 开头,现改为树窗口内的gJ/gK。
不带文件参数执行 vim 时会自动打开目录树。如果用 vim 文件名 打开文件,按 Ctrl+n 即可切换目录树。
6.2 查找文件和内容#
建议先进入项目目录:
cd /你的/项目目录
vim| 操作 | 按键或命令 |
|---|---|
| 按文件名查找 | Ctrl+p |
| 查找已打开的缓冲区 | 空格 b |
| 搜索项目内容 | 空格 r,输入关键词后回车 |
| 直接搜索项目内容 | :Rg 关键词 |
| 查看当前工作目录 | :pwd |
| 打开 / 关闭搜索结果列表 | :copen / :cclose |
| 跳到下一条 / 上一条结果 | :cnext / :cprev |
| 清除上一次搜索高亮 | 空格 h |
:Rg 默认从 Vim 当前工作目录搜索;所以最好先 cd 到项目目录。CtrlP 的文件搜索默认跳过 .git、node_modules 和 __pycache__,但目录树仍可浏览这些目录。
6.3 注释、括号、撤销与 Git#
| 操作 | 按键或命令 |
|---|---|
| 注释或取消注释当前行 | gcc |
| 注释选中的多行 | V 选择行,再按 gc |
| 给光标所在单词加双引号 | ysiw" |
| 把双引号改成单引号 | cs"' |
| 切换当前缓冲区的括号自动配对 | 空格 a |
| 打开或关闭撤销历史树 | 空格 u |
| 普通撤销 / 重做 | u / Ctrl+r |
| 查看 Git 状态 | 空格 g 或 :Git |
UndoTree 展示 Vim 的撤销历史;本配置没有额外开启持久撤销文件,通常退出会话后历史不会保留。它不能代替下面关闭的 swap 崩溃恢复功能。
7. 不生成 .swp 文件#
完整配置里已有:
set noswapfile它禁止 Vim 为缓冲区创建 swap 文件。要查看当前缓冲区是否关闭 swap,可在 Vim 中执行:
:setlocal swapfile?正常情况下显示 noswapfile。
重要风险:
- Vim、终端或系统异常退出时,无法依靠 swap 恢复未保存的修改;请经常用
:w保存。 - 不再有基于 swap 的并发编辑提示;避免多个 Vim 同时修改同一个文件。
- 此设置不会自动删除之前已经存在的
.swp文件,也不等同于关闭所有其他备份或撤销文件。
如需检查项目中遗留的旧 swap 文件,可先只列出、不删除:
find . -type f \( -name '*.swp' -o -name '*.swo' -o -name '*.swn' \) -print只有在确认没有其他 Vim 正在编辑对应文件,且不需要通过该文件恢复内容后,才手动删除对应旧文件;不要批量盲删。
8. 中文与编码#
8.1 这份配置做了什么#
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,gb18030,big5,latin1
set fileformats=unix,dosencoding=utf-8:Vim 内部使用 UTF-8;在未被其他设置覆盖时,新建文件通常也会按 UTF-8 保存。fileencodings:打开文件时按顺序尝试识别 BOM、UTF-8、GB18030、Big5 和 Latin-1。fileformats:识别常见的 Unix LF 与 Windows CRLF 换行。- 不在配置里强制
fileencoding=utf-8,因此读取到的已有文件不会仅因这份配置就被强制转码。
**自动识别不是万能的。**GB18030 与 Big5 有重叠的合法字节序列,文件可能被误判;latin1 也是宽松的兜底选项。若你主要处理 Big5 繁体中文文件,可以把 big5 调到 gb18030 前面,但仍需要检查内容。
8.2 终端与系统 locale#
Vim 的编码设置不能代替终端的 UTF-8 支持和中文字体。通过 SSH 连接时,负责显示字符的通常是本地终端软件和本地字体;中文输入也依赖本地输入法。
在 Debian 机器中检查:
locale
locale -a | grep -i utf若系统列出了 C.utf8,可临时用它启动 Vim:
LANG=C.utf8 LC_ALL=C.utf8 vimLC_ALL 会覆盖 LANG,因此需要一并检查。若没有可用的 UTF-8 locale,可按系统管理规范安装 locales 并配置合适的 locale;不要未经确认修改服务器的全局语言设置。
在 Vim 中查看当前设置:
:set encoding? fileencoding? fileencodings? fileformat?8.3 遇到乱码时#
先确认文件没有未保存修改,并留存备份。可以尝试按指定编码重新读取当前文件:
:e ++enc=gb18030或:
:e ++enc=big5检查中文显示正确后再编辑。不要随意使用 :e!,因为它可能丢弃未保存的修改。
如果明确需要把已正确读取并备份的文件转换成 UTF-8,再执行:
:setlocal fileencoding=utf-8
:w这会以 UTF-8 保存并覆盖当前文件,不是单纯改变屏幕显示。
9. 常见问题#
:PlugInstall 不存在#
确认下载文件存在,且是当前用户安装的:
ls -l ~/.vim/autoload/plug.vim若不存在,重新执行第 1 节的 vim-plug 下载命令,之后重新打开 Vim。
:NERDTreeToggle、:Rg 或其他插件命令不存在#
确认已经保存完整的 .vimrc,重启 Vim,执行 :PlugInstall,等待安装完成后再重启。:Rg 还需要系统能找到 rg:
command -v rg仍然有光标行横线#
本配置同时设置了 set nocursorline 和 let g:NERDTreeHighlightCursorline = 0,分别关闭编辑窗口和 NERDTree 自带的光标行高亮。保存配置后重新打开 Vim;若只想临时关闭当前标签页内所有窗口的光标行,可执行:
:windo setlocal nocursorline想调整默认缩进#
配置默认使用 4 个空格,Makefile 使用 Tab。如果项目要求两个空格,可以按需调整 tabstop、shiftwidth 和 softtabstop;不要把 Makefile 所需的 Tab 全部替换成空格。
10.完整配置#
" Debian Vim 8/9:安装 vim-plug 后,进入 Vim 执行 :PlugInstall。
" 已有配置请先备份;本配置适用于 Vim,不适用于 Neovim 的 init.lua。
set nocompatible
" 中文与文件编码:按顺序尝试检测,不强制转换已有文件
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,gb18030,big5,latin1
set fileformats=unix,dos
let mapleader = ' '
" 把 NERDTree 原有 J/K 映射移到 gJ/gK,让 J/K 也能在目录树里快步移动
let g:NERDTreeMapJumpLastChild = 'gJ'
let g:NERDTreeMapJumpFirstChild = 'gK'
let g:NERDTreeHighlightCursorline = 0
" 仅加载 Vue 文件实际用到的预处理语言语法
let g:vue_pre_processors = 'detect_on_enter'
" 插件列表:安装到当前用户的 ~/.vim/plugged
if filereadable(expand('~/.vim/autoload/plug.vim'))
call plug#begin('~/.vim/plugged')
" 文件树与文件树中的 Git 状态
Plug 'preservim/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'
" 搜索文件和项目内容;vim-ripgrep 需要系统中的 rg 命令
Plug 'ctrlpvim/ctrlp.vim'
Plug 'jremmen/vim-ripgrep'
" 注释、括号/引号操作、重复操作、自动补全括号
Plug 'tpope/vim-commentary'
Plug 'tpope/vim-surround'
Plug 'tpope/vim-repeat'
Plug 'jiangmiao/auto-pairs'
" 撤销历史树
Plug 'mbbill/undotree'
" 状态栏和 Git 集成
Plug 'vim-airline/vim-airline'
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
" Vue 单文件组件和 JavaScript 语法高亮
Plug 'pangloss/vim-javascript'
Plug 'posva/vim-vue'
" 配色主题
Plug 'morhetz/gruvbox'
call plug#end()
else
echohl WarningMsg
echom '未找到 vim-plug:请先安装 ~/.vim/autoload/plug.vim'
echohl None
endif
" 基本界面
syntax on
filetype plugin indent on
set number
set nocursorline
set showcmd
set ruler
set laststatus=2
set signcolumn=yes
set scrolloff=3
set splitbelow
set splitright
set wildmenu
set hidden
set backspace=indent,eol,start
set updatetime=500
" 不生成 Vim swap 文件;崩溃时不能通过 swap 恢复未保存内容
set noswapfile
" 搜索:默认忽略大小写,搜索词包含大写时区分大小写
set ignorecase
set smartcase
set incsearch
set hlsearch
" 默认四空格缩进;Makefile 命令需要真正的 Tab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set autoindent
augroup user_filetypes
autocmd!
autocmd FileType make setlocal noexpandtab softtabstop=0
augroup END
" 普通模式:大写 J/K 分别向下/上移动三行
nnoremap <silent> J 3j
nnoremap <silent> K 3k
" 保留 Vim 原本的 J(合并行)和 K(关键字帮助)
nnoremap <silent> <leader>j J
nnoremap <silent> <leader>k K
" NERDTree
let g:NERDTreeShowHidden = 1
let g:NERDTreeWinSize = 30
" 避免某些主题没有 Method 高亮组时,Git 扩展产生颜色错误
let g:NERDTreeGitStatusHighlightingCustom = {
\ 'Clean': 'ctermfg=Green guifg=#b8bb26',
\ }
nnoremap <silent> <C-n> :NERDTreeToggle<CR>
nnoremap <silent> <leader>e :NERDTreeFind<CR>
" 不带文件参数启动 Vim 时自动打开目录树;插件未安装时跳过
augroup user_nerdtree_startup
autocmd!
autocmd VimEnter * if argc() == 0 && exists(':NERDTree') == 2 | NERDTree | endif
augroup END
" CtrlP:Ctrl+p 搜索文件;不搜索这些常见大型目录
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlP'
let g:ctrlp_working_path_mode = 'ra'
let g:ctrlp_custom_ignore = {
\ 'dir': '\v[\/](\.git|node_modules|__pycache__)$',
\ }
" 不需要 Powerline/Nerd Font 字体
let g:airline_powerline_fonts = 0
" 空格是 Leader:切换括号补全、搜索缓冲区、Git、清除高亮、搜索内容、撤销树
nnoremap <silent> <leader>a :call AutoPairsToggle()<CR>
nnoremap <silent> <leader>b :CtrlPBuffer<CR>
nnoremap <silent> <leader>g :Git<CR>
nnoremap <silent> <leader>h :nohlsearch<CR>
nnoremap <leader>r :Rg<Space>
nnoremap <silent> <leader>u :UndotreeToggle<CR>
" 主题插件未安装时沿用默认配色
set background=dark
if !empty(globpath(&runtimepath, 'colors/gruvbox.vim'))
colorscheme gruvbox
endif
