Apakah ada hotkey untuk memilih semua teks input pada baris input di Terminal.app OS X?
edit-and-execute-command
. Seharusnya bisa menyelesaikan keduanya, dengan skrip minimal yang sesuai EDITOR
.
Apakah ada hotkey untuk memilih semua teks input pada baris input di Terminal.app OS X?
edit-and-execute-command
. Seharusnya bisa menyelesaikan keduanya, dengan skrip minimal yang sesuai EDITOR
.
Jawaban:
Anda dapat mencoba memfilter edit-and-execute-command()
( manual ) melalui yang sesuai $EDITOR
atau $VISUAL
:
$ touch foo.sh
$ open foo.sh
Tetapkan foo.sh
konten sebagai berikut, dan simpan:
#!/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
Kemudian buat executable dan atur ke visual:
$ chmod +x foo.sh
$ export VISUAL=/Users/danielbeck/foo.sh
Pada bash
prompt (atau readline
prompt bertenaga apa pun menurut saya), Anda dapat menyalin input perintah saat ini dengan menekan Ctrl-X Ctrl-E
untuk memanggil edit-and-execute-command()
.
Edit ~/.inputrc
file Anda untuk mengubah hotkey untuk itu. Sunting Anda .bash_profile
untuk menyimpan ini karena $EDITOR
/ $VISUAL
- kelemahan Anda jelas $EDITOR
, sayangnya Anda tidak akan pernah memiliki hak yang layak lagi
Atau, Anda dapat mencoba meniru apa yang dilakukan pengguna ini , tetapi dia menggunakan zsh
, bukan bash
.
Terminal itu sendiri tidak mengetahui bagian mana dari baris saat ini adalah prompt Anda, dan bagian apa input Anda. Jadi mengakses garis itu misalnya melalui AppleScript tidak akan berfungsi secara umum.
Anda dapat, bagaimanapun, membaca output lengkap dari tab saat ini dan mendapatkan baris terakhirnya, dan, melalui pemfilteran, cobalah untuk menghapus bagian prompt dari tab itu.
Prompt saya diakhiri dengan $
, jadi perintah berikut ini berfungsi:
tell application "Terminal" tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2-"
Ini akan mendapatkan history
properti tab saat ini dari jendela saat ini, dan menyaringnya sed
untuk menghapus semua baris kosong, kemudian mendapatkan baris terakhir menggunakan tail
, dan kemudian menghapus semuanya hingga dan termasuk yang pertama $
dari baris (yaitu prompt saya) menggunakan cut
.
Output dari program ini adalah baris perintah Anda saat ini. Latihan yang benar-benar tidak berguna:
~ $ osascript Library/Scripts/get_line.scpt
osascript Library/Scripts/get_line.scpt
Untuk menyalinnya ke clipboard Anda di akhir, ubah sebagai berikut:
tell application "Terminal" to tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2- | pbcopy"
Anda dapat menggunakan Automator untuk membuat layanan yang tidak menerima input di terminal aplikasi dan melakukan tindakan Jalankan AppleScript Script tunggal yang terdiri dari kode di atas. Simpan, dan secara opsional tentukan pintasan keyboard di Preferensi Sistem »Keyboard» Pintasan Keyboard »Layanan .
bash
proses terpisah , echo $PS1
setelah memuat file profil untuk membuat template yang baik yang dihapus dari output. Sayangnya, hal-hal seperti $PWD
dan date
akan merusak metode ini. Atau, seseorang dapat membuat cadangan $PS1
ke variabel lain sementara, dan mengembalikannya setelah menjalankan perintah.