我在网页上复制了一段代码,想粘贴到vim中。
第一次粘贴的时候,总会丢失复制内容的起始几个字符,紧接着第二次粘贴则正常,是什么原因?
下面是
Hello, world!为粘贴内容的测试结果,共粘贴两次,可以看到,第一次(前面两行)很奇怪,第二次(第三行)正常。1
2 , world!
3
Hello, world!左侧的1 2 3为行号
回答
简单原因: 你没有进入编辑模式就试图编辑文件, 所以产生了你意想不到的结果.
具体原因:
你打开了 vim, 此时 vim 处于 正常模式.
你粘贴了
Hello, world!, 相当于向 vim 申请执行该指令, vim 会顺次执行. 在正常模式下, < 和 > 表示缩进, 但因为你没有选中文本, 因此什么也没有发生, 两个中括号中间的 title 是无效的. Hell 也不会有具体效果. 但执行到 o 时, o 表示在光标所在行的下一行进入 插入模式, 剩下的内容被当做插入文本处理. 因此你文件中的第一行是空白行, 第二行是 o 后面的内容, 即 , world!因为上面的操作已经使 vim 进入 插入模式, 且你并未点击 ESC 退出该模式, 因此在你继续进行第二次粘贴的时候, 就会直接执行插入操作, 这行被完整的插入进去了.
疑问:
如果两次粘贴中间没有其他操作, 那么第二次粘贴时不应该会另起一行. 我猜测你应该敲了一个回车符后进行的粘贴.
建议:
了解下 vi 操作基础.
先按下 insert 进入编辑模式,然后按 shift+insert 粘贴内容。
打开 vim 后默认是命令模式。
设置粘贴模式
如果要保持原样粘贴,在命令模式下按英文:,冒号出现在左下角,此时输入set paste来设置。
进入编辑模式
i 在光标处开始进入编辑模式
a 从光标位置的下一个字符开始(没有内容时无效)进入编辑模式
o 光标移动到下一行行首并进入编辑模式
进入编辑模式,后直接使用shift+insert进行粘贴。
如果再需要回到命令模式,按 Esc。
可能一部分字符被當成vim指令了
我都是 :r!cat 粘貼的
在设置中打开clipboard。就可以和外界共享粘贴板了。
用”+y复制vim里的内容,直接在外面粘贴。
外面赋值的内容,用”+p粘贴在vim编辑的文件中。
使用键盘enter下面的文档键+p