vim寄存器
vim 中的复制、删除的内容都会被存放到默认(未命名)寄存器中,之后可以通过粘贴操作读取默认寄存器中的内容。寄存器是完成这一过程的中转站,vim 支持的寄存器非常多,其中常用的有 a-zA-Z0-9+"
寄存器用引号来表示,在vim中,输入:reg
查看vim的寄存器,其中:
-
"0-"9
: 表示数字寄存器,其中 "0 缓存最近一次复制的内容. "1到"9 缓存最近9次的删除内容 -
"a-"z
和"A-"Z
: 表示用户寄存器,Vim 不会读写这部分寄存器 -
""
: 两个引号,表示未命名的寄存器,是 Vim 的默认寄存器,例如删除、复制等操作的内容都会被保存到这里。 -
":
: 表示最后一次执行的命令 -
"%
: 表示当前文件名 -
"+
: 剪切板寄存器,关联系统剪切板,保存在这个寄存器中的内容可以被系统其他程序访问,也可以通过这个寄存器访问其他程序保存到剪切板中的内容。 -
"*
: 对应图形界面中鼠标框选的内容(可以用鼠标中键黏贴) -
"-
: 行内(删除)寄存器, 缓存的是在一行的内部删除的内容, 即少于一行的删除内容
"*和"+的区别
在启用了 +clipboard 的情况下, "*
寄存器表示的是被选择的内容. 这个内容可以是你用鼠标选择的, 也可以是你用 visual模式下选择的.
但是, "+
寄存器只能将你在 visual模式下 选择的内容复制到系统剪贴板上
vim使用系统剪切板
首先查看vim是否支持剪切板: vim --version | grep clipboard
结果:
-clipboard +jumplist +persistent_undo +vartabs
+eval +mouse_gpm +syntax -xterm_clipboard
clipboard前面有一个小的减号,说明不支持。
让vim支持系统剪切板
安装vim-X11
,可以让vim支持系统剪切板,安装vim-X11后,会安装一个vim的图形程序,即gvim, 但是这个一般都不习惯使用。(gvim也同样可以使用vim的各种插件,包括 NERDTree等)
查看 vim-X11
包含那些命令:
$ rpm -ql vim-X11
/usr/bin/evim
/usr/bin/gex
/usr/bin/gview
/usr/bin/gvim
/usr/bin/gvimdiff
/usr/bin/gvimtutor
/usr/bin/vimtutor
/usr/bin/vimx
/usr/share/applications/gvim.desktop
/usr/share/icons/hicolor/16x16/apps/gvim.png
/usr/share/icons/hicolor/32x32/apps/gvim.png
/usr/share/icons/hicolor/48x48/apps/gvim.png
/usr/share/icons/hicolor/64x64/apps/gvim.png
/usr/share/icons/locolor/16x16/apps/gvim.png
/usr/share/icons/locolor/32x32/apps/gvim.png
/usr/share/man/man1/evim.1.gz
/usr/share/metainfo/gvim.appdata.xml
vim-X11添加一些附加的命令, 比如 evim, gvim等, 最重要的是这个 vimx命令, 他就是 在vim的基础上增加x系统的支持. 即vimx 是命令行下的vim支持系统剪贴板的版本.
查看 vimx
是否支持 clipboard
$ vimx --version | grep clipboard
+clipboard +jumplist +persistent_undo +vartabs
+eval +mouse_gpm +syntax +xterm_clipboard
可以看到,vimx是支持 clipboard的。
为了能够在使用vim时运行的是vimx,可以给vim设置一个别名,让执行vim时实际执行的是vimx
在.bashrc中, 加上一个 alias: alias vim=/usr/bin/vimx
虽然安装了 vim-X11, 但是 /usr/bin/vim 和 /usr/bin/vimx 实际上还是 两个互补相关的 应用, 在原来的vim中, 仍然并不支持 剪贴板, 查看vim --version | grep clipboard, 仍然还是没有启用剪贴板的特性。
只有 使用 vimx 才能启用 +clipboard, 和 +xterm_clipboard 特性。
vim绑定复制粘贴快捷键
不使用快捷键的时候,复制和粘贴需要使用命令
复制 | 粘贴 |
---|---|
"+y |
"+p 或者 "+gp
|
为了方便使用,可以把复制粘贴命令绑定到快捷键上
在vim中有以下几种按键绑定的模式:
-
map
: 正常模式,可视化模式和运算符模式可用 -
nmap
:正常模式可用 -
vmap
:可视化模式可用 -
omap
:运算符模式可用 -
map!
:插入模式和命令行模式可用 -
imap
:插入模式可用 -
cmap
:命令行模式可用
在设置快捷键的时候,需要注意映射模式:
- 如果是复制到系统剪贴板, 要设置vmap, 或者是设置成 map。 !! 因为, 你要复制到系统剪贴板, 需要在visual模式下, 你用nmap在normal模式下就无效. 其中的map 会自动检查, 在vmap下有效, 在nmap下无效!
- 反之, 如果是从系统剪贴板粘贴到vim中, 则要设置成 在nmap下粘贴, 或者甚至可以在 insert模式下直接粘贴. 但是不能设置成vmap, 因为你在 粘贴 系统剪贴板的内容到vim的时候, 不可能是vmap visual模式. 通常还是normal模式或 insert模式
在 ~/.vimrc中绑定快捷键
可以把复制绑定成 ctrl c,粘贴绑定成 ctrl v,但是ctrl v和可视化模式的 ctrl v冲突了,所以可以选择使用其它的快捷键,这里使用前置键来配置
"绑定复制/粘贴快捷键
let mapleader=";"
vmap <leader>c "+y
nmap <leader>v "+p
imap <leader>v <esc>"+p