一文搞懂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个粘贴板,分别是0
、1
、2
、...
、9
、a
、“
。如果开启了系统剪贴板,则会另外多出两个:+
和*
。使用: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间是两个反斜杠//
并不是敲错了。
参考链接
- Accessing the system clipboard
- Editing remote files via scp in vim
- Vim 配置入门
//title:(一文搞懂vim复制粘贴)
//englishTitle:(copy-and-paste-in-vim)
//category:(vim,problem,problem-solved)
//tags:(vim)
//createTime:(20200118)
//lastUpdateTime:(20200118)
转载自本人独立博客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个粘贴板,分别是0
、1
、2
、...
、9
、a
、“
。如果开启了系统剪贴板,则会另外多出两个:+
和*
。使用: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复制粘贴大全!
原文地址:http://lsong17.spaces.live.com/blog/cns!556C21919D77FB59!603.entry 内容: 用vim这么久 了,始终也不知道怎么在vim中使 ...
- VIM复制粘贴大全[转]
用vim这么久 了,始终也不知道怎么在vim中使用系统粘贴板,通常要在网上复制一段代码都是先gedit打开文件,中键粘贴后关闭,然后再用vim打开编辑,真的不 爽:上次论坛上有人问到了怎么在vim中使 ...
- 三文搞懂学会Docker容器技术(下)
接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...
- 一文搞懂所有Java集合面试题
Java集合 刚刚经历过秋招,看了大量的面经,顺便将常见的Java集合常考知识点总结了一下,并根据被问到的频率大致做了一个标注.一颗星表示知识点需要了解,被问到的频率不高,面试时起码能说个差不多.两颗 ...
- 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质
一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
- 一文搞懂 Prometheus 的直方图
原文链接:一文搞懂 Prometheus 的直方图 Prometheus 中提供了四种指标类型(参考:Prometheus 的指标类型),其中直方图(Histogram)和摘要(Summary)是最复 ...
- Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...
- 三文搞懂学会Docker容器技术(中)
接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...
随机推荐
- 【NOIP2011提高组】计算系数
计算系数 算法:真·滚动数组模拟!!! 马上CSP/S了,这是远在今年暑假前的一天的校内考试题中的一道.当时做的时候不会组合数,不会二项式定理,不会DP,不会……只知道应该n*n的空间存一个杨辉三角形 ...
- 1、安装gitlab
1.安装Gitlab Gitlab分为社区版和企业版(收费),这里安装的是ce社区版本 方式一: Gitlab官方有提供好的rpm包仓库,所以采用yum安装即可. [root@localhost ~] ...
- EF模型+MySql问题
1.添加ADO.NET模型不出现MYSQL连接时: a.确认mysql-for-visualstudio-1.2.7.msi是否安装 b.确认.net版本是否为4.6 2.已经选定了连接,但是在下一步 ...
- CodeForces 1144D
原题https://vjudge.net/problem/CodeForces-1144D /*求序列就经过几次step变成同一个数, 其实能发现一个数经过step1或者step2变成相邻的数, 所以 ...
- 洛谷P1583 魔法照片
https://www.luogu.org/problem/P1583 话不多说,其实就是模拟,然后,各种繁琐 #include<bits/stdc++.h> using namespac ...
- dmesg用法
百科概念:dmesg是一种程序,用于检测和控制内核环缓冲.程序用来帮助用户了解系统的启动信息. 解释:dmesg命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构.cpu.挂载的硬件 ...
- vs2010安装
1.网盘上2010安装包可用,先下载到电脑上,然后找到setup文件,安装即可 2.下载插件,基本的文本对齐,tab键补齐等功能 3.测试hello world程序 4.出现的问题 一个文件夹下有多个 ...
- 显示当前目录命令 - pwd
1) 命令名称:pwd 2) 英文原意:print working directory 3) 命令所在路径:/bin/pwd 4) 执行权限:所有用户 5) 功能描述:显示当前目录 6) 语法: pw ...
- slice 实现原理
package main /* #include <stdlib.h> */ import "C" import ( "unsafe" " ...
- electron聊天室|vue+electron-vue仿微信客户端|electron桌面聊天
一.项目概况 基于Electron+vue+electron-vue+vuex+Nodejs+vueVideoPlayer+electron-builder等技术仿制微信电脑端界面聊天室实例,实现消息 ...