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

简介:

 

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

1. paste 模式

运行如下命令,进入 paste 模式:
:set paste
进入 paste 模式后,按 i 键进入插入模式,然后再粘帖,文本格式不会错乱了。但粘帖后还需要按 进入普通模式并执行如下命令结束 paste 模式:
:set nopaste
显然,这样非常麻烦。下面我们进行改进。

2. 快捷键一

我们可以利用设置快捷键来简化上面的两个命令。在 ~/.vimrc 中加入如下两行:
map  :set paste
map  :set nopaste
这样,在普通模式下按 F10 (你也可以用自己喜欢的按键)就会进入 paste 模式,按 i 进入插入模式后粘帖,然后按 回到普通模式,再按 F11 结束 paste 模式。
这样虽然方便了,但占用了两个按键。下面我们继续改进。

3. 快捷键二

在 ~/.vimrc 中加入如下内容:
set pastetoggle=
这样就可以把上面的 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  :setl pastegi+:setl nopastegi
这样,你就可以在插入模式下使用 Shift-Insert 快捷键在粘帖系统剪贴板中的内容了。
把上面一行替换成如下内容同样可以达到相同的效果:
inoremap  "+p`]a
注意,这可是在插入模式下哦!比起第 5 节提到的方法,这种方法省去了一次  按键进入普通模式和一次 i 按键重新回到插入模式。
至此,你需要做的只是:
    a. 复制你想要的内容;
    b. 回到 Vim 并按 Shift-Insert 快捷键;
    c. 继续编辑其他内容。

参考

 原文发布时间为:2012-07-25

本文来自云栖社区合作伙伴“Linux中国”
相关文章
|
开发工具
vim中跳到第一行和最后一行,保存格式并去掉#粘贴,去掉黄色阴影
vim中跳到第一行和最后一行,保存格式并去掉#粘贴,去掉黄色阴影
|
开发工具
vim 全选复制
全部删除:按esc后,然后dG 全部复制:按esc后,然后ggyG 全选高亮显示:按esc后,然后ggvG或者ggVG
2815 0
|
开发工具 Android开发
粘贴到vi/vim的代码,怎样避免向右不断缩进,保持原来的格式?解决vi/vim在粘贴中会在行首多很多缩进和空格的问题。
SecureCRT会将你原来的文本原封不动的按照字符串的样式发送给服务器。所以当你的服务器上的vi/vim设置为autoindent的话,在 i 模式下,那么它会将SecureCRT传输而来的这些字符串再进行一下缩进。
1887 0
|
Linux 开发工具
Linux Vi或VIM的插入,定位,搜索,复制、粘贴、删除、取消和替换
Linux Vi或VIM的插入,定位,搜索,复制、粘贴、删除、取消和替换
184 0
|
开发工具
vim编辑器编辑时出现E437: terminal capability "cm" required的解决办法
vim编辑器编辑时出现E437: terminal capability "cm" required的解决办法
854 0
vim编辑器编辑时出现E437: terminal capability "cm" required的解决办法
|
开发工具 Perl
Debian 9 Vim无法使用鼠标右键复制 解决方法
由于日常大部分工作需要在 Debian 环境下完成,最近发现升级到 Debian Stretch 后,Vim 的一个常用操作没法做了,没法使用鼠标,直接选择并复制。很别扭,之前用着没问题的。今天来分享一个解决办法,为大家解决 Debian 9 VIM 环境下,无法使用鼠标右键进行选择、复制的问题,供大家参考。
4719 0
|
开发工具
vim介绍/vim颜色显示和移动光标/ vim一般模式下移动光标/ vim一般模式下复制、剪切和粘贴
5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vim一般模式下复制、剪切和粘贴   vim   是vi的升级版本 vim 带有颜色显示 安装vim : yum install  -y    vim-enhanced vim分三种模式...
1545 0