2025.06.14
Linux
陋技分享
Linux界的瑞士军刀之Vim
VIM
拓展完全指南
/
01
移动 Motion
h j k l
基础移动
← ↓ ↑ → 方向键替代,保持手不离主键区
motion
w·b
单词跳转
w 跳下一词首,b 跳上一词首,e 跳词尾
motion
0·$
行首 / 行尾
0 跳行首,^ 跳第一个非空字符,$ 跳行尾
motion
gg·G
文件首尾
gg 跳文件开头,G 跳文件末尾,nG 跳第 n 行
motion
f{c}
行内搜索
f 正向找字符,F 反向,t/T 停在字符前,; 重复,, 反向
motion
%
括号匹配跳转
在 () [] {} 之间跳转,极其实用
motion
Ctrl+d·Ctrl+u
半页滚动
向下/向上滚动半页,比 PgDn 更精准
motion
*·#
词语搜索
* 向后搜索光标所在词,# 向前搜索
motion
02
操作符 Operator
d
删除 Delete
dd 删整行,dw 删词,d$ 删到行尾,d0 删到行首
operator
c
修改 Change
删除并进入插入模式,cw 改词,cc 改整行,ci" 改引号内
operator
y
复制 Yank
yy 复制整行,yw 复制词,y$ 复制到行尾
operator
p·P
粘贴 Put
p 在光标后粘贴,P 在光标前粘贴
operator
>·<
缩进
>> 右缩进,<< 左缩进,可配合数字如 3>>
operator
~
大小写切换
~ 切换单个字符,gU 转大写,gu 转小写
operator
03
文本对象 Text Objects
iw·aw
单词对象
iw = 词内,aw = 包含空格的词。如 diw 删除词
text
i"·a"
引号对象
ci" 修改双引号内容,yi' 复制单引号内容
text
i(·a(
括号对象
di( 删除括号内,da( 删含括号。支持 () [] {}
text
it·at
标签对象
针对 HTML/XML,dit 删标签内容,dat 删含标签
text
ip·ap
段落对象
ip = 段落内,ap = 包含空行的段落
text
is
句子对象
is = 句子内,as = 包含空格的句子
text
04
编辑 Editing
u·Ctrl+r
撤销 / 重做
u 撤销,Ctrl+r 重做。Vim 有完整的撤销树!
edit
.
重复操作
重复上一次修改,是 Vim 中最强大的命令之一
edit
r
替换字符
r 替换光标处单个字符,R 进入替换模式
edit
:s/a/b
搜索替换
:s/foo/bar/g 替换当行,:%s/foo/bar/g 替换全文
edit
J
合并行
将下一行合并到当前行末,自动处理空格
edit
q{a}
宏录制
qa 开始录制到寄存器 a,q 结束,@a 执行,@@ 重复
edit
05
窗口 & 导航
:sp·:vs
分割窗口
:sp 水平分割,:vs 垂直分割,Ctrl+w+w 切换
nav
Ctrl+w
窗口控制
Ctrl+w h/j/k/l 切换窗口方向,Ctrl+w q 关闭
nav
:tabnew
标签页
:tabnew 新标签,gt/gT 切换,:tabc 关闭
nav
m{a}
标记 Mark
ma 设置标记 a,\`a 跳回标记位置,\`\` 跳回上次位置
nav
Ctrl+o·Ctrl+i
跳转历史
Ctrl+o 后退到上一跳转位置,Ctrl+i 前进
nav
:b{n}
Buffer 切换
:ls 列出缓冲区,:b2 跳 buffer 2,:bn/:bp 前后切换
nav
06
插件推荐
vim-surround
★ 13.2k
tpope/vim-surround
操作文本周围的符号对。cs"' 把双引号改成单引号,ds" 删除引号,ysiw] 给词加中括号。
Plug 'tpope/vim-surround'
telescope.nvim
★ 16.8k
nvim-telescope/telescope.nvim
模糊查找神器(Neovim 专属)。文件、Buffer、Grep、Git 提交、LSP 符号,一网打尽。
Plug 'nvim-telescope/telescope.nvim'
vim-commentary
★ 5.8k
tpope/vim-commentary
gc 切换注释。gcc 注释整行,gcap 注释段落,可视模式下 gc 注释选中区域。
Plug 'tpope/vim-commentary'
nvim-treesitter
★ 11k
nvim-treesitter/nvim-treesitter
基于语法树的高亮、缩进和文本对象。让代码高亮精准到符号级别,告别正则高亮的误判。
Plug 'nvim-treesitter/nvim-treesitter'
vim-easymotion
★ 8.9k
easymotion/vim-easymotion
增强跳转,<Leader><Leader>w 高亮所有词首,输入字母直接跳。让 f/t 升维到全屏。
Plug 'easymotion/vim-easymotion'
nvim-lspconfig
★ 10.5k
neovim/nvim-lspconfig
官方 LSP 配置集合。配合 mason.nvim 一键安装语言服务器,获得 IDE 级补全、跳转、诊断。
Plug 'neovim/nvim-lspconfig'
07
配置参考
" === 基础设置 === set number relativenumber " 相对行号 set tabstop=2 shiftwidth=2 expandtab set smartindent " 智能缩进 set ignorecase smartcase " 搜索大小写智能匹配 set hlsearch incsearch " 高亮搜索结果 set clipboard=unnamedplus " 共享系统剪贴板 set scrolloff=8 " 光标距屏边距 set termguicolors " 24-bit 颜色 " === Leader 键 === let mapleader = " " " Space 作为 Leader " === 快捷键映射 === nnoremap <Esc> :nohl<CR> " Esc 清除高亮 nnoremap <leader>w :w<CR> nnoremap <leader>q :q<CR> nnoremap <C-h> <C-w>h nnoremap <C-l> <C-w>l nnoremap <C-j> <C-w>j nnoremap <C-k> <C-w>k
-- === 基础选项 === vim.opt.number = true vim.opt.relativenumber = true vim.opt.tabstop = 2 vim.opt.shiftwidth = 2 vim.opt.expandtab = true vim.opt.clipboard = "unnamedplus" vim.opt.termguicolors = true vim.opt.scrolloff = 8 -- === 插件管理器 lazy.nvim === local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" require("lazy").setup({ { "nvim-telescope/telescope.nvim" }, { "nvim-treesitter/nvim-treesitter" }, { "tpope/vim-surround" }, { "neovim/nvim-lspconfig" }, }) -- === 键位映射 === vim.g.mapleader = " " vim.keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>") vim.keymap.set("n", "<leader>fg", "<cmd>Telescope live_grep<cr>")