📜  Vim-寄存器(1)

📅  最后修改于: 2023-12-03 15:35:36.098000             🧑  作者: Mango

Vim 寄存器

在 Vim 编辑器中,寄存器是一种临时存储数据的方式。Vim 包含多种寄存器,每种寄存器都有其特定的用途。程序员可以使用寄存器来存储和管理文本,实现更高效的编辑操作。

1. 寄存器类型

Vim 寄存器可以分为以下几类:

  • 匿名寄存器,也称为默认寄存器,使用 "" 表示。
  • 数字寄存器,使用 09 的数字来表示,其中 0 表示最近一次删除或修改的文本。
  • 小写字母寄存器,使用小写字母 az 表示,主要用于手动复制和粘贴文本。
  • 大写字母寄存器,使用大写字母 AZ 表示,主要用于自动复制和粘贴文本。
  • 黑洞寄存器,使用 _ 表示,表示永久删除文本,不进行任何保存。
  • 选择寄存器,使用 * 表示,表示当前系统剪贴板中的内容。
  • 行内寄存器,使用 . 表示,表示当前所在行的文本。
2. 寄存器的使用
2.1 复制与黏贴

程序员可以使用默认的 "" 寄存器来执行 Vim 的标准复制和粘贴操作,可以使用 y 命令复制文本,并使用 p 命令将其黏贴到编辑器中。

yy    " 复制当前行
5yy   " 复制从当前行开始的5行
p     " 将剪贴板中的内容黏贴到当前光标之后
P     " 将剪贴板中的内容黏贴到当前光标之前

除了使用默认寄存器外,还可以使用其他寄存器来复制和粘贴文本。例如,使用小写字母寄存器 a 将文本复制到寄存器中,使用大写字母寄存器 A 将文本追加到寄存器中。

" 复制文本到寄存器 a
" 首先使用 `qa` 开始录制宏,用来便捷地复制一行文本
qa    " 开始录制宏
yy    " 复制当前行
q     " 停止录制宏

" 在其他位置使用寄存器 a 中的内容
" 使用 `"ap` 命令将寄存器 a 中的文本黏贴到光标所在位置
" 该命令中的 `"` 符号用来表示复制和黏贴操作使用的寄存器
" a 则表示使用寄存器 a 中的内容
" `p` 命令用来黏贴寄存器中的文本
" 如果使用 `"A` 命令,则会将文本追加到当前行的末尾
" 如果使用 `"aP` 命令,则会将文本黏贴到当前行的起始位置
" 如果在空行中使用该命令,则会将文本黏贴到新的一行中
"aP
2.2 删除及其恢复

使用 Vim 编辑器时,经常需要删除文本。默认情况下,删除的文本会保存在数字寄存器 0 中,可以使用 " 寄存器来删除文本,并使用 p 命令将其黏贴到编辑器中。

" 删除文本并保存到默认寄存器中
" 使用 `d` 命令删除文本
" 如果需要删除一整行,则可以使用 `dd` 命令
" 如果需要删除多行,则使用 `5dd` 命令(其中的数字可以替换成其他的数字)
" 删除后的文本会存储在数字寄存器 `0` 中
dd    " 删除当前行并保存到寄存器中
5dd   " 删除当前行及其下面的5行并保存到寄存器中

" 使用 `"0p` 命令将寄存器 `0` 中的文本黏贴到光标所在位置
" 同样,可以使用 `{register}p` 命令将其他寄存器中的文本黏贴到编辑器中
" 如果想将寄存器中的文本追加到当前行的末尾,则可以使用 `"0P` 命令
" `p` 命令用来黏贴寄存器中的文本
" `P` 命令用来将寄存器中的文本插入到当前行的前面
" `"0p`
2.3 宏

使用 Vim 的宏功能可以记录和重复一组编辑操作,简化大量重复性工作。宏可以使用 Vim 的寄存器来记录,并可以使用 @ 命令来执行。

" 宏常常用于批量操作文本
" 可以使用 `qa` 开始录制宏,使用 `q` 停止录制宏
" 然后使用 `@a` 命令来执行该宏
" 如果要对多行执行该宏,则可以使用 `:normal @a` 命令

" 例如,可以使用以下宏将 Java 代码中的 getter 和 setter 方法简化
" 注:该宏假设getter和setter方法都是以 getXXX 和 setXXX 命名的
" 首先,将光标移动到第一个 getter 方法的第一行
qa                       " 开始录制宏到寄存器 a 中
jj                       " 移动到下一个方法的第一行
0                        " 将光标移动到行首
"gd                      " 使用该命令会让 Vim 调到定义变量的位置,但不会执行跳转(由于某些原因,这里就不使用)
" 同时按下 `*` 键,然后按 `n` 键,用于高亮当前光标所在的单词
" 然后可以使用 `:s` 命令快速替换单词
:s/get/set/g<CR>         " 将当前单词的 get 前缀替换为 set
" `g<CR>` 中的 `g` 选项用于替换全局的字符串(如果没有该选项,则只替换当前行的第一个出现的字符串)
" 如果要替换setter方法中的XXX,可以使用以下命令:
:s/_/ /g<CR>
:s/ _\(.\)/\U\1/g<CR>
" 此时,getter方法转换为了如下形式
" public int getX() { return this.x; }
" 转换后的setter方法如下
" public void setX(int x) { this.x = x; }
" 然后可以使用 `j` 命令继续移动到下一个方法
q                        " 停止录制宏
3. 寄存器的其他用途
3.1 执行外部命令

使用 :! 命令可以在 Vim 编辑器中执行外部命令。可以使用 * 寄存器将当前选中的文本作为参数传递给外部命令。

" 将当前文件保存到磁盘中,并使用其他程序打开它
"w<CR>
:!open % &<CR>       " 打开当前文件
" `%` 符号用于表示当前文件的路径
" `&` 符号用于表示后台执行该命令
3.2 缓存寄存器

缓存寄存器使用 " 符号和大写字母 B 表示,主要用于存储 Vim 编辑器的内部状态信息。可以使用该寄存器导出和导入 Vim 编辑器的用户界面布局。

" 导出 Vim 编辑器的布局到缓存寄存器
"Bw    " 将编辑器中的布局信息保存到缓存寄存器中

" 导入 Vim 编辑器中的布局到当前编辑器
"Br    " 将缓存寄存器中的信息导入到当前编辑器中
4. 线上资源