Örnek: F12Anahtarı komuta echo "foobar"
her F12bastığımda "foobar" mesajı ekrana yazdırılacak şekilde bağlamak istiyorum . İdeal olarak, sadece yerleşikler değil, herhangi bir rastgele kabuk komutu olabilir. Bu nasıl yapılır?
Yanıtlar:
Bir tuşun çıkardığı karakter sırasını komut satırında Ctrl- tuşuna basıp v, ardından ilgilendiğiniz tuşa basarak belirleyebilirsiniz. Sistemimde F12, anladım ^[[24~
. ^[
Temsil eder Esc. Farklı terminal türleri veya terminal emülatörleri, aynı anahtar için farklı kodlar yayabilir.
Bash isteminde, anahtar makroyu etkinleştirmek için buna benzer bir komut girebilirsiniz, böylece deneyebilirsiniz.
bind '"\e[24~":"foobar"'
Şimdi, tuşuna bastığınızda F12, daha fazla düzenleme için komut satırında "foobar" göreceksiniz. Bir tuş vuruşunun hemen bir komut girmesini istiyorsanız, yeni bir satır ekleyebilirsiniz:
bind '"\e[24~":"pwd\n"'
Şimdi tuşuna bastığınızda F12, geçerli dizini, basmanıza gerek kalmadan görüntüleyeceksiniz Enter. Ya satıra zaten bir şey yazdıysanız ve otomatik olarak çalışan bunu kullanırsanız? Dağınık olabilir. Ancak, makronuzun bir parçası olarak satırı temizleyebilirsiniz:
bind '"\e[24~":"\C-k \C-upwd\n"'
Uzay emin olur Ctrl- uçalmasını zili tutmaya silmek için bir şey vardır.
Makroyu istediğiniz şekilde çalıştırdıktan sonra, ~/.inputrc
dosyanıza ekleyerek onu kalıcı hale getirebilirsiniz . bind
Komuta veya tek tırnak dış kümesine gerek yoktur :
"\e[24~":"\C-k \C-upwd\n"
Düzenle:
Ayrıca, mevcut komut satırını bozmadan bir şey yürütecek bir anahtar bağlama da oluşturabilirsiniz.
bind -x '"\eW":"who"'
Sonra, örneğin bir kullanıcı adı gerektiren bir komut yazarak ediyoruz ve siz basabilirsiniz, oturum kullanıcının isimlerini bilmemiz gerekir iken Alt- Shift- Wve çıkış who
görüntülenir ve hızlı tekrar düzenlenmesini olacak Kısmi komutunuz bozulmamış ve imleç satırda aynı konumdadır.
Ne yazık ki, bu F12iki karakterden fazla çıktı veren anahtarlar için düzgün çalışmıyor . Bazı durumlarda bu çözülebilir.
Komut ( who
bu durumda) herhangi bir yürütülebilir - bir program, komut dosyası veya işlev olabilir.
bind '"\C-q": menu-complete'
örneğin (veya içinde senin ~/.inputrc
: "\C-q": menu-complete
). Ayrıca stty -ixon
, ~/.bashrc
akış denetimini devre dışı bırakmanız ve ^ S ve ^ Q'yu kullanılabilir hale getirmeniz gerekebilir .
^[
temsil ettiğini söylüyorsunuz esc
ve sonra \e
örneğinizde onun yerine geçiyor görünüyorsunuz . Neden lütfen açıklar mısınız?
^[
Çıktı gösterimidir. Girmenin \e
bir yolu (bunun ^[
için çalışmıyor).
Bash anahtar bağlamalarını ~/.inputrc
(GNU Readline kitaplığı için yapılandırma dosyası) içinde tanımlayabilirsiniz . Sözdizimi
<anahtar kelime veya anahtar adı>: makro
Örneğin:
Control-o: "> output"
düğmesine bastığınızda "> çıktı" ekleyen bir makro oluşturur ControlO
"\e[11~": "echo foobar"
tuşuna bastığınızda "echo foobar" ekleyen bir makro oluşturacak F1... Anahtarın ne anlama geldiğini bilmiyorum F11.
Düzenle:
.inputrc
\n
satır besleme için kaçış sırasını anlar , böylece kullanabilirsiniz
"\e[11~": "echo foobar\n"
Komut verildikten sonra etkin bir şekilde 'enter tuşuna basın'.
Alt
kullanımı \e
, mesela "\eo": "> output"
.
.inputrc
bkz hackaday.com/2018/01/19/linux-fu-custom-bash-command-completion
Bu çözüm X11 ortamlarına özgüdür ve bash ile ilgisi yoktur, ancak aşağıdakileri .Xmodmap'lerinize ekler.
% loadkeys
keycode 88 = F12
string F12 = "foobar"
%
F12'ye basıldığında "foobar" dizesini terminale gönderecektir.
Ctrl+B
Bir komuta bağlanmak istedim . Yukarıdaki bir cevaptan esinlenerek, kullanmaya çalıştım bind
ama hangi şifreli dalgalı çizgiler ( \e[24~
?) Dizisinin tercüme edildiğini çözemedim Ctrl+B
.
Mac'te, Terminal uygulamasının Ayarlar, Profiller -> Klavye -> +
bölümüne gidin, ardından peşinde olduğunuz klavye kısayoluna basın ve çıkar. Benim için başarıyla komuta bağlandığım Ctrl+B
sonuçlandı\002
bind '"\002":"echo command"'
Ayrıca, komutun hemen çalıştırılmasını istiyorsanız (yalnızca komut istemine eklenmek değil), aşağıdaki gibi komutunuzun sonuna Enter'ı ekleyebilirsiniz:
bind '"\002":"echo command\015"'