Los*_*oul 10 command-line shell clipboard
无论我使用 ctrl+shift+v 还是从右键单击菜单中粘贴,都会发生这种情况。
可以做些什么来防止这种行为?
不要复制多行文本进行粘贴。我几乎可以保证您只是复制了该行的最后一部分。如果您三次单击以复制要粘贴的那行代码,则会在该行的末尾获得换行符。如果您想确定这确实是问题所在,请复制除最后一个字母/数字外的整行,然后查看是否粘贴还包括换行符。
您粘贴的文本包含一个尾随换行符。当您粘贴换行符时,在终端中运行的 shellEnter会将其视为按下,因此它会执行该命令。
粘贴操作由终端模拟器执行;它将粘贴的文本传递给在终端中运行的应用程序,就像传递用户键入的文本一样。请参阅键盘输入和文本输出如何工作?有关输入如何工作的更多信息。应用程序(此处为外壳)无法区分击键和粘贴操作。
如今,许多终端仿真器都支持括号粘贴。在括号粘贴模式下,应用程序可以将粘贴操作与击键区分开来。括号粘贴仅在应用程序对粘贴的文本执行不同操作时才有用,因此它是通过支持应用程序启用的,而不是由终端模拟器的用户配置的。
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
Run Code Online (Sandbox Code Playgroud)
有了这个在你的.zshrc,你可以按Ctrl+ Alt+V插入初选,或Ctrl+ U Ctrl+ Alt+V插入剪贴板中的内容。它们被插入到光标之前,除了没有尾随换行符之外没有改变。有关bash 中的类似内容,请参阅在 bash 和 X11 之间共享剪贴板。
如果你使用 bash 作为你的 shell,你可以按下Ctrl-X Ctrl-E来调出一个编辑器(由 $VISUAL 或 $EDITOR 定义,例如vi或者也许nano)。
然后,您可以像编辑文件一样将命令粘贴到该文件中。如果您保存并退出,它们将被执行。或者,如果您不保存就退出,则取消。