Vim
Vim 是每台 UNIX 系统上安装的通用文本编辑器。Neovim 不断创新,而 Vim 则专注于向后兼容性和稳定性。
使用场景
- 通用服务器和系统编辑:在任何 Unix/Linux 服务器上编辑系统配置、脚本和代码,无需安装附加软件。
- 模式化文本操作:使用操作符-移动语法(
dap、ci"、gUiw)组合文本变换。 - 无头宏自动化:录制并重放跨上百行的重复编辑操作(
qa、@a)。 - Git 提交和合并编辑:快速交互式编辑提交信息、交互式变基和差异冲突解决。
快速开始
1. 最小化 ~/.vimrc
syntax on
set number
set relativenumber
set tabstop=2
set shiftwidth=2
set expandtab
set hlsearch
set incsearch
set clipboard=unnamed
let mapleader = " "
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
2. 核心编辑命令
i/a:插入模式(光标前/后)ci":更改引号内的内容da{:删除花括号内的内容(含花括号):%s/foo/bar/g:将文件中所有 foo 替换为 bar.:重复上一次修改
核心概念
现代生产环境 Vimrc(~/.vimrc)
配置合理的默认设置、插件管理器以及代码导航:
" ~/.vimrc
set nocompatible
filetype plugin indent on
syntax on
" 通用设置
set number
set relativenumber
set expandtab
set shiftwidth = 2
set tabstop = 2
set autoindent
set smartindent
set hlsearch
set incsearch
set ignorecase
set smartcase
set hidden
set backspace=indent,eol,start
set updatetime=300
set clipboard=unnamed
" 领导键映射
let mapleader = " "
" 快速窗口导航
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" 清除搜索高亮
nnoremap <leader>h :nohlsearch<CR>
关键文本对象与语法
组合操作符(d、c、y、v)与文本对象和移动:
ci" - 更改双引号内的内容("foo" -> "")
di( - 删除括号内的内容
yap - 复制(拷贝)段落
gUiw - 将当前单词转换为大写
dt, - 从光标位置删除直到逗号(不含逗号)
. - 立即重复上一次修改
宏录制与执行
自动执行重复的表格数据转换:
1. 按 `qa` 开始录制宏到寄存器 'a'
2. 执行文本编辑步骤(例如 `0iconst <Esc>A = true;<Esc>j`)
3. 按 `q` 完成录制
4. 在当前行重放宏:`@a`
5. 跨 50 行重放宏:`50@a`
6. 在可视选择上执行宏:`:'<,'>normal @a`
常见模式
宏录制与批量执行
问题:对多行执行重复的多步编辑。
解决方案:将按键序列录制到寄存器 q。
- 将光标置于目标起始位置。
- 按
qq开始录制到寄存器q。 - 执行编辑序列(例如
I" <Esc> A",<Esc> j ^)。 - 按
q停止录制。 - 使用
@q重放,或在 50 行上执行:50@q。
使用 vim-plug 进行插件管理
问题:安装和组织 Vim 插件而无需手动处理路径。
解决方案:使用 vim-plug。
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-sensible'
Plug 'tpope/vim-fugitive'
Plug 'preservim/nerdtree'
call plug#end()
在 Vim 内运行 :PlugInstall 进行安装。
最佳实践(2026)
- 务必掌握模式导航(
h、j、k、l、w、b、e)并避免使用方向键。 - 务必利用文本对象(
ciw、da(、yi{)以最少的按键次数编辑结构化代码块。 - 务必使用点命令(
.)跨相似行重复最近的文本转换。 - 务必启用
set hidden,以便缓冲区可以在后台保持打开状态,无需强制立即保存。 - 不要安装数百个沉重的旧版 VimScript 插件;如需丰富的 IDE 体验,请过渡到 Neovim Lua。
- 不要留下交换文件(
.swp);配置set noswapfile或设置专用交换目录。 - 不要在
~/.vimrc中使用同步外部调用,这会导致远程机器上出现明显的启动延迟。
故障排除
| 错误/症状 | 原因 | 解决方案 |
|---|---|---|
系统剪贴板复制失败("+y无反应) | Vim 编译时未启用 +clipboard支持 | 安装带有剪贴板支持的 vim-gtk3(Ubuntu)或 macvim / neovim。 |
方向键插入 A、B、C、D 字符 | 运行在严格的 Vi 兼容模式 | 在 ~/.vimrc 顶部添加 set nocompatible。 |
| 搜索后尾部空白高亮仍然显示 | 搜索高亮保持激活状态 | 输入 :nohlsearch 或绑定 <leader>h :nohlsearch<CR>。 |