type
status
date
slug
summary
tags
category
icon
password
URL
不同于 Emacs,Vim 确实是一个编辑器。那么编辑器能不能复制粘贴呢?肯定是可以的。不过要在 vim 中完成复制粘贴是需要敲键盘的,虽然略复杂但是功能也更强。
这篇文章来详细介绍 Vim 中复制粘贴的设置和使用方法。 包括复制当前字符/当前词/当前行,复制整个文件内容,粘贴刚才复制/剪切的内容;在插入模式/命令行模式粘贴;复制到 Windows/Mac 系统剪切板。
复制粘贴
- 进入 normal/正常模式(刚进入 vim 的默认模式),如果你在 insert 模式,按下若干次 Esc 可以进入 normal 模式。
- 把光标移动到开始复制的位置。
- 按下
v
来选择字符。(也可以用V
来选择整行,Ctrl-v
来选择矩形块)
- 光标移动 到结束复制的位置。
- 按下
y
来复制。
- 光标移动到想要粘贴的位置,按下
p
粘贴。(或者P
粘贴在当前光标位置之前)。
把
p
换成 gp
可以在粘贴完成时,把光标移动到粘贴内容结束的位置。gP
同样适用。剪切粘贴
- 进入 normal 模式(刚进入 vim 的默认模式),如果你在 insert 模式,按下若干次 Esc 可以进入 normal 模式。
- 把 光标移动 到开始复制的位置。
- 按下
v
来选择字符。(也可以用V
来选择整行,Ctrl-v
来选择矩形块)
- 光标移动到结束复制的位置。
- 按下
d
来剪切。
- 光标移动到想要粘贴的位置,按下
p
粘贴。(或者P
粘贴在当前光标位置之前)。
配合光标移动来复制
y
和 d
分别用于复制和剪切,但除了 v
还有很多更方便的选区方式。事实上所有光标移动命令都可以用来选区,比如:yy
或Y
复制当前行。
yw
用来复制往后一个词,y3w
复制往后三个词。
yiw
复制当前词。
y$
复制到行尾,y^
复制到行首。
yf.
复制直到下一个.
字符。
ggyG
或:%y
复制整个文件。
在 insert/插入模式粘贴
在 normal 模式按下
i
或者 a
可以进入插入模式,也就是键入内容的模式。p
快捷键不可用于插入模式,但是插入模式可以通过 Ctrl+r
来访问所有的寄存器,插入寄存器里的内容。所有剪切、拷贝、删除的内容都会存在不同的 Vim 寄存器里。比如:Ctrl+r
"
插入最近一次复制/剪切/删除的内容。"
是 Vim 的匿名寄存器。
Ctrl+r
0
插入最近一次复制的内容。其中0
属于 Vim 的编号寄存器,保存最近一次拷贝的内容。
此外寄存器还保存有当前文件名、最近一次执行的命令、最近一次搜索内容、最近一次插入文本等。可以参考 Vim 寄存器完全手册。
在 command-line/命令行模式粘贴
在 normal 模式按下
:
可以进入命令行模式,用来执行比如切换文件,保存关闭等操作。这个模式下仍然可以使用 Ctrl-r
,但还可以编辑每一条命令:Ctrl+r
"
插入最近一次复制/剪切/删除的内容。"
是 Vim 的匿名寄存器。
Ctrl+r
0
插入最近一次复制的内容。其中0
属于 Vim 的编号寄存器,保存最近一次拷贝的内容。
Ctrl+f
选择一条历史命令(包括当前正在键入的命令)来编辑。然后就进入了 normal 模式,编辑完成后回车来执行命令。
复制多项内容/复制历史
复制内容是没有历史的,但删除历史保存在编号寄存器 1-9 中(以行为单位的删除或者超过一行的删除才会进入编号寄存器):
"1
保存上一次删除的内容。
"2
保存上上次删除的内容。
"3
保存上上上次删除的内容。
- 以此类推……
Vim 有 26 个命名寄存器(
"a
-"z
),可以在删除或复制之前加寄存器名字,来保存在某个寄存器中,这样可以同时保存很多拷贝的内容。比如:- 按下
v
选则需要复制的区域。
"ay
把选区复制到"a
寄存器中。
"ap
把寄存器"a
的内容粘贴出来。
复制到系统剪切板/从系统剪切版粘贴
寄存器
"*
和 "+
在 Mac 和 Windows 中,都是指系统剪切板(clipboard),例如 "*yy
即可复制当前行到系统剪切板。 其他程序中复制的内容也会被存储到这两个寄存器中。 在 X11 系统中(绝大多数带有桌面环境的 Linux 发行版),二者是有区别的:"*
指 X11 中的 PRIMARY 选区,即鼠标选中区域。在桌面系统中可按鼠标中键粘贴。
"+
指 X11 中的 CLIPBOARD 选区,即系统剪切板。在桌面系统中可按 Ctrl+V 粘贴。
- 作者:鹿晓鹏
- 链接:https://luxiaopeng.cn/linux/vim
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。