Vim在终端里中键粘贴问题
Vim 09月 27th, 2008在Ubunut有个非常好使的功能,也就是选中一段文字,在别的地方按鼠标中键就能粘贴了,独立于快捷键Ctrl+C,Ctrl+V,那个剪贴板,或者说系统有2个剪贴板吧。刚才看书测试代码发现vim的一个很诡异的问题。
书上列出得脚本代码,我看得是电子版,我一般就是鼠标选中,然后在终端了运行vim,中键,然后保存退出加运行权限测试,发现代码老是跟书的结果不一样。如果用Ctrl+C复制,然后在vim里用“”+p”来粘贴却没有问题。奇怪啊,通过对比,前一个方法,代码开头那个变量名前面少了一个字符,导致结果不同了。
为什么vim会无端端把开头字符吃掉,用gedit中键粘贴同样的代码,没问题,在gvim里中键粘贴也没有问题,在终端命令行上粘贴也没问题,唯独在终端上运行vim中键粘贴才有问题。Google了一下,第一条就有答案,可能在终端上的vim对鼠标行为跟GUI的不同,粘贴的文本当成普通模式下的按键命令运行了,不信粘贴
this is a test text
看看,变成
s is a test text
所以最后粘贴得到的代码是第一个进入插入模式按键(比如“i”“a”)后的代码,之前一大堆代码少了没留意开头少了一个字母。
不知道算不算是bug,不过也不是大问题,注意一下就好了,切换到gvim或插入模式再中键粘贴。


10月 6th, 2008 at 7:36 pm
set paste
10月 7th, 2008 at 8:03 pm
@fvwmnet
原来针对这种问题还有这个选项,Vim倒想得挺周到的。
10月 13th, 2008 at 6:34 pm
TO 楼主:
应该切换到插入模式再粘贴才对,就像手动输入这么一句,也要先进入插入模式。楼主是把在其它的编辑器的习惯带到这里来了。
另外 paste mode 应该只是disable了一些indent相关的设置,所以set paste也不会对楼主的问题有任何帮助。但粘贴一些已经格式化过(缩进等)的文档,特别是代码的时候,set paste特别有用。
我常用的快捷键,在paste和正常模式下切换,status line会有提示。
“Paste&&nopaste. Function and key map
let PASTE=0
:function Paste_mode_switch() abort
: if g:PASTE==1
: set nopaste
: let g:PASTE=0
: echo “in normal/nopaste mode”
: else
: set paste
: let g:PASTE=1
: echo “in Paste mode(disable indent related configuration)”
: endif
:endfunction
nmap :call Paste_mode_switch()
set pastetoggle=
10月 13th, 2008 at 6:50 pm
倒,怎么F3被吃掉了。
最简单的办法
:set pastetoggle=(F3)
把圆括号()换为尖括号”"
然后在insert mode时会有提示
– INSERT (paste) –
10月 14th, 2008 at 2:55 pm
@justsor
开始我挺郁闷的,如果不用“set paste”,粘贴确实会把缩进好的文本搞乱,根据你的提示,我也设置了一个键位映射,谢谢你的指教。
PS:可能是WordPress过滤了尖括号,但可以分别用“<”和“>”代码来表示“<”和“>”。
11月 14th, 2008 at 3:42 pm
这很正常吧,不是编辑模式还要粘贴?