Skip to content
标签
note
vim
字数
1108 字
阅读时间
5 分钟

本笔记部分内容参考自 Learn-Vim_zh_cn

核心概念 ​

宏 (Macro) ​

宏可以录制并回放一系列操作,是实现重复性任务自动化的利器。

  • qa: 开始录制宏,并存入寄存器 a。
  • q (在录制中): 停止录制。
  • @a: 执行寄存器 a 中存储的宏。
  • @@: 重复执行上一次执行的宏。

示例: 将多行文本转换为大写。

hello
vim
macros
are
awesome

将光标置于 "hello" 行首,执行以下操作:

  1. qa: 开始录制宏到寄存器 a。
  2. 0: 移动到行首。
  3. gU$: 将从光标到行尾的字符转换为大写。
  4. j: 移动到下一行。
  5. 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 + object
    • i (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: 循环切换到下一个窗口。

参考 ​

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

用 ♥ 撰写