一文搞懂vim复制粘贴

转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/

概述

复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻烦的,有一点学习成本。本文总结了使用vim复制粘贴的典型场景和使用方法,希望对读者有帮助。

vim内部复制、粘贴、剪切

选择文本

  • v 光标移动 (按字符选择)高亮选中所要的文本,然后进行各种操作(比如,d表示删除)。
  • V (按行选择)
  • v 选中的内容 c 更改选中的文字

复制:y(ank)

  • y 用v命令选中文本后,用y进行复制
  • yy 复制当前行,然后用p进行粘贴
  • 5yy 复制从当前行开始的5行
  • y_ 等同于yy
  • Y 等同于yy
  • yw 复制当前单词
  • y$ 从当前位置复制到行尾
  • y0 从当前位置复制到行首
  • y^ 从当前位置复制到第一个非空白字符
  • yG 从当前行复制到文件结束
  • y20G 从当前行复制到第20行
  • y?bar 复制至上一个出现bar的位置

粘贴:p(aste)

  • p(小写) 在光标位置之后粘贴
  • P(大写) 在光标位置之前粘贴

剪切

  • v 方向键(hjkl)选中内容 d 剪切 p粘贴

剪贴板

默认剪贴板

vim提供12个剪贴板,它们的名字分别为vim有11个粘贴板,分别是012...9a。如果开启了系统剪贴板,则会另外多出两个: 和*。使用:reg命令,可以查看各个粘贴板里的内容。

:reg

在vim中简单用y只是复制到(双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容。

复制和粘贴到指定剪贴板

要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容,然后按'Ny完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按'ay就可以了。

要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按'Np,其中N为粘贴板号。比如,可以按'5p将5号粘贴板里的内容粘贴进来,也可以按' p将系统全局粘贴板里的内容粘贴进来。

系统剪贴板

Vim支持系统剪贴板,需要打开clipboard功能。使用下面的命令,检查当前版本的Vim,是否支持clipboard。

$ vim --version | grep 'clipboard'
-clipboard        insert_expand    path_extra       user_commands
 emacs_tags      -mouseshape       startuptime     -xterm_clipboard
root@sz ➜  ~ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 07 2019 15:35:43)

-clipboard代表不支持 clipboard代表支持。
如果不支持的话,需要安装gvim或者在编译的时候开启系统剪贴板选项。

vim复制到系统剪贴板

  • '*y
  • ' y
  • ' 2yy – 复制两行
  • {Visual}' y - copy the selected text into the system clipboard
  • ' y{motion} - copy the text specified by {motion} into the system clipboard
  • :[range]yank - copy the text specified by [range] into the system clipboard

vim剪切到系统剪贴板

  • ' dd – 剪切一行

从系统剪贴板粘贴到vim

  • '*p
  • ' p
  • Shift Insert
  • :put - Ex command puts contents of system clipboard on a new line
  • <C-r> - From insert mode (or commandline mode)

' p比 Ctrl-v 命令更好,它可以更快更可靠地处理大块文本的粘贴,也能够避免粘贴大量文本时,发生每行行首的自动缩进累积,因为Ctrl-v是通过系统缓存的stream处理,一行一行地处理粘贴的文本。

设置vim默认使用系统剪贴板

确定vim支持 clipboard后,如果想y/p直接和系统剪贴板打通,可以在~/.vimrc中加上以下配置):

set clipboard^=unnamed,unnamedplus

其中unnamed代表*寄存器,unnamedplus代表 寄存器。在mac系统中,两者都一样;一般在linux系统中 和*是不同的, 对应ctrl c,ctrl v的桌面系统剪贴板,*对应x桌面系统的剪贴板(用鼠标选择复制,用鼠标中键粘贴)。

服务器vim复制到本地剪贴板

通过ssh连接到linux服务器时,vim是跑在远程服务器的,不能使用y复制到本地的剪贴板。这时有几个方法:

cmd c

用鼠标选中文字cmd c复制(windows下ctrl c复制),cmd v粘贴到本地。这个方法是最自然的,但是想要用这个方法有几个前提:

  • vim配置中开启鼠标支持,.vimrc文件中加上
