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
  • 当前行转大写: gUgUV~
  • d1j 的理解: d1jdj 并非只删除下一行,而是删除 当前行和下一行。Vim 的操作通常是 [operator][count][motion]djj 是向下移动一行,所以操作范围是当前行和下一行。
  • 跳出括号: 在插入模式下,输入完括号内的内容后,按 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

页面历史

撰写