2025.06.14 Linux 陋技分享

Linux界的瑞士军刀之Vim

Linux界的瑞士军刀之Vim
VIM 拓展指南
VIM
拓展完全指南
-- NORMAL --

快捷键速查、插件推荐与配置参考。
掌握 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'
Neovim模糊查找必装
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'
Neovim语法高亮
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'
NeovimLSP必装
07

配置参考

~/.vimrc — 基础配置
" === 基础设置 ===
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
~/.config/nvim/init.lua — Neovim Lua 配置
-- === 基础选项 ===
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>")