set mouse=a
  • terminal客户端关闭mouse reporting选项,否则鼠标点击vim界面会进入visual模式。参见我这篇文章解决iterm2中vim选中文字不能复制的问题
  • 如果使用tmux,tmux需要配置支持鼠标滚轮,否则最多只能复制当前页面的内容

本地vim通过scp编辑远程文件

使用本地vim通过scp直接编辑远程文件。这样就可以使用本地寄存器' y'复制了。这种方法对远程vim配置没有要求。

vim scp://remoteuser@server.com//absolute/path/to/file

注意com和absolute间是两个反斜杠//并不是敲错了。

参考链接

概述

复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻烦的,有一点学习成本。本文总结了使用vim复制粘贴的典型场景和使用方法,希望对读者有帮助。

vim内部复制、粘贴、剪切

选择文本

  • v 光标移动 (按字符选择)高亮选中所要的文本,然后进行各种操作(比如,d表示删除)。
  • V (按行选择)
  • v 选中的内容 c 更改选中的文字

复制:y(ank)

  • y 用v命令选中文本后,用y进行复制
  • yy 复制当前行,然后用p进行粘贴
  • 5yy 复制从当前行开始的5行
  • y_ 等同于yy
  • Y 等同于yy
  • yw 复制当前单词
  • y$ 从当前位置复制到行尾
  • y0 从当前位置复制到行首
  • y^ 从当前位置复制到第一个非空白字符
  • yG 从当前行复制到文件结束
  • y20G 从当前行复制到第20行
  • y?bar 复制至上一个出现bar的位置

粘贴:p(aste)

  • p(小写) 在光标位置之后粘贴
  • P(大写) 在光标位置之前粘贴

剪切

  • v 方向键(hjkl)选中内容 d 剪切 p粘贴

剪贴板

默认剪贴板

vim提供12个剪贴板,它们的名字分别为vim有11个粘贴板,分别是012...9a。如果开启了系统剪贴板,则会另外多出两个: 和*。使用:reg命令,可以查看各个粘贴板里的内容。

:reg

在vim中简单用y只是复制到(双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容。

复制和粘贴到指定剪贴板

要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容,然后按'Ny完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按'ay就可以了。

要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按'Np,其中N为粘贴板号。比如,可以按'5p将5号粘贴板里的内容粘贴进来,也可以按' p将系统全局粘贴板里的内容粘贴进来。

系统剪贴板

Vim支持系统剪贴板,需要打开clipboard功能。使用下面的命令,检查当前版本的Vim,是否支持clipboard。

$ vim --version | grep 'clipboard' -clipboard insert_expand path_extra user_commands emacs_tags -mouseshape startuptime -xterm_clipboard root@sz ➜ ~ vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 07 2019 15:35:43)

-clipboard代表不支持 clipboard代表支持。
如果不支持的话,需要安装gvim或者在编译的时候开启系统剪贴板选项。

vim复制到系统剪贴板

  • '*y
  • ' y
  • ' 2yy – 复制两行
  • {Visual}' y - copy the selected text into the system clipboard
  • ' y{motion} - copy the text specified by {motion} into the system clipboard
  • :[range]yank - copy the text specified by [range] into the system clipboard

vim剪切到系统剪贴板

  • ' dd – 剪切一行

从系统剪贴板粘贴到vim

  • '*p
  • ' p
  • Shift Insert
  • :put - Ex command puts contents of system clipboard on a new line
  • <C-r> - From insert mode (or commandline mode)

' p比 Ctrl-v 命令更好,它可以更快更可靠地处理大块文本的粘贴,也能够避免粘贴大量文本时,发生每行行首的自动缩进累积,因为Ctrl-v是通过系统缓存的stream处理,一行一行地处理粘贴的文本。

设置vim默认使用系统剪贴板

确定vim支持 clipboard后,如果想y/p直接和系统剪贴板打通,可以在~/.vimrc中加上以下配置):

set clipboard^=unnamed,unnamedplus

其中unnamed代表*寄存器,unnamedplus代表 寄存器。在mac系统中,两者都一样;一般在linux系统中 和*是不同的, 对应ctrl c,ctrl v的桌面系统剪贴板,*对应x桌面系统的剪贴板(用鼠标选择复制,用鼠标中键粘贴)。

服务器vim复制到本地剪贴板

通过ssh连接到linux服务器时,vim是跑在远程服务器的,不能使用y复制到本地的剪贴板。这时有几个方法:

