在 Ubuntu for Windows 上将文本粘贴到终端编辑器中始终会粘贴到一行中(10)

在 Ubuntu for Windows 上将文本粘贴到终端编辑器中始终会粘贴到一行中(10)

我尝试将内容从 Windows 系统剪贴板粘贴到终端文本编辑器(如 vim(或其剪贴板和 xterm-clipboard 允许变体如 vim-gtx)、nano 或 emacs)中,但无济于事。

我主要尝试使用 vim-gtx,因为 vim 是我最喜欢的编辑器 -> 但无论我尝试什么方法,无论是:

  • 使用 :set paste 并使用 Ctrl-v、Shift-ctrl-v 进行粘贴(这是唯一可以粘贴剪贴板内容的方法)
  • 使用“*p 或 "+p”粘贴(不粘贴)
  • 将输入复制到 clip.exe(已尝试过 xclip 但该实用程序似乎在 WSL 上不起作用),然后粘贴到 vim 中。

如上所述,只有在插入模式下按下 Ctrl-v 时,从剪贴板粘贴才有效(Shift-Ctrl-v 插入“^”,而“*p 和 "+p 插入“i”字符或“^?”),并且粘贴的输出总是粘贴到一行上。

例如,从 VSCode 复制的默认 .bashrc 文件的一部分:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

将以下内容粘贴到终端文本编辑器中:

# enable programmable completion features (you don't need to enable # this, if it's already enabled in /etc/bash.bashrc and /etc/profile # sources /etc/bash.bashrc). if ! shopt -oq posix; then   if [ -f /usr/share/bash-completion/bash_completion ]; then     . /usr/share/bash-completion/bash_completion   elif [ -f /etc/bash_completion ]; then     . /etc/bash_completion   fi fi

如果使 EOL 字符可见,则最后一个字符后会出现一个 $。无论使用哪个编辑器、从哪里复制文本以及使用哪个粘贴系统(如果粘贴成功),都会出现此问题。

总结:

  • 在 vim 中,Ctrl-v 是粘贴内容的唯一方法,但粘贴只会发生在一行上

  • vim 中的“*p / "+p”无法按预期粘贴(但可以通过 git-for-windows 在 vi​​m 中使用,请参阅下面的注释)

  • 我不确定如何从系统剪贴板粘贴到 nano 和 emacs 中(普通的粘贴和管道输出到 Windows 剪辑,然后粘贴不会在这两个程序中粘贴任何内容 - 我只能在内部提取/复制后粘贴)。
  • 因此,这可能是 Windows 版 Ubuntu 上各种 vim 的问题。

谢谢

重要提示:-当通过 git-for-windows(而不是 Ubuntu bash)在 vim 上使用“*p”粘贴时,它会正确粘贴(带有新行)。但通过 Ubuntu 的 Vim(vim-gtx 或 ppa 版本)无法正确使用“*p”粘贴 - 这看起来可能是 vim 移植到

答案1

如果你想从剪贴板粘贴多行到 Vim,我找到了一个可行的解决方案在 StackOverflow 上发帖

我相信这个问题值得一个更客观的答案。

进入粘贴模式

  • ESC
  • :设置粘贴
  • i
  • SHIFT+ Insert(文本已复制到剪贴板)

**退出粘贴模式**
  • ESC
  • :设置不粘贴
  • i

您已粘贴文本并可以再次输入。

答案2

当我使用 cmder/ConEmu 作为终端仿真器时遇到了这个问题。

ConEmu 有一个粘贴设置,默认使用 Ctrl + V 粘贴在单行上,使用 Shift + Insert 粘贴在多行上。

将粘贴模式#2的设置从 更改Single lineMulti lines(如下面的屏幕截图所示)可以为我解决这个问题。

ConEmu 粘贴设置

答案3

尝试这个链:Control+R然后Shift+=

答案4

将 Bash 变量 $EDITOR 定义为任意选择,即

      export $EDITOR=/usr/bin/nano 

然后使用Ctrl-x Ctrl-e启动 nano。然后您可以在保存后粘贴多行选择,然后使用从编辑中填充的命令返回到 shell。# 更新 过了一会儿,想补充一下,nano 的技巧是基于 WSL 的新功能,正如 2018 年更新中提到的那样。

相关内容