Ctrl-C gibi bash kısayol tuşları değiştirilsin mi?


21

Kubuntu 10.04 kullanıyorum. Bash (terminal) için bazı standart kısayol tuşlarını değiştirmek istiyorum.

Ayarlamak istediğim kısayollar:

  • Ctrl- Cterminaldeki seçili metni panoya kopyalamak için.

  • Ctrl- Vpanodan terminale yapıştırmak için.

  • Ctrl- Zterminaldeki geçerli satırdaki düzenlemeyi geri almak için.

  • Ctrl- Shift- C(veya daha iyisi, Super- C) komutu sonlandırmak için.

  • Ctrl- Shift- Z(veya Super- Z) arka plan komutu olacak.

  • Ctrl- Shift- V(veya Super- V) değişmez insert komutu olması (ya da her türlü Ctrl- zönce yaptığımız).

Bu değişiklikleri nasıl yapabilirim?

BTW, terminalin OS X üzerinde çalışma şeklini seviyorum. Komut tuşunun kullanılması, tüm kopyalama / yapıştırma komutlarını çok tutarlı hale getirir (OS X'teki diğer birçok şeyin aksine).

PS: Bash man sayfasını okudum ve yardımcı olmadı. Bana fikir verdi, ancak yukarıdaki kombinasyonlar için özel örneklere ihtiyacım var. Teşekkürler.


Bu "kısayolların" bazıları bash içinde "uygulanamaz", ancak terminalin kendisine konulmalıdır (xterm, gnome-terminal, konsole vb.) .. örneğin "seçilen metin", "pano"
akira

Yanıtlar:


10

Bunlar bashın özellikleri değil, terminal sürücüsünün özellikleri. Bu nedenle, tarafından belirtilirler stty(1).

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

5
TAMAM. İpucu için teşekkürler. Şimdi yine de hedefime ulaşmak istiyorum. Ayrıca inputrc'nin Ctrl-C'yi yeniden eşleştirebileceğini de biliyorum. Ama gerçekten nasıl yaptığımı umursamıyorum, sadece bu kısayolları bir terminalde nasıl yeniden eşleştireceğimizi bilmek istiyorum.
Paul

15
İşte "balık": stty intr \ ^ k (burada sonlandırma komutu eski adıyla Ctrl-C artık Ctrl-K olur, K herhangi bir alfa anahtarı olabilir) Hiç kimse "bana o balığı vermedi". Kendi başıma bulmak için çok çalıştım. Atasözleri ile vaaz vermek bir pislik gibi görünmenizi sağlar, IMO.
Paul

Ctrl + Shift + C ile nasıl yeniden eşleştirebilirsiniz?
crypdick

8

Bu neredeyse tamamen çözüldü. Çözümün bir kısmı ilk olarak http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ adresinde dikkatimi çekti. . Kopyala ve yapıştır kısayol tuşlarının konsole menü ayarları ile kolayca değiştirilebileceğine dikkat çekti. Bunu gördükten sonra, Ctrl-C ve Ctrl-V'yi kopyalayıp terminalle yapıştırmak yaklaşık 1 dakika sürdü.

Çözümün diğer kısmı stty man sayfasından net olmalıydı, ama (benim için) değildi. Sonunda yukarıda açıklananlar gibi çeşitli ipuçlarını temel alarak denemeler yaptım.

Hangi sayısal olmayan anahtarı sonlandırma komutu olarak Ctrl-C yerine koymak istediğime karar verdim. ("K" kullandım). Bir vardiya değiştiricisini stty'ye nasıl taşıyacağım hakkında hiçbir bilgi bulamadım, bu yüzden bundan vazgeçtim. Karar verildiğinde, tek yapmam gereken komut satırına aşağıdakileri girmekti:

stty girişi \ ^ k

Her şeyin istendiği gibi çalıştığını doğruladım.

Şimdi tek bir komutu yukarıdaki (stty intr \ ^ k) bir başlangıç ​​komut dosyasına yerleştirmem gerekti. Hangisinin "uygun" olduğunu bilmiyorum. Bu değişikliğin sistem çapında ve kalıcı olmasını istiyorum.

Komutu hangi komut dosyasına yerleştirmem gerektiği konusunda herhangi bir öneriniz var mı?

Ve son olarak, vaaz cevaplarına gelince, bunlar gereksiz ve yararsızdır.


Hiç "doğru" başlangıç ​​komut dosyasının ne olduğunu veya bunu yapmanın daha iyi bir yolunu belirlediniz mi? Aynı sorunla mücadele ediyorum (orijinal sorunuz). Ancak 'stty intr \ ^ k' ctrl-k'yi bağlayabilsem de, ctrl-c'yi bağlamaz ve ne 'stty intr undef' ne de 'stty intr = ^ -' bunu yaparsa, ctrl-c hala bir interupt gönderir . Ve 'stty -a' yaptığım hiçbir değişikliği göstermiyor.
EricS

4

Bunlardan bazıları normal KDE klavye kısayol mekanizması kullanılarak ayarlanabilir. Konsole'nin "Ayarlar" menüsünde, "Kısayolları Yapılandır" a tıklayın ve KDE tarafından işlenen fonksiyonların tuş bağlantılarını değiştirmek için kullanabileceğiniz bir iletişim kutusu göreceksiniz. Bu, kopyalamak için Ctrl + C'yi ve yapıştırmak için Ctrl + V'yi yeniden eşleştirmenize izin verir - ancak bunu yaptıktan sonra, bu anahtar dizilerin artık terminale aktarılmayacağını unutmayın, böylece kullanamazsınız. Örneğin, bir programı kesmek için Ctrl + C tuşlarına basın.

Diğer işlevler readline, dosyayı düzenleyerek yapılandırabileceğiniz kitaplık tarafından denetlenir ~/.inputrc. Ctrl + Z tuşlarının geçerli satırda yapılan düzenlemeleri geri almasını sağlamak için,

C-z: revert-line

ancak bu tuş dizisi büyük olasılıkla terminal tarafından zaten hapsolmuştur, bu yüzden sttyçalışmaya başlamadan önce onu bağlamak için kullanmanız gerekebilir . Önce (Ignacio'nun cevabında gösterildiği gibi) ^Zçıktısına bakın stty -ave sonra, örneğin, ortaya çıkarsa susp = ^Z, çalıştırın

stty susp ^-

bu anahtar eşlemeyi açmak için.

Sorduğunuz diğer değişikliklerin sttyIgnacio'nun söylediği gibi yapılması gerekir , çünkü bunlar terminal işlevlerdir, ancak tam olarak nasıl olduğundan emin değilim. Sorun şu ki, terminalin Shift'i tanıyıp tanımadığını veya bu bilgiyi nasıl aktaracağını bilmiyorum stty.


3

Bash , komut satırında emacsveya vimodunu kullanır . "Seçim" veya "pano" kavramları yoktur. "Kill buffer" ve "point", "mark", "word", "line", "kill" ve "yank" gibi şeyleri kullanır.

İçine GUI tarzı işlevsellik eklemek en iyisi sinir bozucu olacak ve tam olarak çalışmayacak. Sen fonksiyonlarını birleştiren denemek zorunda kalacak stty, readlineve (tahminen sizin terminali Terminal.appsizin için). Aşağıdaki gibi işlevleri yeniden eşleştirmek gerekir intr, susp, lnexthâlâ onların özelliklerini kullanabilmeniz için, vb.

Bu tür radikal değişikliklere karşı şiddetle tavsiye ederim. Sadece istediğini yapmak için tasarlanmamıştı.

Roma'dayken ...


Dave, tıpkı OS X gibi çalışan bir sistem için OS X kullanmanızı önerir miyim? Dennis'in ima ettiği gibi, onu çalıştırabilseniz bile, kendi makinenizde sizden başka bir şey olarak giriş yaptığınızda oldukça hobil edilirsiniz.
msw

Diğer komutları kefil edemiyorum ama kopyala ve yapıştır komut penceresinde mükemmel bir mantıklı ve çok kullanışlı. Onları sürekli olarak diğer pencereler ve konsol arasında kopyalayıp yapıştırmak için kullanıyorum ve bunu yıllardır yapıyorum. Shift-Ctrl-C ve Shift-Ctrl-V, Konsole için kutudan çıkar çıkmaz bu şekilde çalışır. Bunu yıllardır her gün yapmama rağmen, kaçınılmaz olarak Konsole'de Ctrl-c'yi unutup vurdum. Şahsen, "Roma'da iken" atasözünü uygulamayı bırakmaya ve var olan hemen hemen her uygulama gibi çalışmak için yeniden eşleştirmeye hazırım.
EricS

1

Ubuntu'yu çalıştırdım ve Kopyalama kısayolunu varsayılan Ctrl+ Shift+ ' Cdan daha normal ve basit Ctrl+' ya değiştirdim C. Ancak bu bana kesme komutu ^ C gönderememe sorununu yaşattı .

Sayesinde @ Paul cevap Ben komutu çalıştırarak bulundu

tty intr \^k

Ctrl+ Komutunu kullanarak kesme komutunu göndermeme izin verir K. Ancak bu komutun bir güçlük olan terminali her açtığımda çalıştırılması gerekiyordu (tıpkı kendisinden bahsettiği gibi).

Biraz daha fazla araştırma yaparak (googling 😂) Terminal her açıldığında bir komutun nasıl yürütüleceğini buldum (yine de Ubuntu'da) .

Böylece, nihayet aşağıdaki komutu çalıştırmak (bir kez) (Ubuntu 18.04 ve muhtemelen daha fazla) her zaman beklenen davranışı verecektir.

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

Son olarak, Kdüğmeyi kullanmamanız gerektiğini belirtmek gerekir . Sen değiştirebilir k seçtiğiniz her mektup girmek için yukarıdaki tüm komutları harfi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.