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

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

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

答案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

然后使可执行文件并设置为视觉:

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

bash提示符下(或者我认为是任何动力提示符),您可以通过按下来调用来readline复制当前命令输入。Ctrl-X Ctrl-Eedit-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"

您可以使用自动机创建一个服务接收没有输入正在应用终端并执行单个运行 AppleScript 脚本操作由上述代码组成。保存,并可选择在系统偏好设置 » 键盘 » 键盘快捷键 » 服务

相关内容