Vim使用系统剪切版

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
上一篇:银河麒麟安装node,mysql,forever环境


下一篇:如何快速定位调用关系呢?