标签
note
vim
字数
1108 字
阅读时间
5 分钟
本笔记部分内容参考自 Learn-Vim_zh_cn
核心概念
宏 (Macro)
宏可以录制并回放一系列操作,是实现重复性任务自动化的利器。
qa: 开始录制宏,并存入寄存器a。q(在录制中): 停止录制。@a: 执行寄存器a中存储的宏。@@: 重复执行上一次执行的宏。
示例: 将多行文本转换为大写。
hello
vim
macros
are
awesome将光标置于 "hello" 行首,执行以下操作:
qa: 开始录制宏到寄存器a。0: 移动到行首。gU$: 将从光标到行尾的字符转换为大写。j: 移动到下一行。q: 停止录制。
现在,你可以通过 @a 来对下一行执行同样的操作。使用 3@a 可以连续执行 3 次。
寄存器 (Register)
Vim 使用寄存器来存储文本。例如,当你删除(d)或复制(y)文本时,内容会被存入寄存器。
- 数字寄存器 (
"1-"9): Vim 会将被删除的文本存入数字寄存器。"1存储最近一次删除的内容,"2存储上上次的,以此类推。你可以使用"1p来粘贴寄存器1的内容。
移动光标 (Motion)
(/): 跳转到上/下一个 句子。{/}: 跳转到上/下一个 段落。
编辑操作
删除
- 删除行范围:
:[start],[end]d:1,5d删除第 1 到 5 行。:%d删除所有行。
- 删除对象:
d+i/a+objecti(inner): 操作对象的内部。a(around): 操作对象的外部(包含周围的括号或空白)。- 示例 (光标在
(hello Vim)内部):di(: 删除hello Vim,保留括号().da(: 删除hello Vim和括号().dit: 删除 HTML/XML 标签内部的内容。
- 删除到指定字符:
df.删除从当前光标到该行第一个.字符(包括.)之间的所有内容。
切换到插入模式
i: 在光标 前 插入。a: 在光标 后 追加。I: 在当前行第一个非空字符 前 插入。A: 在当前行 末尾 追加。o: 在当前行 下方 新建一行并进入插入模式。O: 在当前行 上方 新建一行并进入插入模式。s: 删除当前字符并进入插入模式。S: 删除当前行并进入插入模式。
实用技巧
- 清空文件内容: 在普通模式下,
ggdG。 - 当前行转大写:
gUgU或V~。 d1j的理解:d1j或dj并非只删除下一行,而是删除 当前行和下一行。Vim 的操作通常是[operator][count][motion],dj的j是向下移动一行,所以操作范围是当前行和下一行。- 跳出括号: 在插入模式下,输入完括号内的内容后,按
Ctrl+o临时切换到普通模式,再按A即可跳到行末继续输入。
环境配置
禁用备份文件
Vim 默认会生成 .un~ (undo), ~ (backup), .swp (swap) 等文件。如果你使用 Git 等版本控制工具,可以禁用它们以保持目录整洁。
在你的 ~/.vimrc 配置文件中添加:
vim
set noundofile
set nobackup
set noswapfile如果想保留 undo 功能但统一存放文件,可以设置:
vim
set undofile
set undodir=~/.vim/undodir分屏与窗口移动
- 创建分屏:
Ctrl+W s或:sp [filename]: 上下分割。Ctrl+W v或:vsp [filename]: 左右分割。
- 在窗口间移动:
Ctrl+W h: 移动到左侧窗口。Ctrl+W j: 移动到下方窗口。Ctrl+W k: 移动到上方窗口。Ctrl+W l: 移动到右侧窗口。Ctrl+W w: 循环切换到下一个窗口。