vim粘贴模式快捷方式
vim复制粘贴
原文:http://dpinglee.blog.163.com/blog/static/1440977532010579355724/
复制粘贴基本命令
yy | 复制游标所在行整行。或大写一个Y。 |
2yy或y2y | 复制两行。请举一反三好不好!:-) |
y^ | 复制至行首,或y0。不含游标所在处字元。 |
y$ | 复制至行尾。含游标所在处字元。 |
yw | 复制一个word。 |
y2w | 复制两个字(单词)。 |
yG | 复制至档尾。 |
y1G | 复制至档首。 |
p | 小写p代表贴至游标后(下)。 |
P | 大写P代表贴至游标前(上)。 |
复制到系统剪贴板
-
选择全文
gg shift+V shift + G
-
复制到系统剪贴板
"+y 复制到系统剪切板 "+p 把系统粘贴板里的内容粘贴到vim 解释:"+y是把选中内容复制到系统剪切板。
要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p将系统全局粘贴板里的内容粘贴进来。
- 查看剪贴板
VIM具有多个剪切板,":reg"命令查看各剪切板。系统剪切板的编号就是"+
-
将Vim默认剪贴板设为系统剪贴板
set clipboard=unnamedplus
Cygwin支持系统剪贴板
只有vim.gtk或vim.gnome才能使用系统全局粘贴板,默认的vim.basic看不到+号寄存器。安装vim.gnome使用apt-get install vim-gnome,然后vim自动会链接到vim.gnome。
- 打开Cygwin,在主目录下创建目录 .vim 、.vim/autoload、.vim/plugin
- 下载fakeclip插件,下载地址:http://www.vim.org/scripts/script.php?script_id=2098
- 解压,然后将解压出来的目录下的autoload文件夹中的 fakeclip.vim 复制到第一步创建的 .vim/autoload 文件夹下;plugin文件夹下的 fakeclip.vim 复制到 .vim/plugin 文件夹下。 两个文件的名字都叫fakeclip,但是不一样,不要弄混。
- 重新启动vim,这时就可以用 "+y 和 "+p 在vim和系统粘贴板之间进行复制了。
- 注意:按"+y时,动作要连续,停顿会造成操作无效。
vim寄存器
无论是vim内部抑或外部的复制([y]ank)、删除([d]elete)、粘贴([p]ut),在vim中都是借助registers(寄存器)实现的,vim共有9类寄存器:
名称 | 标识 | 说明 |
无名(unnamed)寄存器 | "" | 缓存最后一次操作内容; |
数字(numbered)寄存器 | "0 - "9 | 缓存最近操作内容,复制与删除有别; |
行内删除(small delete)寄存器 | "- | 缓存行内删除内容; |
具名(named)寄存器 | "a - "z或"A - "Z | 指定时可用; |
只读(read-only)寄存器 | ":, "., "%, "# | 分别缓存最近命令、最近插入文本、当前文件名、当前交替文件名; |
表达式(expression)寄存器 | "= | 只读,用于执行表达式命令; |
选择及拖拽(selection and drop)寄存器 | "*, "+, "~ | 存取GUI选择文本,可用于与外部应用交互,使用前提为系统剪切板(clipboard)可用; |
黑洞(black hole)寄存器 | "_ | 不缓存操作内容(干净删除); |
模式寄存器(last search pattern) | "/ | 缓存最近的搜索模式。 |
上面的说明为简要概述,并不完全准确,详细说明须参考手册::help copy-move
Ubuntu下使用系统剪贴板
无图形界面的vi或vim下可用的寄存器只包括{a-zA-Z0-9.%#:-"},显然,这里面没有包含上面提到的"*或者"+等选择及拖拽存器。
由此可见,实现vim与外部应用相互复制、粘贴的关键在于系统剪切板对于vim是否可用。查看vim剪切板是否可用的命令为vim --version,
对于非GUI版本的vim,剪切板是不可用的,解决方案很简单,安装一下就是了:
sudo apt-get install gvim
ubuntu 和mint默认安装的vim是不支持系统剪切、粘贴版的,需要执行以下安装:
sudo apt-get install vim-gnome # 查看链接到的版本 update-alternatives --display vim
mac的vim无法访问clipboard
- 在mac terminal无法访问clipboard,原因可以看一下vim的版本信息:
-clipboard表示该版本不支持访问剪切板,需要重新编译。
vim --version|grep clipboard -clipboard +job +path_extra +user_commands +eval -mouse_dec +statusline -xterm_clipboard
直接用homebrew安装:
brew install vim # OR brew install macvim --head --override-system-vim
或者:
" On OSX vmap <C-c> y:call system("pbcopy", getreg("\""))<CR> nmap <C-v> :call setreg("\"",system("pbpaste"))<CR>p
- 在vimrc里边加入下面几行,可以实现多个terminal间的复制粘贴。(只适用于Mac)
" MACOS if !has('clipboard') vmap "+y :w !pbcopy<CR><CR> " vmap y :w !pbcopy<CR><CR> " nmap yy :.w !pbcopy<CR><CR> " nmap p :r !pbpaste<CR><CR> endif
【解说】
这里主要得益于mac下的一套好用的操作系统剪贴板的命令: pbcopy, pbpaste . 比如说可以这样使用: cat foo.txt | pbcopy #将foo.txt的内容复制到系统剪贴板 pbpaste > bar.txt #将系统剪贴板的内容写到bar.txt 然后vim的w !和r !(注意中间的空格)可以负责把某一段文字 写入或从某一个命令读出,有点类似linux的管道功能。 这里把vim默认的y和p功能改掉,让y直接复制到系统剪贴板, 让p从系统剪贴板直接粘贴;故实现了多个terminal之间的剪贴板共享。 而且由于操作的是系统剪贴板,同时也实现了terminal的vim与其他 应用程序之间的剪贴板共享。
【问题】
第二行中的nmap,如果是前面有数字,比如说2yy复制两行的功能会失效。 可在V模式下用y命令代替。