在Terminal.app中选择或复制当前输入行


2

是否有热键可以选择OS X的Terminal.app输入行中的所有输入文本?


您是否想要选择意图复制或意图更换?
NReilingh 2011年

所有这些
erikvold 2011年

如果你想复制和替换,我真的建议你研究一下edit-and-execute-command。它应该能够用适当的最小脚本完成两者EDITOR
Daniel Beck

2
这将是有点可疑,因为命令行实际上没有所选文本的概念,如果继续键入,也不会替换鼠标选择的文本。你的问题的答案是“不”,但丹尼尔的建议可能会帮助你破解一个替代品。其他一些可能有用的东西:control-a和control-e可用于跳转到你在提示符下输入的内容的开头和结尾,你可以使用Automator,Services和设计自己的终端按键热键AppleScript GUI脚本。
NReilingh 2011年

@NReilingh Pinging你; 当你想到我的建议时,你可能会对我能想到的东西感兴趣。
Daniel Beck

Answers:


1

您可以尝试通过合适的或过滤edit-and-execute-command()手动):$EDITOR$VISUAL

$ touch foo.sh
$ open foo.sh

foo.sh内容设置为以下内容,并保存:

#!/usr/bin/env bash
# copy current command input to clipboard -- requires local session
cat $1 | pbcopy

# clear the prompt, so no command gets executed when closing this script
# comment out the following line to execute the command you entered instead
echo -n "" > $1
exit 0

然后制作可执行文件并设置为visual:

$ chmod +x foo.sh
$ export VISUAL=/Users/danielbeck/foo.sh

bash提示符(或readline我认为的任何动力提示)上,您可以通过按Ctrl-X Ctrl-E来调用来复制当前命令输入edit-and-execute-command()

编辑您的~/.inputrc文件以更改该热键。编辑你.bash_profile的保持这个$EDITOR/ $VISUAL- 缺点是显而易见的$EDITOR,不幸的是你永远不会再适当


或者,您可以尝试复制此用户正在做的事情,但他正在使用zsh,而不是bash


终端本身不知道当前行的哪一部分是你的提示,你的输入是什么部分。因此,例如通过AppleScript访问它的行一般不起作用。

但是,您可以读取当前选项卡的完整输出并获取其最后一行,并通过筛选尝试删除它的提示部分。

我的提示结束$,因此以下命令有效:

tell application "Terminal" tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2-"

它将获取当前窗口的当前选项卡的history属性,并过滤它sed以删除所有空行,然后使用最后一行tail,然后删除所有内容,包括第一$行(即我的提示)使用cut

此程序的输出是您当前的命令行。真是毫无意义的运动:

~ $ osascript Library/Scripts/get_line.scpt 
 osascript Library/Scripts/get_line.scpt

要在最后将其复制到剪贴板,请更改为以下内容:

tell application "Terminal" to tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2- | pbcopy"

您可以使用Automator创建在应用程序终端中接收任何输入服务,并执行包含上述代码的单个“运行AppleScript脚本”操作。保存,并可选择在系统偏好设置»键盘»键盘快捷键»服务中指定键盘快捷


您(或其他任何人)在最后一个示例中找到了摆脱提示字符串的更好方法吗?
Lri 2011年

@Lri您可以在一个单独的bash进程中echo $PS1加载配置文件后创建一个好的模板,从输出中删除它们。不幸的是,一样的东西$PWD,并date会打破这种方法。或者,可以$PS1临时备份到另一个变量,并在执行命令后恢复它。
丹尼尔贝克
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.