Vim 复制粘帖格式错乱问题的解决办法

有时候,复制文本(尤其是代码)到 Vim,会出现格式错乱的问题。看样子,应该是自动缩进惹得祸。本文不去深究原因,直接给出解决方法。

1. paste 模式

运行如下命令,进入 paste 模式:

:set paste

进入 paste 模式后,按 i 键进入插入模式,然后再粘帖,文本格式不会错乱了。但粘帖后还需要按 <ESC> 进入普通模式并执行如下命令结束 paste 模式:

:set nopaste

显然,这样非常麻烦。下面我们进行改进。

2. 快捷键一

我们可以利用设置快捷键来简化上面的两个命令。在 ~/.vimrc 中加入如下两行:

map <F10>:set paste<CR>
map <F11>:set nopaste<CR>

这样,在普通模式下按 F10 (你也可以用自己喜欢的按键)就会进入 paste 模式,按 i 进入插入模式后粘帖,然后按 <ESC> 回到普通模式,再按 F11 结束 paste 模式。

这样虽然方便了,但占用了两个按键。下面我们继续改进。

3. 快捷键二

在 ~/.vimrc 中加入如下内容:

set pastetoggle=<F11>

这样就可以把上面的 F10 和 F11 合并为一个快捷键来切换 paste 模式了。

还有更好的办法么?当然!

4. Vim 寄存器一

关于 Vim 寄存器的详细信息请执行命令 “:help registers” 查看。

对于“剪切板”这个概念,Linux 下有两个东西:一个叫做选择缓冲区(X11 selection buffer),另一个才是剪切板(clipboard)。鼠标或键盘选择内容时,内容实时进入缓冲区,然后按中键将内容插入光标所在位置;鼠标或键盘选择内容后,按Ctrl-C(或Shift-Ctrl-C)或菜单中的“复制”,内容进入剪切板,然后按Ctrl-V(或Shift-Ctrl-V)或菜单中的“粘帖”将内容插入光标所在位置。关于这两者的详细信息,请自行搜索,此处不深究。

Vim 的寄存器 “* 对应系统缓冲区, 寄存器 “+ 对应系统剪切板。

如果你是把选择的内容(在系统缓冲区中)粘帖到 Vim ,只需在普通模式下执行如下命令:

"*p

对应的,如果你是把复制的内容(在系统剪切板中)粘帖到 Vim,只需在普通模式下执行如下命令:

"+p

怎么样?格式没有错乱了吧?

这样虽然简便很多了,但还是需要输入三个字母,并且这三个字母都得使用右手小拇指输入,甚至其中的两个字母还需要 shift 键配合!

还有更简单的办法。

5. Vim 寄存器二

在 ~/.vimrc 里加入如下内容:

set clipboard=unnamed

然后只需在普通模式下按 p 即可把系统缓冲区中的内容粘帖到 Vim 中,就像粘帖用 yy 命令得到的内容一样,并且格式不错乱。

如果把上面的一行换成如下内容:

set clipboard=unnamedplus

普通模式下按 p 粘帖的内容就是系统剪切板里的内容了。

这已经足够简便了。在搜索此问题的过程中,我还看到了另外一些办法。

6. 快捷键三

在 ~/.vimrc 里加入如下内容:

inoremap <S-Insert><ESC>:setl paste<CR>gi<C-R>+<ESC>:setl nopaste<CR>gi

这样,你就可以在插入模式下使用 Shift-Insert 快捷键在粘帖系统剪贴板中的内容了。

把上面一行替换成如下内容同样可以达到相同的效果:

inoremap <S-Insert><ESC>"+p`]a

注意,这可是在插入模式下哦!比起第 5 节提到的方法,这种方法省去了一次 <ESC> 按键进入普通模式和一次 i 按键重新回到插入模式。

至此,你需要做的只是:

  • a. 复制你想要的内容;
  • b. 回到 Vim 并按 Shift-Insert 快捷键;
  • c. 继续编辑其他内容。

原文地址:https://www.cnblogs.com/Dev0ps/p/9813621.html

