转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/html
复制粘贴是文本编辑最经常使用的功能,可是在vim中复制粘贴仍是有点麻烦的,有一点学习成本。本文总结了使用vim复制粘贴的典型场景和使用方法,但愿对读者有帮助。linux
vim提供12个剪贴板,它们的名字分别为vim有11个粘贴板,分别是0
、1
、2
、...
、9
、a
、“
。若是开启了系统剪贴板,则会另外多出两个:+
和*
。使用:reg
命令,能够查看各个粘贴板里的内容。vim
:reg
在vim中简单用y只是复制到“
(双引号)粘贴板里,一样用p粘贴的也是这个粘贴板里的内容。windows
要将vim的内容复制到某个粘贴板,须要退出编辑模式,进入正常模式后,选择要复制的内容,而后按"Ny完成复制,其中N为粘贴板号(注意是按一下双引号而后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按"ay就能够了。缓存
要将vim某个粘贴板里的内容粘贴进来,须要退出编辑模式,在正常模式按"Np,其中N为粘贴板号。好比,能够按"5p将5号粘贴板里的内容粘贴进来,也能够按"+p将系统全局粘贴板里的内容粘贴进来。bash
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或者在编译的时候开启系统剪贴板选项。dom
"*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"+dd
– 剪切一行"*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处理,一行一行地处理粘贴的文本。ssh
肯定vim支持+clipboard
后,若是想y/p
直接和系统剪贴板打通,能够在~/.vimrc
中加上如下配置):学习
set clipboard^=unnamed,unnamedplus
其中unnamed表明*
寄存器,unnamedplus表明+
寄存器。在mac系统中,二者都同样;通常在linux系统中+
和*
是不一样的,+
对应ctrl + c
,ctrl + v
的桌面系统剪贴板,*
对应x桌面系统的剪贴板(用鼠标选择复制,用鼠标中键粘贴)。
经过ssh链接到linux服务器时,vim是跑在远程服务器的,不能使用y
复制到本地的剪贴板。这时有几个方法:
用鼠标选中文字cmd + c
复制(windows下ctrl + c
复制),cmd + v
粘贴到本地。这个方法是最天然的,可是想要用这个方法有几个前提:
.vimrc
文件中加上set mouse=a
mouse reporting
选项,不然鼠标点击vim界面会进入visual模式。参见我这篇文章解决iterm2中vim选中文字不能复制的问题使用本地vim经过scp直接编辑远程文件。这样就可使用本地寄存器"+y"
复制了。这种方法对远程vim配置没有要求。
vim scp://remoteuser@server.com//absolute/path/to/file
注意com和absolute间是两个反斜杠//
并非敲错了。
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提供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或者在编译的时候开启系统剪贴板选项。
"*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"+dd
– 剪切一行"*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支持+clipboard
后,若是想y/p
直接和系统剪贴板打通,能够在~/.vimrc
中加上如下配置):
set clipboard^=unnamed,unnamedplus
其中unnamed表明*
寄存器,unnamedplus表明+
寄存器。在mac系统中,二者都同样;通常在linux系统中+
和*
是不一样的,+
对应ctrl + c
,ctrl + v
的桌面系统剪贴板,*
对应x桌面系统的剪贴板(用鼠标选择复制,用鼠标中键粘贴)。
经过ssh链接到linux服务器时,vim是跑在远程服务器的,不能使用y
复制到本地的剪贴板。这时有几个方法:
用鼠标选中文字cmd + c
复制(windows下ctrl + c
复制),cmd + v
粘贴到本地。这个方法是最天然的,可是想要用这个方法有几个前提:
.vimrc
文件中加上set mouse=a
mouse reporting
选项,不然鼠标点击vim界面会进入visual模式。参见我这篇文章解决iterm2中vim选中文字不能复制的问题使用本地vim经过scp直接编辑远程文件。这样就可使用本地寄存器"+y"
复制了。这种方法对远程vim配置没有要求。
vim scp://remoteuser@server.com//absolute/path/to/file
注意com和absolute间是两个反斜杠//
并非敲错了。