随机
Enter 搜索 ↑↓ 切换 Esc 清空

vim

命令

Vim 文本编辑器配置与技巧

vim

Vim 文本编辑器配置与技巧

补充说明

Vim 是高度可配置的文本编辑器,以其高效的键盘操作和强大的文本处理能力著称。本文档涵盖常用配置、快捷键和实用技巧。

基本配置

" ~/.vimrc 示例

" 基础设置
set nocompatible              " 关闭 vi 兼容模式
set encoding=utf-8             " 设置编码
set fileencoding=utf-8         " 文件编码
set fileencodings=utf-8,gbk   " 自动识别编码
set termencoding=utf-8

" 行号和显示
set number                    " 显示行号
set relativenumber             " 显示相对行号
set cursorline                " 高亮当前行
set cursorcolumn              " 高亮当前列
set showmatch                 " 高亮匹配括号
set matchtime=2               " 匹配高亮时间

" 缩进
set tabstop=4                 " Tab 宽度
set softtabstop=4             " 软 Tab 宽度
set shiftwidth=4              " 缩进宽度
set expandtab                 " 使用空格代替 Tab
set autoindent                " 自动缩进
set smartindent               " 智能缩进

" 搜索
set incsearch                 " 增量搜索
set hlsearch                  " 高亮搜索结果
set ignorecase                " 忽略大小写
set smartcase                 " 智能大小写

" 杂项
set wildmenu                  " 命令行补全
set wildmode=list:longest,full
set hidden                    " 允许隐藏未保存缓冲区
set backup                    " 备份文件
set writebackup               " 写入前备份
set undofile                  " 持久撤销
set clipboard=unnamed         " 系统剪贴板
set mouse=a                   " 鼠标支持
set ttyfast                   " 快速终端
set showcmd                   " 显示命令
set laststatus=2              " 始终显示状态栏

插件管理

" vim-plug 配置
" 在 ~/.vimrc 中添加:
"
" call plug#begin('~/.vim/plugged')
" Plug 'tpope/vim-sensible'      " 基础配置
" Plug 'scrooloose/nerdtree'     " 文件树
" Plug 'ctrlpvim/ctrlp.vim'      " 文件搜索
" Plug 'vim-airline/vim-airline' " 状态栏
" Plug 'tpope/vim-fugitive'      " Git
" Plug 'tpope/vim-surround'      " 环绕符号
" Plug 'tpope/vim-commentary'    " 注释
" Plug 'leafgarland/typescript-vim' " TypeScript
" call plug#end()

" 安装插件命令
" vim +PlugInstall +qall

常用快捷键

