vim 寄存器

前言

从2020年的vim笔记中摘选出来单独做内容的说明;

理解 vim 寄存器

在以前的笔记中只提到一点点,这里多做一些说明。 vim 不使用单一的剪贴板进行剪切、复制与粘贴操作,而是为这些操作提供了多组寄存器。当使用删除、复制与粘贴命令时,可以明确指定某一个进行操作. vim 的删除、复制与粘贴命令都会用到众多寄存器中的某一个。可以通过给命令加"{register} 前缀的方式指定要用的寄存器。若不指明,vim 将缺省使用无名寄存器。

看一些引用寄存器的例子,如果想把当前单词复制到寄存器 a 中,可执行 "ayiw;或者可以用 "bdd,把当前整行文本剪切至寄存器 b 中。在此之后,既可以输入 "ap 粘贴来自寄存器 a 的单词,也可使用 "bp 命令粘贴来自寄存器 b 的一整行文本,两者互不干扰。

寄存器速查表

类型 标识 说明
无名寄存器 " 最近一次复制、删除或修改操作默认使用的寄存器。
复制专用寄存器 0 最近一次 yank 的内容;不会被普通删除覆盖。
数字寄存器 19 最近几次删除内容,类似一个删除历史队列。
小删除寄存器 - 最近一次行内删除内容。
有名寄存器 azAZ 小写覆盖,大写追加;适合临时保存多段文本。
只读寄存器 :.% 分别表示最近一次命令、最近插入文本、当前文件名。
交替文件寄存器 # 大多数情况下是当前窗口上一次访问的缓冲区。
表达式寄存器 = 输入 VimL 表达式,返回值会插入当前位置。
系统剪贴板 +* 与系统剪贴板 / 选择缓冲区交互。
黑洞寄存器 _ 删除但不保存内容,例如 "_dd
搜索寄存器 / 最近一次搜索模式。

复制专用寄存器(")

当使用 y{motion}命令时,要复制的文本不仅会被拷贝到无名寄存器中,而且也被拷贝到了复制专用寄存器中,后者可用数字 0 加以引用。 复制专用寄存器,顾名思义,仅当使用 y{motion}命令时才会被赋值。换句话讲,使用 x、s、c{ motion}以及 d motion}命令均不会覆盖该寄存器。如果复制了些文本,可以确信该文本会一直保存于寄存器 0 中,直到复制其他文本时才会被覆盖。复制专用寄存器是稳定的,而无名寄存器是易变的.

有名寄存器("a-"z)

vim 提供了组以 26 个英文字母,命名的有名寄存器。这意味着我们可以剪切("ad{motion})、复制("ay{motion})或者粘贴("ap)多达 26 段文本。 用小写字母引用有名寄存器,会覆盖该寄存器的原有内容,而换用大写字母的话,则会将新内容添加到该寄存器的原有内容之后。

系统剪贴板(“+)与选择专用寄存器(”*)

当然,这个在windows/Linux里用的是比较多的,在mac上直接cmd+v就好了,没那么费事。如果想从 vim 复制文本到外部程序(反之亦然),则必须使用系统剪贴板. 如果在外部程序中用剪切或复制命令获取了文本,就可以通过"+p 命令(或在插入模式下用ctrl-r +)将其粘贴到 vim 内部。相反地,如果在 vim 的复制或删除命令之前加入相应的文本将被捕获至系统剪贴板。

表达式寄存器("=)

vim 的寄存器通常被认为是保存一段文本的容器。然而,通过=号引用的表达式寄存器却是个例外。当从表达式寄存器获取内容时,vim 将跳到命令行模式,并显示提示符“=”。这时,我们可以输入一段 vim 脚本表达式并按Enter执行,如果返回的是字符串(或者可被强制转换成字符串的数据), vim 将会使用它。

参考

[1] Vim 7.2
[2] Practice Vim
[3] 感受Vim的强大:进阶技巧

3d打印 ai辅助设计 algorithms apriltag axis-angle bang-bang blender bode cadquery calibration camera calibration chrome cmake cmakelists cnn colcon conan control cpp cpu d435i data_struct db design-pattern dots economics eigen factory-pattern fcpx fiducial marker figure finance forge fov freecad gazebo gdb git gnu ibus interest isaac gym isaac lab isaaclab kdl latent variable latex launch learning-notes legged locomotion legged robotics legged-robot life linux linux-kernel mac math matlab matrix memory mlp money motion-control motor moveit mpc mujoco network ocs2 ode openscad operator optimal algorithm optimal-control perf performance personal-finance ppo privileged learning profiling python qos quadrotor realsense reinforcement learning representation learning reward tuning rnn robot robotics ros ros2 rtb security shell sim-to-real simulation socket stairs stl tcp-ip teacher policy thread tools twist ubuntu uml unitree urdf vae valgrind vcxsrv velocity vim web wifi work wsl 中文输入 交叉编译 依赖管理 分支管理 四足机器人 实验诊断 强化学习 机器人 机器人控制 机器人视觉 构建系统 深度学习 深度相机 点云 版本控制 神经网络 自主回充 视觉定位 训练曲线 输入法 配置类 飞控
知识共享许可协议