Apakah Anda ingin memilih dengan maksud untuk menyalin atau dengan maksud untuk mengganti?
NReilingh
semua yang di atas
erikvold
Jika Anda ingin menyalin dan mengganti, saya sangat menyarankan Anda melihat edit-and-execute-command. Seharusnya bisa menyelesaikan keduanya, dengan skrip minimal yang sesuai EDITOR.
Daniel Beck
2
Ini akan menjadi agak mencurigakan, karena baris perintah benar-benar tidak memiliki konsep teks yang dipilih, juga teks yang dipilih mouse tidak akan diganti ketika jika Anda terus mengetik. Jawaban atas pertanyaan Anda adalah "tidak", tetapi saran Daniel mungkin membantu Anda meretas pengganti. Beberapa hal lain yang mungkin membantu: control-a dan control-e dapat digunakan untuk melompat ke awal dan akhir dari apa pun yang Anda ketikkan pada prompt, dan Anda dapat merancang hotkey keystroke Anda sendiri untuk terminal menggunakan Automator, Layanan, dan Skrip GUI AppleScript.
NReilingh
@NReilingh Ping Anda; saat Anda memikirkan saran saya, Anda mungkin tertarik pada apa yang saya dapat lakukan.
Daniel Beck
Jawaban:
1
Anda dapat mencoba memfilter edit-and-execute-command()( manual ) melalui yang sesuai $EDITORatau $VISUAL:
$ touch foo.sh
$ open foo.sh
Tetapkan foo.shkonten 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
Pada bashprompt (atau readlineprompt bertenaga apa pun menurut saya), Anda dapat menyalin input perintah saat ini dengan menekan Ctrl-X Ctrl-Euntuk memanggil edit-and-execute-command().
Edit ~/.inputrcfile Anda untuk mengubah hotkey untuk itu. Sunting Anda .bash_profileuntuk 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 historyproperti tab saat ini dari jendela saat ini, dan menyaringnya seduntuk 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:
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 .
Sudahkah Anda (atau orang lain) menemukan cara yang lebih baik untuk menyingkirkan string cepat dalam contoh terakhir?
Lri
@Lri Anda dapat, dalam bashproses terpisah , echo $PS1setelah memuat file profil untuk membuat template yang baik yang dihapus dari output. Sayangnya, hal-hal seperti $PWDdan dateakan merusak metode ini. Atau, seseorang dapat membuat cadangan $PS1ke variabel lain sementara, dan mengembalikannya setelah menjalankan perintah.
edit-and-execute-command
. Seharusnya bisa menyelesaikan keduanya, dengan skrip minimal yang sesuaiEDITOR
.Jawaban:
Anda dapat mencoba memfilter
edit-and-execute-command()
( manual ) melalui yang sesuai$EDITOR
atau$VISUAL
:Tetapkan
foo.sh
konten sebagai berikut, dan simpan:Kemudian buat executable dan atur ke visual:
Pada
bash
prompt (ataureadline
prompt bertenaga apa pun menurut saya), Anda dapat menyalin input perintah saat ini dengan menekanCtrl-X Ctrl-E
untuk memanggiledit-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 lagiAtau, Anda dapat mencoba meniru apa yang dilakukan pengguna ini , tetapi dia menggunakan
zsh
, bukanbash
.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:Ini akan mendapatkan
history
properti tab saat ini dari jendela saat ini, dan menyaringnyased
untuk menghapus semua baris kosong, kemudian mendapatkan baris terakhir menggunakantail
, dan kemudian menghapus semuanya hingga dan termasuk yang pertama$
dari baris (yaitu prompt saya) menggunakancut
.Output dari program ini adalah baris perintah Anda saat ini. Latihan yang benar-benar tidak berguna:
Untuk menyalinnya ke clipboard Anda di akhir, ubah sebagai berikut:
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 .
sumber
bash
proses terpisah ,echo $PS1
setelah memuat file profil untuk membuat template yang baik yang dihapus dari output. Sayangnya, hal-hal seperti$PWD
dandate
akan merusak metode ini. Atau, seseorang dapat membuat cadangan$PS1
ke variabel lain sementara, dan mengembalikannya setelah menjalankan perintah.