Есть горячая клавиша, чтобы выбрать весь текст ввода в строке ввода в Terminal.app OS X?
1 ответ
Вы можете попробовать edit-and-execute-command()
(manual) через подходящий $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», состоящее из приведенного выше кода. Сохраните и при необходимости назначьте сочетание клавиш в Системных настройках »Клавиатура» Сочетания клавиш »Службы.