VIM 粘贴代码时恶心的缩进

前端之家收集整理的这篇文章主要介绍了VIM 粘贴代码时恶心的缩进前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

http://www.cnblogs.com/ayanmw/p/3645183.html

你看到的这个文章来自于http://www.cnblogs.com/ayanmw

vim粘贴代码 如果有注释,那么粘贴后就惨不忍睹,类似于:

404/041420313904625.png">

我粘贴代码到a.cpp,内容为:

复制代码

  1. //打印函数voidprint_hex(constunsignedchar*data,intlength,intradix=16)
  2. {for(inti=0;i<length;i++){if(i%radix==0){
  3. printf("0x");
  4. }
  5. printf("%02x",data[i]);if(i%4==3){
  6. printf("");
  7. }if(i%radix==radix-1){
  8. printf("\n");
  9. }
  10. }
  11. printf("\n");
  12. }

复制代码

其原因是什么呢?

vim中 输入 :set

发现:

404/041422134378347.png">

formatoptions=croql

这个选项,希望在~/.vimrc中禁止,比如设置为

set formatoptions=tcpmM

但是vim不识别此行,报错.无法禁止这个选项....

经过百度搜索,发现解决方案.[比较恶心 开源软件的就是配置文件 不人性化]

在粘贴前先设置进入粘贴插入模式,即不会自动缩进和连续注释

set paste

然后再进入插入模式粘贴,结果如图:

404/041425345314713.png">

下面的插入模式 多了一个 paste.

在粘贴插入模式下代码是不会自动按格式缩进的,需要使用nopaste设置回来

set nopaste

也可以在.vimrc中设置切换的快捷键,比如设置F9,则可以在.vimrc中加入:

set pastetoggle=<F9>

这样直接在插入模式按F9就会在“-- 插入 --”模式和“-- 插入(粘贴) --”模式中切换

探秘:

复制代码

  1. 最近使用Vim来写博客,发现在Vim中粘贴Python代码后,缩进就全乱了。仔细研究了以下,原来是自动缩进的缘故,于是做如下设置:
  2.  
  3. :setnoainosi
  4. 取消了自动缩进和智能缩进,这样粘贴就不会错行了。但在有的vim中不行,还是排版错乱。
  5.  
  6. 后来发现了更好用的设置:
  7.  
  8. :setpaste
  9. 进入paste模式以后,可以在插入模式下粘贴内容,不会有任何变形。这个真是灰常好用,情不自禁看了一下帮助,发现它做了这么多事:
  10.  
  11. textwidth设置为0
  12. wrapmargin设置为0
  13. setnoai
  14. setnosi
  15. softtabstop设置为0
  16. revins重置
  17. ruler重置
  18. showmatch重置
  19. formatoptions使用空值
  20. 下面的选项值不变,但却被禁用:
  21.  
  22. lisp
  23. indentexpr
  24. cindent
  25. 怪不得之前只设置noainosi不行,原来与这么多因素有关!
  26.  
  27. 但这样还是比较麻烦的,每次要粘贴的话,先setpaste,然后粘贴,然后再setnopaste。有没有更方便的呢?你可能想到了,使用键盘映射呀,对。我们可以这样设置::
  28.  
  29. :map<F10>:setpaste<CR>:map<F11>:setnopaste<CR>
  30. 这样在粘贴前按F10键启动paste模式,粘贴后按F11取消paste模式即可。其实,paste有一个切换paste开关的选项,这就是pastetoggle。通过它可以绑定快捷键来激活/取消paste模式。比如::
  31.  
  32. :setpastetoggle=<F11>
  33. 这样减少了一个快捷键的占用,使用起来也更方便一些。

复制代码

还有GUI操作系统的粘贴板,粘贴到命令行的vim中,有快捷键吗???事实证明,不太好用

复制代码

  1. 但,这是最方便的吗?Vimer们对高效的追求永无止境。还有其他更好地方法吗?
  2.  
  3. 你可能想到了,vim寄存器。对,使用vim寄存器“+p粘贴即可。根本不用考虑是否自动缩进,是否paste模式,直接原文传递!:"+p
  4. 要说vim寄存器,就要从vim文件间的复制粘贴说起。
  5.  
  6. Vim中,若要复制当前行,普通模式下按yy即可,在要粘贴的地方按p。这是vim将复制内容保存到了自己的寄存器中的缘故。如果在其他地方执行yy,新的内容将覆盖掉原寄存器中内容。如果想保存原寄存器中内容而同时增加新的内容呢?这时就要在yy前增加标签了。标签以双引号开始,跟着的是标签名称,可以是数字0-9,也可以是26个字母,然后就是复制操作,这样就把复制内容保存到该标签寄存器里。通过下面命令显示所有寄存器内容::
  7.  
  8. :reg
  9. 其中注意两个特殊的寄存器:”*和“+。这两个寄存器是和系统相通的,前者关联系统选择缓冲区,后者关联系统剪切板。通过它们可以和其他程序进行数据交换。
  10.  
  11. 备注:
  12. 若寄存器列表里无”*或“+寄存器,则可能是由于没有安装vim的图形界面所致。Debian/Ubuntu下可以通过安装vim-gnome解决
  13.  
  14. $sudoapt-getinstallvim-gnome
  15. 选择缓冲区和系统剪切板啥子区别?让我们继续研究。

复制代码

vim需要图形化,才可以使用 系统 粘贴板的内容..没办法,vim是命令行的..只能 用第一种方法了.

在两个vim中切换内容进行复制 粘贴,也是一件 比较恶心的事情...我的做法就是 复制到一个临时文件,然后合并目标文件和临时文件.在编辑...没办法,vim 太 "高端"了,不会用.vim/emacs让人类的人性化科学倒退了很多啊.

在vim中 输入

:help formatoptions

可以查看这个帮助信息.

参考资料:

http://hi.baidu.com/luosiyong/item/40f77e21df1f798c6e2cc335

http://www.cnblogs.com/end/archive/2012/06/01/2531147.html

转载请注明出处:http://www.cnblogs.com/ayanmw 我会很高兴的!

猜你在找的Bash相关文章