时间: 2024-08-10 16:31:59

Vim 复制粘帖格式错乱问题的解决办法的相关文章

在mac电脑上写入文件到NTFS格式的移动硬盘的解决办法

需求背景: 今天我在Mac电脑A上下载了11G的资料,想传给Mac电脑B,试用了AirPort.文件共享.远程操作等,传输速度都慢得要死,虽然是在同一个局域网下,两台电脑挨的非常的近,但是还是传得超级慢,慢到无法忍受,因此就想我何不用移动硬盘拷贝呢,于是乎找来移动硬盘. 复制资料.向移动硬盘里粘贴,发现无效,粘贴不进去,无法在移动硬盘里创建文件夹.于是google了一番,原来硬盘是NTFS格式的,mac os原生不支持写入权限.继续寻找解决办法,发下如下2篇文章最靠谱: 这2个文章中一个就可以解

vim下单行长文本的时候卡顿解决办法

在vim编辑文件时,若单行过长,可能会导致vim卡顿,严重影响使用体验 估计是syntax匹配效率过滥导致.. 偶尔发现了一个临时的解决办法就是关掉syntax然后再打开,即在命令模式下 :syntax off :syntax on 参考:http://www.zhihu.com/question/33623946/answer/57172100 http://www.douban.com/group/topic/28307548/

vim进行文档的复制粘帖

若将a.xxx(xxx可以是urdf/txt/xacro)文档中的内容复制到b.xxx文档中,可用vim编辑器进入到b.xxx中,按下Esc后,依次输入      :r!cat a.xxx           然后保存退出  :wq 原文地址:https://www.cnblogs.com/cfmhermes/p/9751823.html

Linux: xclip,pbcopy,xsel用法 terminal 复制粘帖 (mac , ubuntu)

http://justcoding.iteye.com/blog/1829963 1. Windows下 使用系统自带的clip命令. # 位于C:\Windows\system32\clip.exe. 示例: C代码   echo Hello | clip # 将字符串Hello放入Windows剪贴板 dir | clip # 将dir命令输出(当前目录列表)放入Windows剪贴板 clip < README.TXT # 将readme.txt的文本放入Windows剪贴板 echo | 

VirtualBox复制虚拟机后丢失eth0网卡的解决办法

在VirtualBox中复制linux虚拟机后,启动后发现没有网卡的启动(即输入/sbin/ifconfig后没有eth0),重启network服务,提示的错误为: Device eth0 does not seem to be present, delaying initialization 修改办法: 修改70-persistent-net.rules文件,注释掉原来的eth0那一段,将新增的eth1改为eth0(或者直接删掉这个文件也可以,重启Linux后会再次生成这个文件)复制MAC地址

PDF复制SQL语句没有换行符的解决办法

PDF中的 plsql developer中 解决方法:使用Google Chrome打开在复制就解决了 原文地址:https://www.cnblogs.com/ooo888ooo/p/12597744.html

AFNNetworking 中json格式不标准的解决办法

在服务端程序  的头部加上   header("content-type:text/json"); 在服务端程序  的头部加上   header("content-type:text/json"); 在服务端程序  的头部加上   header("content-type:text/json"); 在服务端程序  的头部加上   header("content-type:text/json"); 在服务端程序  的头部加上  

ExtJs4.0日期控件只显示年月按年月格式会跳月的解决办法

如果是Ext.form.panel的话,只要设置一下属性就可以.如下代码: { text : '期间', width : 80, sortable : true, dataIndex : 'accountPeriod', format : 'Ym' } 如果是Ext.grid.panel的话,比较麻烦.网上也有各位大神的解决方法,不过都比较麻烦,要重写控件,我向一位大牛请教后整理出一个非常简单的方法,代码: Ext.define('Dpap.branchWithHold.WithHoldGrid

Oracle SQL Developer 编辑区不能删除,后退,空格,复制粘贴等功能都失效的解决办法

解决: 打开菜单并选择Tools-prefrence-Accelerators-Load Preset-Default(工具-首选项-加速器-加载预设-Default)即可!