怎样从vim和neovim中的多个寄存器复制和粘贴?

在本文中,我们将讨论怎样有效地从 vim/noevim 中的多个寄存器复制和粘贴。 本文适用于了解 vim 基本命令的 vim 用户。 本文解释了复制和粘贴命令的基本概念、带有示例的寄存器,还讨论了我们怎样添加键绑定以更快地从/向寄存器复制粘贴。

目录

VIM 中的剪切、复制和粘贴是什么?

Vim 不提供剪切和复制功能。 相反,Vim 提供了 yank(y)、delete(d)。 Yank 与 copy 命令同义,delete 命令在功能上类似于 cut 命令。 复制和粘贴的工作方式没有什么有趣的——复制命令将文本的选定部分保存在名为 register 的命名内存位置(不要与 CPU 中的寄存器混淆)。 您现在可以将文本粘贴到文档中的其他位置,也可以粘贴到另一个文档中。

vim 复制粘贴有什么特别之处?

Vim 很特别,所以在 vim 中进行 yank 和 paste 操作也是很特别的。 与许多其他编辑器不同,vim 提供了自己的一组寄存器。 大多数文本编辑器仅依靠操作系统维护的寄存器来进行复制和粘贴操作。

这可能会在某个时间点变得势不可挡,您需要一次从多个来源复制/剪切。 在普通的文本编辑器中,您必须复制并粘贴单个选择,然后继续进行下一个选择。 多么无效!!!

Vim 是编辑之神,让您可以更高效、更防错地复制粘贴,而不会遇到任何麻烦。 但是为了达到这一点,我们需要更多关于 vim 必须提供的寄存器的知识。

了解VIM中的多个寄存器

尽管 vim 提供了大量寄存器(每个都有自己的特殊用途),但我们对几个重要的寄存器感兴趣,我们将在这里讨论。

  1. 无名登记册:Vim 通常不会与操作系统寄存器交互以进行 yanking 或删除。 您在不提及寄存器的情况下猛拉或删除的所有内容(例如:x/X、d/D、y/yy)都存储在未命名的寄存器中。
  2. 编号寄存器: Vim 提供了从 0 到 9 的编号寄存器。这些寄存器也有特殊用途
    • 数字 0 – 存储最后一次猛拉的内容
    • 数字 1 – 存储上次删除的内容
    • 编号 2-9 – 按相应顺序存储先前删除的内容
  3. 字母表寄存器: Vim 提供了由小写字母 (az) 表示的寄存器,专门供我们自己使用。 这个寄存器有一个特殊的可选属性——我们可以在必要时附加(而不是替换)寄存器中的文本。

除了这些 vim 特定的寄存器之外,您还可以使用系统寄存器在 vim 之外记录文本。 有两个系统寄存器:

  • + :这是默认的系统剪贴板。 我们使用 Ctrl+Shift+C 将内容从剪贴板粘贴到 shell。
  • * : 该寄存器存储系统中当前选择的项目。 我们通常使用 Ctrl+Shift+s 将“选择”剪贴板的内容粘贴到 shell。

怎样从 VIM 中的多个寄存器复制和粘贴?

以下是 vim 中的一些命令以及怎样将它们与多个寄存器一起使用的示例。

1. 在 VIM 中跳转到多个寄存器

:["x]y

(y)ank 命令将选定的文本拉(复制)到寄存器 x(如果指定)中,否则它会被拉到未命名的寄存器中。

例子:

# Yank the selected text into the unnamed(default) register
:y

# Yank into register a
:"ay

# Yank into the system clipboard
:"+y

2.从VIM中的多个寄存器粘贴

:["x]p

(p)paste 命令从寄存器 x 粘贴文本(如果指定),否则从未命名的寄存器粘贴。

# paste from the unnamed register
:p

# paste from register a
:"ay

# Paste from the system clipboard
:"+y

专业提示:您可以通过使用大写字母进行猛拉来附加到字母表寄存器。 例子:

# Yank and replace the current text in register a
:"ay

# Yank and append to the current text in register a
:"Ay

注意:vim 集成寄存器适用于在同一个 vim 进程下打开的缓冲区。 对于两个不同的 vim 进程,寄存器不会同时更新。 对于两个不同的 vim 进程之间的复制粘贴,系统剪贴板是最佳选择。

自定义 VIM 以提高生产力

Vim 提供了大量的功能,老实说没有人同时使用所有这些功能。 此外,从/向注册复制粘贴有点复杂。 为了解决这个问题,你可以为你经常使用的命令设置自定义 vim 快捷方式。 以下是一些建议的键重新映射,可以帮助您更快地复制粘贴

" Set a key-mapping for copy and pasting to the system clipboard
:vnoremap <Leader>y "+y
:nnoremap <Leader>p "+p

" Set key-mapping for dealing with two alphabetical registers easily
" Two does the work for me, you can set more

:vnoremap <Leader>a "ay
:vnoremap <Leader>A "Ay
:nnoremap <Leader>a "ap

:vnoremap <Leader>x "xy
:vnoremap <Leader>X "Xy
:nnoremap <Leader>x "xp

您可以将类似的键映射添加到您的 .vimrc 或 init.vim 以获得流畅和更快的复制粘贴体验。

结论

我希望你从这篇文章中学到了一些关于 vim 中复制粘贴和寄存器的新知识。 在 vim 中总是有更多新命令和组合需要学习,但本文应该作为您日常编码/文本编辑的良好起点。 如果您需要更多帮助,您可以随时按 :h 参考内置手册 [search-term]. 如果您喜欢这篇文章,请继续关注有关 vim 的更多此类文章。