有时候,复制文本(尤其是代码)到 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. 继续编辑其他内容。

Linux Vim 光标错位,技术|Vim 复制粘帖格式错乱问题的解决办法相关推荐

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

    1. Windows下 使用系统自带的clip命令. # 位于C:\Windows\system32\clip.exe. 示例: echo Hello | clip # 将字符串Hello放入Wind ...

  2. linux mysql端口启动失败怎么办,Linux下apache mysql等服务修改默认端口后无法正常启动解决办法...

    Linux下apache mysql等服务修改默认端口后无法正常启动解决办法 linux下 apache 等服务修改默认端口后无法正常启动解决办法 服务器上装了两个webserver,一个是nginx ...

  3. vim复制粘贴导致多行出现#号解决办法

    在vim内复制多行假如复制的行带有#号会导致其他不带#号的行自动加# 解决办法,输入一下命令再粘贴即可 :set paste

  4. linux fortran 内存不足,内存不够不用怕! 虚拟内存不足的十种解决办法

    如果你的系统虚拟内存太低,可以鼠标右击"我的电脑"选择"属性→高级→性能下设置→高级→打开虚拟内存设置",可以重新设置最大值和最小值,按物理内存的1.5~2倍来 ...

  5. wordpress搜索不了中文linux,WordPress上传带中文汉字名称的图片不显示的解决办法...

    以上是WordPress上传带中文汉字名称的图片不显示的情况,正常上传成功的话,在上图两个地方都会有图片缩略图显示.相信很多WordPress装载linux系统上的朋友都会遇到这样的错误. WordP ...

  6. element表格错位问题(表头和表格内容没有对齐)解决办法

    element表格错位问题,表头和表格内容没有对齐,如下图: 解决办法: 在入口文件App.vue 样式中加以下内容: body .el-table th.gutter {display: table ...

  7. linux设置为桥接后ipv4不见,centOS不显示ipv4地址的解决办法

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lx_Frolf/article/det ...

  8. Edge浏览器复制地址栏地址变为文字超链接的解决办法

    一直在使用微软新出的Edge浏览器,在最近的版本中发现,复制地址栏中的地址到别的地方时,地址会变成一个文字链接,比如我要复制当前博客的地址到微信中发给别人: https://yuweidong.blo ...

  9. vim/vi中的光标键会变成a,b,c,d的解决办法

    在某些情况下, vi/vim中的编辑会出现一些很不愉快的情况, 比如在vi/vim中输入方向键有时被转化为A B C D, 或者按个Enter键, 却被转为为其他字母, 恼人得很, 该怎么办呢? 方法 ...

最新文章

  1. 时间和邮箱的正则表达式,获取当前时间函数
  2. 怎样的视频监控的管理与运营才算高效
  3. title: postGreSQL 插件 timescaleDB 安装使用 date: 2019-02-14 18:02:23
  4. Java并发编程艺术----读书笔记(二)
  5. 洛谷p1208 水题贪心 思想入门
  6. 比较分析 Spring AOP 和 AspectJ 之间的差别
  7. declare handler 声明异常处理的语法
  8. 【PHP】IPv4与整数转换、IPv6与整数转换
  9. 谭浩强课后题之----求最大公约数和最小公倍数
  10. 开源php面板,宝塔面板nginx安装终于搞定了
  11. Python函数积累
  12. leetcode 整数反转
  13. Android7.1开机启动脚本
  14. CentOS设置默认启动命令行(不启动图形界面)
  15. 读书笔记-------修炼之道互联网产品从设计到运营
  16. 电磁干扰、电磁兼容性和电磁屏蔽区别及联系
  17. 【C++程序设计技巧】NVI(Non-Virtual Interface )
  18. 计划预算(PV)、实际完成工作预算(EV)、实际成本(AC)
  19. appium+Python+逍遥游模拟器自动化执行测试用例,为什么一直中断连接?
  20. 还在为ElementUI的原生校验方式苦恼吗,快用享受element-ui-verify插件的快乐吧(待续)

热门文章

  1. (转)详解Vs2008下打包安装程序的一些技巧(含win7下提权限、卸载以及安装时定向到网页)...
  2. js对象序列化为json字符串
  3. IF-ERRORLEVEL使用方法
  4. LeetCode-reverse integer复杂度
  5. win8.1自带metro应用不工作解决办法
  6. weblogic双机热备部署linux,WebLogic应用在集群环境下的一些基本知识【转载】
  7. AUTOSAR从入门到精通100讲(二十二)-AUTOSAR通信篇—CANTP模块
  8. docker rabbitmq php扩展,Docker开启RabbitMQ延时消息队列
  9. 《鸿蒙理论知识06》HarmonyOS概述之应用开发基础知识
  10. 大学4年毕业后我是如何还清的助学贷款。