cmd c

用鼠标选中文字cmd c复制(windows下ctrl c复制),cmd v粘贴到本地。这个方法是最自然的,但是想要用这个方法有几个前提:

  • vim配置中开启鼠标支持,.vimrc文件中加上
set mouse=a
  • terminal客户端关闭mouse reporting选项,否则鼠标点击vim界面会进入visual模式。参见我这篇文章解决iterm2中vim选中文字不能复制的问题
  • 如果使用tmux,tmux需要配置支持鼠标滚轮,否则最多只能复制当前页面的内容

本地vim通过scp编辑远程文件

使用本地vim通过scp直接编辑远程文件。这样就可以使用本地寄存器' y'复制了。这种方法对远程vim配置没有要求。

vim scp://remoteuser@server.com//absolute/path/to/file

注意com和absolute间是两个反斜杠//并不是敲错了。

参考链接

(0)

相关推荐

  • surfingkeys使用指南命令大全

    surfingkeys是一款类似于VIM的插件,可以让人们不使用鼠标,当然就要记住命令,那么我们对命令进行记录,来源surfingkeys帮助 在谷歌商店安装surfingkeys插件,加到拓展程序中 ...

  • 收藏!一文搞懂“顺周期”概念股!(名单)

    2020-11-17 19:01 导读 周期股近期表现抢眼,那到底什么是周期行业?为何被追捧?相关概念股有哪些? 近期热点涣散之下,"煤飞色舞钢花溅"行情再现.今日盘面上,煤炭.有 ...

  • 一文搞懂爬架如何管理

    愿    景:让天下没有难做的工程! 使    命:推动工程管理的创新和技术变革! 价 值 观:成就他人.成长自己! 宗旨目的:致力于成为工程人的知识共享平台,让沟通无障碍.让学习更快捷!  觉得文章 ...

  • 一文搞懂黎曼假设,解析数论的里程碑,质数理论的珠穆朗玛

    还记得质数吧?这是一个3000年前的问题: 2.3.5.7 .11.13 .17 .19 .23 .29. p.p是什么?31.下一个p是什么?这是37.后面的p呢?41..然后呢?43.但是,你怎么 ...

  • 一文搞懂麦克斯韦方程,现代科技的总基石,人类文明的加速器

    在我们开始之前,请注意,以任何有意义的方式讨论电磁学就意味着要讨论向量演算.请不要害怕,即使你不知道任何符号和术语的意思.向量微积分很难,但它的核心思想是直观的,我会在接下来的过程中解释一切. 在国际 ...

  • 一文搞懂“子午流注”与经气运行的关系

    人与自然界息息相关,就是说人体时时刻刻都在与自然界进行交流.所以<素问·六节藏象论>中指出:"天食人以五气,地食人以五味--气和而生,津液相成,神乃自生".说明了天供人 ...

  • 电缆BV、BLV、VV、VLV、KVV分别代表什么意思?一文搞懂!

    学造价网 建筑工程造价学习.交流知识平台公众号来源:电气圈如有侵权,请联系删除 1 电线电缆中BV.BLV等符号含义这些符号都是电线的一些型号,B系列归类属于布电线,所以开头用B,电压:300/500 ...

  • 中医:一文搞懂三焦辨证的主要内容

    吴鞠通沿用了<内经><难经>三焦之名,参照三焦的生理功能和病理变化,借用的是<灵枢·营卫生会><难经·三十一难>的三焦分部概念(即上焦病为手太阴肺和手厥 ...

  • 一文搞懂肾精、肾气与肾阴阳之间的联系与区别

    点击加载图片 一.肾精 肾为脏腑之本,生命之源,是因其具有藏精功能所决定的.肾所藏之精叫做肾精,精又能化气,而肾之精气的盛衰,关系到人体生长发育及衰老.换言之.人的生,长.壮.老规律是由肾的精气盛衰所 ...

  • 中医:一文搞懂人体的诸气之首

    宗气,是由经脾胃消化.吸收而来的水谷精微之气与从自然界吸入的清气结合而成.宗气在胸中积聚之处,称作"上气海",又名膻中.向下赖肺之肃降而蓄于丹田(下气海),并注人足阳明之气街(相当 ...