vim怎么粘贴其他地方复制的代码?

我在网页上复制了一段代码,想粘贴到vim中。
第一次粘贴的时候,总会丢失复制内容的起始几个字符,紧接着第二次粘贴则正常,是什么原因?
下面是<title>Hello, world!</title>为粘贴内容的测试结果,共粘贴两次,可以看到,第一次(前面两行)很奇怪,第二次(第三行)正常。

  1
  2 , world!</title>
  3 <title>Hello, world!</title>

左侧的1 2 3为行号

阅读 39.2k
6 个回答

简单原因: 你没有进入编辑模式就试图编辑文件, 所以产生了你意想不到的结果.

具体原因:

  1. 你打开了 vim, 此时 vim 处于 正常模式.
  2. 你粘贴了 <title>Hello, world!</title>, 相当于向 vim 申请执行该指令, vim 会顺次执行. 在正常模式下, <> 表示缩进, 但因为你没有选中文本, 因此什么也没有发生, 两个中括号中间的 title 是无效的. Hell 也不会有具体效果. 但执行到 o 时, o 表示在光标所在行的下一行进入 插入模式, 剩下的内容被当做插入文本处理. 因此你文件中的第一行是空白行, 第二行是 o 后面的内容, 即 , world!</title>
  3. 因为上面的操作已经使 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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题