虚拟机: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. 继续编辑其他内容。

区块链能否解救大数据风控
FHL385N1F1A型号场效应管的特点和参数
能迪科技®中央空调自动控制系统
一文搞懂共模电感原理
怎样将国内一流的高科技运用到垃圾分类实践中?
虚拟机:Vim 复制粘帖格式错乱问题的解决办法
AI的多维世界是什么样的
“互联网平台+早餐服务”等创新模式推动上海打造“早餐工程”升级版
博世与ST 雄霸MEMS 市场供应商头两名
手机Type-C接口有着很多人不知道的功能
NXP SSL21084 GreenChip 12W LED照明驱动方案
高频变压器选用与检测方法的详细说明
CMAC网络在机器人手眼系统位置控制中的应用
集成化智能化,MEMS传感器前景广阔
小米mix2概念渲染图曝光,升级双曲面屏,跑分强过小米6?
什么是虹膜?虹膜的特性有哪些呢?虹膜识别技术的起源
台积电10nm芯片出货量仅占晶圆收入1%,7nm占2019年第四季度35%
优步与特斯拉达成合作,推动美国驾驶员使用电动汽车,实现“零排放”目标
什么是储能BMS?与汽车BMS设计有哪些区别?
英飞凌开发出了一种基于光声光谱技术的新型二氧化碳传感器