" 模式切换
i           " 插入模式
a           " 在光标后插入
A           " 在行尾插入
I           " 在行首插入
o           " 在下行插入
O           " 在上行插入
s           " 删除光标字符并插入
S           " 删除整行并插入
Esc         " 返回普通模式
Ctrl+[      " 替代 Esc

" 移动(普通模式)
h j k l     " 左下上右
w            " 下一个词首
b            " 上一个词首
e            " 下一个词尾
ge           " 上一个词尾
0            " 行首
^            " 行首非空
$            " 行尾
gg           " 文件首
G            " 文件尾
:N           " 跳转到第 N 行

" 屏幕移动
H M L        " 屏幕顶部/中部/底部
Ctrl+d       " 下翻半屏
Ctrl+u       " 上翻半屏
Ctrl+f       " 下翻整屏
Ctrl+b       " 上翻整屏
zt           " 当前行置顶
zz           " 当前行居中
zb           " 当前行置底

" 跳转
%            " 跳转到匹配括号
[{           " 跳转到上一个 {
]}           " 跳转到下一个 {
]]           " 跳转到下一个 {
[[           " 跳转到上一个 {
*            " 搜索当前词并跳转
#            " 反向搜索当前词
'            " 跳转到标记
`.           " 跳转到上次编辑位置
g;           " 跳转到修改位置历史

编辑命令

" 删除
x            " 删除光标字符
dd           " 删除整行
dw           " 删除词
d$           " 删除到行尾
d0           " 删除到行首
D            " 删除到行尾
:5,10d       " 删除第 5-10 行

" 复制粘贴
yy           " 复制整行
yw           " 复制词
y$           " 复制到行尾
p            " 粘贴到光标后
P            " 粘贴到光标前

" 撤销重做
u            " 撤销
Ctrl+r       " 重做
U            " 撤销整行
.            " 重复上次命令

" 替换
r            " 替换单个字符
R            " 替换模式
~            " 大小写切换
guu          " 整行小写
gUU          " 整行大写
g~~          " 翻转大小写

" 缩进
>>           " 右缩进
<<           " 左缩进
==           " 自动缩进
5>>          " 右缩进 5 行
5<<          " 左缩进 5 行

高级编辑

" 块操作
Ctrl+v       " 进入可视块模式
v            " 进入可视模式
V            " 进入可视行模式
o            " 跳转块端点
O            " 跳转块另一端

" 可视模式操作
d            " 删除选中
y            " 复制选中
c            " 替换选中
g Ctrl+a     " 数字递增
g Ctrl+x     " 数字递减
>            " 右缩进
<            " 左缩进

" 多光标编辑(配合插件)
" :set mouse=n   " 鼠标支持
" Shift+右键拖动 " 列选择
" Ctrl+右键拖动 " 列块选择

" 寄存器
"1-9          " 删除寄存器
"0            " 复制寄存器
"a-z          " 命名寄存器
":            " 命令寄存器
".            " 最近插入文本

" 宏
qa           " 开始录制宏到寄存器 a
q            " 停止录制
@a           " 执行宏
@@           " 重复上次宏
10@a         " 执行 10 次宏

搜索与替换

" 基本搜索
/pattern     " 向下搜索
?pattern     " 向上搜索
n            " 下一个匹配
N            " 上一个匹配
:vim /pat/g file   " 搜索并列出
:vim /pat/ **/*.txt " 搜索文件

" 替换
:s/old/new/              " 替换第一个
:s/old/new/g             " 替换行内所有
:%s/old/new/g            " 替换文件中所有
:%s/old/new/gc           " 确认替换
:%s/old/new/gci          " 忽略大小写确认

" 正则替换
:%s/\(\d\{4\}\)-\(\d\{2\}\)-\(\d\{2\}\)/\3\/\2\/\1/g
" 2024-01-15 -> 15\/01\/2024

" 使用历史
q/             " 打开搜索历史
q:             " 打开命令历史
/ <Up>         " 浏览搜索历史

窗口与标签页

" 分割窗口
:sp file      " 水平分割
:vsp file     " 垂直分割
Ctrl+w s      " 水平分割当前文件
Ctrl+w v      " 垂直分割当前文件

" 关闭窗口
:q            " 关闭窗口
:qa           " 退出所有
Ctrl+w c      " 关闭当前窗口
Ctrl+w o      " 只保留当前窗口

" 窗口导航
Ctrl+w h/j/k/l  " 导航窗口
Ctrl+w w       " 循环窗口
Ctrl+w r       " 交换窗口
Ctrl+w x       " 交换窗口

" 窗口大小
Ctrl+w =       " 等分窗口
Ctrl+w _       " 最大化高度
Ctrl+w |       " 最大化宽度
:resize 20     " 设置高度
:vertical resize 80 " 设置宽度

" 标签页
:tabnew       " 新建标签页
gt            " 下一个标签
gT            " 上一个标签
:tabfirst     " 第一个标签
:tablast      " 最后一个标签
:tabm 0       " 移动到第一个
Ngt           " 跳转到第 N 个标签

文件操作

" 打开保存
:e file       " 打开文件
:e .          " 文件浏览器
:ene          " 新建未命名缓冲区
:w            " 保存
:w file       " 另存为
:wa           " 保存所有
:q            " 退出
:qa!          " 强制退出(不保存)
:x            " 保存并退出

" 文件浏览器
:Explore      " 打开目录
:SExplore     " 水平分割打开目录
:VExplore     " 垂直分割打开目录
:Lexplore     " 侧边栏文件树

" 文件树插件
:NERDTree     " 打开文件树
:NERDTreeToggle " 切换文件树
m             " 菜单操作

Git 集成

" vim-fugitive
:Gstatus      " Git 状态
:Gcommit      " Git 提交
:Gpush        " Git 推送
:Gpull        " Git 拉取
:Gdiff        " Git 差异
:Gsdiff       " 水平分割差异
:Glog         " Git 历史
:Gblame       " Git 责备

" 快捷映射
nnoremap <leader>gs :Gstatus<CR>
nnoremap <leader>gc :Gcommit<CR>
nnoremap <leader>gp :Gpush<CR>
nnoremap <leader>gl :Glog<CR>

自定义映射

" .vimrc 中添加映射
let mapleader = " "

" 空格键保存
nnoremap <Space> :w<CR>

" 方向键调整窗口
nnoremap <Up> :resize +2<CR>
nnoremap <Down> :resize -2<CR>
nnoremap <Left> :vertical resize -2<CR>
nnoremap <Right> :vertical resize +2<CR>

" 快速注释
nnoremap <leader>c/ :s/^/\/\/ /<CR>
vnoremap <leader>c/ :s/^\/\/ //<CR>

" 切换行号显示
nnoremap <leader>n :set number!<CR>

常用命令

# 启动 Vim
vim file.txt
vim +10 file.txt           # 打开并跳转到第 10 行
vim +/pattern file.txt     # 打开并搜索模式
vim -o file1 file2         # 水平分割打开
vim -O file1 file2         " 垂直分割打开
vim -p file1 file2         # 多标签打开

# 从命令行编辑
vim -c "normal G" file.txt  # 执行命令后编辑
vim -c "wq" file.txt        # 保存退出

# 批量处理
for f in *.txt; do vim -c ":%s/old/new/g" -c "wq" $f; done

# 格式化
vim +"normal gg=G" +"wq" file.c

# 只读模式
vim -R file.txt
view file.txt