防止 bash 中的多行粘贴

Mar*_*ter 13 command-line bash terminal-emulator x11 clipboard

我经常使用ctrl+c鼠标右键单击菜单和粘贴从某些 gui 应用程序复制文本,然后将其粘贴到我的终端模拟器(终结器)中。有时我会忘记剪贴板包含几行,当粘贴到 bash 时会导致每一行都被“执行”

是否有一些解决方案可以完全防止多行粘贴?

Oth*_*eus 5

这个答案不是用户问题的最具体答案,请参阅我的第二个答案。我将其留在这里是因为它解决了更普遍的问题。

\n\n

根据对原始帖子的评论,您需要(1)一个支持括号粘贴的终端模拟器,以及(2)对终端中运行的任何内容的相应支持,即vim,,,,bashzsh支持括号粘贴的终端模拟器(列表将根据本文的评论进行更新):

\n\n
    \n
  • xterm - 自从 ??
  • \n
  • gnome-terminal- 自从 ??
  • \n
  • putty- 自 0.63 起(2013-08-06 发布日期)
  • \n
\n\n

支持括号模式的应用程序:

\n\n
    \n
  • vim
  • \n
  • zsh
  • \n
\n\n

对于bash,St\xc3\xa9phaneChazelas 编写了一个shell 脚本,以方便检测该模式并采取适当的操作。

\n\n

如果不知道按下粘贴时正在运行的 UNIX 程序,则无法回答更具体的答案(防止行被截断)。

\n\n

剪贴板管理器也许就是您所需要的。

\n

  • 第二个答案是什么? (5认同)

Qua*_*odo 5

Bash 现在提供了以下enable-bracketed-paste选项

enable-bracketed-paste
当设置为“On”时,Readline 将以某种方式配置终端,使其能够将每个粘贴作为单个字符串插入编辑缓冲区,而不是将每个字符视为已被读取从键盘。这可以防止粘贴的字符被解释为编辑命令。默认值为“关闭”。

因此,将其添加到~/.inputrc

set enable-bracketed-paste on
Run Code Online (Sandbox Code Playgroud)