Answers:
您可以使用screen(1)
您选择的终端仿真器中(xterm
,gnome-terminal
,...)。
您需要的功能是内置的screen
。您需要熟悉它的工作方式:
您可以“复制”命令,然后在另一个终端中“粘贴”。
screen
很有趣,一旦您开始使用它,您会想知道完全没有使用它的可能性。
screen
命令,因此我将其安装在gnome-terminal中并screen
在终端中启动。但此后无法开始。另外,我也不明白内置屏幕的含义。
man screen
。另外,我写了“内置在屏幕上”,这意味着复制/粘贴功能是screen
设计使然。
space
键来选择所需的区域。您需要使用Y
复制整行或所需区域。屏幕是vi
动作友好的。
AltGr
钥匙?我有Alt
screen
工具无法正常工作在此处进行了说明。而且它似乎并不能为这个问题提供答案。
除了已经提供的答案之外,您还可以考虑使用更灵活的终端仿真器。
如果准备将终端更改为rxvt-unicode,则可以使用urxvt-perls之类的工具:在该终端仿真器中提供以下键盘功能的脚本集合:
您只需安装软件包,然后在上添加几行~/.Xresources
,然后就可以永久拔掉啮齿动物的插头。
您可以使用以下程序来执行此操作xclip
:
NAME
xclip - command line interface to X selections (clip‐
board)
安装后,可以使用它连接到X剪贴板。不幸的是,这在您的mysql
环境中不起作用(它有用于复制行的缓冲区),但是如果您要运行“正常”命令,则可以。例如 :
$ This is a long command line
键入CtrlA以转到行的开头,将命令用引号引起来,然后将其回显:
$ echo -e "This is a long command line" |xclip
现在,单击鼠标中键剪贴板中有“这是一个很长的命令行”。
如果要不使用鼠标进行粘贴,则取决于粘贴的位置。您可以通过运行以下命令粘贴到另一个终端:
$ xclip -o
您只需将命令杀死(剪切)CtrlK然后粘贴即可粘贴到同一终端中CtrlY。
您还可以使用bash的历史记录在终端之间保存命令。将此行添加到您的~/.bashrc
:
PROMPT_COMMAND='history -a; history -r'
PROMPT_COMMAND
是一个特殊的bash变量。如果设置了该值,则在发出新提示之前将其作为命令执行。history -a
会将当前会话的历史记录写入历史记录文件,history -r
然后重新加载该文件。这意味着您运行的每个命令都将立即写入历史文件。
现在,当您运行一个长长的命令行时,您可以切换到另一个终端并按回车键(只需运行$PROMT_COMMAND
,或者打开一个新的终端窗口),该终端的历史记录便可以访问它。如果现在点击Up,则可以在新终端上运行它。
$ xclip -o
这不是我想要的,因为它只是打印出我想要的内容xclipe
。但对于+1 Ctrl+A
,接着Ctrl+K
和Ctrl+Y
用于在同一个终端至少剪切并粘贴到。
@evilsoup提出了一个好的解决方案,但它经常中断。
这是一个永不中断的解决方案。
history | tail -2 | head -1 | xclip -selection clipboard
只需运行此命令,它将把您刚运行的命令复制到剪贴板。
基本上,它的作用是打印您的命令历史记录,并接收倒数第二个命令,并将其馈送到剪贴板(最后一个命令本身就是它,因此它选择倒数第二个命令)。
在快速解决方案上进行开发,这是我编写的一个小函数,非常聪明,它将复制上次使用的命令。您还可以提供数字参数来复制last-nth命令。例如,复制倒数第二条命令2
作为参数提供
myclipcopy () {
if [ -z $1 ]
then # if no argument was provided then just copy the last used command
history | tail -2 | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
echo 'Anyways, the following command has been copied:'
history | tail -2 | head -1| sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'
else
myindex=$(( $1+1 ))
history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
echo "The following command has been copied:"
history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'
fi
#Delete this command itself from the history
myhisnum=$(history | tail -1 | grep -oP '\s\d+\s' | grep -oP '\d+'); history -d $myhisnum
}
将上述功能复制粘贴到~/.bashrc
文件中。请注意,如果将其放在单独的bash脚本文件中并运行该脚本,则该脚本将无法工作,因为在这种情况下,history命令将无法访问您的历史记录。
最后,将其运行为:
myclipcopy 3
# This copies the third-last command
此外,此功能添加的一个很酷的功能是,它在运行后会从历史记录中删除。这很有用,因为命令的“向后”索引不会更改。
screen
。评分第二高的答案也假定bash
和linux
。而且,假设bash
并不重要,因为脚本仍可以在zsh或大多数其他shell中找到。
此命令使用bash的历史记录扩展(因此!!
扩展到您在终端输入的最后一行)。您可能必须安装xclip
或xsel
。
echo "!!" | xclip -selection clipboard
echo "!!" | xsel -i --clipboard
这会将您的最后一个命令放在Ctrl+ v剪贴板中,因此您将能够粘贴到任何GUI程序中(或在大多数终端仿真器中使用Ctrl+ Shift+ v或"+p
在vim中)。
对于包含双引号的某些行,这将中断,例如:
$ echo "foo;bar"
foo;bar
$ echo "!!"
echo "echo "foo;bar""
echo foo
The program 'bar' is currently not installed. You can install it by typing:
sudo apt-get install bar
它将对您作为示例给出的命令起作用;仅在双引号转义时才有问题;
&
&&
|
||
,依此类推。
echo !!
就可以正常工作(除非在您以前的命令以或它本身采用的其他几个选项开头的不太可能的情况下)。-n
-e
echo
也许不是最方便的解决方案,但是我使用了它,因此它不需要其他任何软安装就可以对其他人有所帮助。
您需要在任何方便的目录中创建一个临时文件
将所需的方向或文本传输到该文件。对于转移方向,您可以使用
echo $(pwd) 1> tempo
要从文件获取方向,请使用命令
cd $(tail -n 1 tempo)
对于复制和粘贴命令,该系统当然可以使用。希望对您有所帮助