Ö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, ~/.inputrcdosyanıza ekleyerek onu kalıcı hale getirebilirsiniz . bindKomuta 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ış whogö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 ( whobu 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, ~/.bashrcakış denetimini devre dışı bırakmanız ve ^ S ve ^ Q'yu kullanılabilir hale getirmeniz gerekebilir .
^[temsil ettiğini söylüyorsunuz escve 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 \ebir 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\nsatı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'.
Altkullanımı \e, mesela "\eo": "> output".
.inputrcbkz 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+BBir komuta bağlanmak istedim . Yukarıdaki bir cevaptan esinlenerek, kullanmaya çalıştım bindama 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+Bsonuç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"'