VIM:附加到剪贴板

Rem*_*man 8 vim clipboard copy append

我知道如何复制到剪贴板,但我怎样才能附加到剪贴板?

我在我的代码中使用它
let @+ = my_expression

但是那会覆盖剪贴板.

我知道我可以使用寄存器az附加到
pe let @B = my_expression
附加到寄存器b

但是当我想要附加到剪贴板时该怎么办?

Ben*_*oit 13

使用:

let @+ = @+ . my_expression
Run Code Online (Sandbox Code Playgroud)

或更短:

let @+ .= my_expression
Run Code Online (Sandbox Code Playgroud)

参考: :help :let.=


ruf*_*fin 10

如果你不是宏观,那么也可能值得检查寄存器. :help registers真是令人兴奋.

简而言之,有26个额外的"可自定义的剪贴板",称为寄存器,您可以在其中存储文本,从开始a和经过z.通过"命名,命名寄存器(例如f),然后键入要选择文本的"运动",可以在命令模式下将文本添加到寄存器.

使用寄存器复制(光标在[T]):

初始文件状态

This is my first line.
[T]his is my second line. 
This is my third line.
Run Code Online (Sandbox Code Playgroud)

键入"fyy命令模式以使用一行(yy)填充寄存器.键入p(*见下文)以立即粘贴它.因此,键入的结果与使用默认剪贴板"fyyp键入的结果完全相同yyp.

结果

This is my first line.
This is my second line. 
[T]his is my second line. 
This is my third line.
Run Code Online (Sandbox Code Playgroud)

附加到登记册:

使用大写字母附加到您现有的注册表.在粘贴的上述示例中,按下然后按下j一行"Fyy.然后键入p粘贴.你附上了 "这是我的第三行".到f的内容.

结果

This is my first line.
This is my second line. 
This is my second line. 
This is my third line.
This is my second line. 
[T]his is my third line.
Run Code Online (Sandbox Code Playgroud)

(使用小写f会清除掉f内容并最终只保留"这是我的第三行.")

我还没有找到一种方法来附加到默认寄存器,因此你会遇到一些额外的击键来访问"命名"寄存器,但只需要做一些工作,它就是一种简单的方法可以即时附加到"剪贴板".

  • 为什么在你猛拉之后立即p粘贴什么?因为您的默认寄存器包含最后一个选择,并且显然不是简单地保存您添加的内容,而是在追加时拉出所有内容.在第一种情况下,可能更容易说,"键入的结果与使用默认剪贴板键入的结果完全相同."ffff"fyy"fpyyp