为什么终端机粘贴文本后会自动输入我的命令?


9

无论我使用ctrl + shift + v还是从右键菜单中粘贴,都会发生这种情况。

如何停止这种行为?


需要更多解释才能理解您的问题
SHW 2015年

也许Windows上的ConEmu可以满足您的要求-尝试粘贴包含换行符的内容时,它会在继续之前向您发出警告。感觉不错。也许有一个具有此功能的Linux终端模拟器?
布兰丁

4
我打赌您在复制文本时会复制结尾的“ \ n”(换行符,您不会在文本上看到它,但是如果有换行符,它将出现在文本上),这将模拟按ENTER键,因此执行命令。
赫伯特2015年

这可能是重复的-unix.stackexchange.com/questions/202732/…我不知道那个问题中提到的“括号内粘贴”。我通常将文本编辑器与终端结合使用,然后仔细地将想要复制的部分复制/粘贴到终端中。
布兰丁

Answers:


6

不要复制多行文字进行粘贴。我几乎可以保证您只是复制了该行的最后一部分。如果您单击三次以复制要粘贴的代码行,则将在行尾添加换行符。如果您想确定这确实是问题所在,请复制整行(最后一个字母/数字除外),然后查看粘贴是否还包括换行符。


这仅在我复制多行代码时发生。现在我明白了为什么。
LostSoul 2015年

7

您要粘贴的文本包括尾随换行符。粘贴换行符时,在终端中运行的shell会看到按Enter,因此它会执行命令。

粘贴操作由终端仿真器执行;它将粘贴的文本传递给终端中运行的应用程序,就像传递用户键入的文本一样。请参阅键盘输入和文本输出如何工作?有关输入如何工作的更多信息。该应用程序(在此为外壳程序)无法区分击键和粘贴操作。

如今,许多终端仿真器都支持带括号的粘贴。在方括号粘贴模式下,应用程序可以将粘贴操作与击键区分开。括号粘贴仅在应用程序对粘贴的文本执行某些操作时才有用,因此可以通过支持应用程序来启用它,而不是由终端仿真器的用户配置的。

Zsh 5.1(于几周前发布,因此在大多数发行版中均不可用)添加了对括号内粘贴模式的支持。粘贴文本时,它只是插入到命令行中,可以在按Enter执行命令行之前对其进行编辑。

oh-my-zsh的用户即使在早期版本的zsh中也可以使用安全粘贴插件

在zsh中,您可以做的另一件事是使选择内容作为字符串插入,并带有引号(在每个shell特殊字符(如空格)之前加反斜杠)。键入`xsel`以获取主要选择(自动鼠标选择),或`xsel -b`获取剪贴板内容(以Ctrl+ 复制的文本C),然后按Tab

如果您使用的是zsh较旧的版本,并且希望插入剪贴板内容而不引用它,则可以定义一个函数来插入所选内容。

function zle_insert_x_selection {
  LBUFFER+=$(xsel ${NUMERIC+-b} -o </dev/null)
}
zle -N zle_insert_x_selection
bindkey '\e\C-v' zle_insert_x_selection

使用此功能.zshrc,您可以按Ctrl+ Alt+ V插入主要选择,或按Ctrl+ U Ctrl+ Alt+ V插入剪贴板内容。它们被插入到光标之前,除了没有尾随换行符外没有改变。请参阅在bash和X11之间共享剪贴板,以获取与bash类似的内容。


7

如果您使用bash作为外壳,则可以按调Ctrl-X Ctrl-E出一个编辑器(例如,由$ VISUAL或$ EDITOR定义,vi或者nano)。

然后,可以像编辑文件一样将命令粘贴到该命令中。如果您保存并退出,它们将被执行。如果您不保存就退出,则取消该操作。


这种方法对我不起作用。
LostSoul 2015年

3

要将多行粘贴到命令提示符中,请在粘贴之前打开单引号或双引号。

$ echo 'paste
...
... '

然后,您可以按回车键回显它。当您向上箭头时,所有粘贴的行将在一条可编辑行上。

只要您粘贴的文本中没有单引号,此方法就起作用。


1

在文本编辑器窗口中,使用以下快捷键复制不带\ n的文本(换行符):

  • Shift+ HomeCtrl+ Insert–复制光标之前的行的一部分。
  • Shift+ EndCtrl+ Insert–复制光标之后的部分行。
  • HomeShift+ EndCtrl+ Insert–复制所有不带\ n的行。

在浏览器窗口中或其他文本不可编辑的情况下,请使用以下两种技术之一:

  • 首先复制到文本编辑器(首选,因为这样您就可以编辑命令)。
  • 仅选择该行上的文本(不将选择区域向右扩展到最后一个字符之外),然后Ctrl+ Insert并粘贴到终端窗口。

正确选择(无\ n)的外观:

ls -al

错误选择(带有\ n)的样子:

ls -al
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.