Yanlışlıkla bir terminalde Ctrl-S'ye bastıktan sonra nasıl çözülür?


729

Bu benim için oldukça sık görülen bir durum: Ctrl-Sbir terminalde (farklı bir niyete) bastığımdan sonra, onunla olan etkileşim (girdi ya da çıktı) donuyor. Muhtemelen bir çeşit "kaydırma kilidi" ya da her neyse.

Bundan sonra terminali nasıl çözerim?

(Bu sefer, birlikte çalışıyoruz apt-shell, bir iç bashurxvtözel işleme sorumludur bunlardan --not emin Ctrl-SBirlikte geriye komutların geçmişini arıyordu: C-rtaleb için her zamanki gibi, ama sonra geri" gitmek istedi "her zamanki gibi tarih boyunca ileri - en azından Emacs - C-s( 1 , 2 , 3 ), fakat bu terminalin donmasına neden oldu. Peki, geçmişe bakmak için kaydırma / sayfalama hala terminalde çalışıyor, ancak etkileşim yok orada süreçleri çalıştırmak ile.)


23
Çalışıyordum vimve düzenlemelerimi kaydetmek için Ctrl-S tuşlarına basmıştım. Uh-ohXD
ADTC,

4
Bu neden ilk sırada var?
AslaMind9

Yanıtlar:


862

Ctrl-Q

Bunu tamamen devre dışı bırakmak için stty -ixonbir başlangıç ​​komut dosyasına yapıştırın . Herhangi bir tuşun bir şeylerin tekrar akmasını sağlamak için kullanın stty ixany.

ps: Ne terminal ne de bunu yapan kabuk değil, OS'nin terminal sürücüsü.


8
Teşekkür ederim! Btw, orada önerdiler Ctrl-C; o da işe yarıyor mu? (Ve başka bir yerde , Ctrl-Qtıpkı senin gibi önerdiler .)
imz - Ivan Zakharyaschev

23
Ctrl-C çalışıyor, fakat aynı zamanda genellikle istemediği bir kesme sinyali de gönderir. (Btw, bunlar için kullanılan anahtarların hepsi yapılandırılabilir stty.)
ak2

2
Ben elma] [klon bu kombinasyonu çalıştığımı hatırlıyorum ve o da orada çalıştı - Ctrl-Sve sonra Ctrl-Qdevam etmek.
sashoalm

19
TANRIYA ŞÜKÜR !! Bu beni yıllardır rahatsız eden bir şeydi. VIM'in bunu, ne olursa olsun yapmak yerine, tasarruf için yerel bir kısayol olarak henüz uygulamadığından emin değilim. Neredeyse tüm uygulamalarda geçerli olan CTRL + S (kısayolu kaydet) doğal kullanımından dolayı donmuş VIM ekranı olan hapishaneden bir kaçış var.
Kraang Prime,

8
@SanuelJackson Ctrl-S "kısayolu kaydet" hemen hemen tüm DESKTOP uygulamasında EXCEPT vim. Ve Emacs hariç. Ve Nano. Ve diğer her "uygulama" da, bir terminalde çalışabilir, çünkü tam olarak terminal tarafından akış kontrolü için kullanıldığından. Ctrl-Alt-FN kısayollarını kullanarak Linux Masaüstü uygulamasını bulamamanızın nedeni aynıdır: çünkü zaten sistem tarafından kullanılmaktadırlar.
gerlos

384

Ctrl- Qaslında cevap. Ak2'nin doğru cevabı sınırına sığmayacak kadar uzun bir tarih yazacağımı düşündüm .

Karanlık çağlarda, bir terminal, uzak bir cihaza (aslında bir başka terminalden bağlanan teletiplerin uzun bir tel üzerinden veya modemli telefon hatları üzerinden kullanımı çok daha kolaydı çünkü uzak bir cihaza bağlı) büyük bir ekipman parçasıydı. Unix gelişirken, ASCII kodu zaten çok iyi kurulmuştu (IBM'in rakip EBCDIC kodu hala dikkate alınması gereken bir güç olmasına rağmen).

İlk terminaller, alınan her karakterin basılı bir kaydını tuttu. Karakterler ulaştığı sürece, en azından yazıcı kafasının yazabildiğinden daha hızlı değil. Ancak, CRT tabanlı terminaller mümkün olur olmaz, sorun sadece CRT'ye yaklaşık 25 hattın sığmasına neden oldu ve 25 satırlık 80 karakter yeterli RAM'i, hiç kimsenin üstünden kaydırılan karakterler için daha fazla RAM sağlama konusunda ciddi bir şekilde düşünmeyi düşünmediği kadar RAM temsil etti. ekran.

Bu nedenle, gönderen ucun okuyucunun yetişmesine izin vermek için duraklatılması gerektiğine dair bir kongre yapıldı.

7 bitlik ASCII kodunun karakterleri kontrol etmek için ayrılmış 33 kod noktası vardır (0 - 31 ve 127). Bunlardan bazıları gibi gerçekten iyi kurulmuş amaçları vardı NUL, (boş kağıt şerit parçacığı, boşluklar ve eklemeler için lider) DEL(yedi delikler açarak gösterilen kağıt banda karakterler "üzerinde çarpı"), BEL(ding!), CR, LF, Ve TAB. Ancak dört (terminal cihazı kendisi kontrol etmek için açıkça tanımlanmış DC1için DC4aka Ctrl + Q, Ctrl + R, Ctrl + S ve Ctrl + T).

En iyi tahminim, bazı mühendislerin (anımsatıcılar giderken), "Durdur" için "S" ve "Devam" için "Q" 'nun çok kötü olmadığını düşündüğü ve DC3"lütfen göndermeyi bırak" DC1anlamına geldiği ve "tamam" anlamına geldiğidir. , şimdi göndermeye devam et ".

Bu kongre bile, Unix'in dünyaya gitmek için Bell Laboratuarlarında yuva bıraktığı zamanlar tarafından çoktan kurulmuştu.

Kongre, yazılım akış kontrolü olarak bilinir ve gerçek seri cihazlarda oldukça yaygındır. İletişim kanalında bu karakterlerden herhangi birinin başka bir amaç için kullanılmasını önlediği için doğru şekilde uygulanması kolay değildir ve durdurma sinyalinin, alıcı son kutusundan daha fazla göndermekten kaçınmak için bekleyen herhangi bir karakterin önünde ele alınması gerekir. üstesinden gelmek.

Pratik ise, akış kontrolü için seri veri akışından gelen bant dışı ek sinyallerin kullanılması büyük ölçüde tercih edilir. Ek sinyal kablolarını sağlayabilen doğrudan kablolu bağlantılarda, kullanımda bu karakterleri serbest bırakan kullanımda donanım el sıkışmalarını bulacaksınız.

Tabii ki, günümüzün terminal penceresi gerçek bir fiziksel seri port kullanmıyor, kaydırma çubuklarına sahip ve gerçekten herhangi bir yazılım anlaşması gerektirmiyor. Ancak kongre devam ediyor.

Richard Stallman'ın Ctrl + S'nin haritalanmasında emacs ilk yayınlarında artımlı olarak arama yapmakla ilgili şikayetler aldığını ve 7 bitlik bir yazılım akışı kontrollü bağlantıya bağlı olması gereken herhangi bir kullanıcı için oldukça anlamsız olduğu iddiasını hatırlıyorum.


2
Teşekkürler .. çok ilginç ... Merak ediyorum: Neden dünyadaki herkes "şimdi" bıraktığımız "Q" işlemine devam etmeyi seçsin? QRST gruplaması bunu açıklıyor .....
Peter.O

13
Bu tarihin için çok teşekkürler. Geçenlerde, benim kontrol ettiğim bir terminal emülatöründe varsayılan olarak akış kontrolünü devre dışı bıraktım, ancak hala kullanan Unix gelenekselcilerinden gelen protestolardan sonra hızlıca eski durumuna getirmek zorunda kaldım. Bunun yerine ixany bitini ayarladım, bu yüzden en azından ^ Q hakkında haberi olmadan ^ S tuşuna basan insanlar sıkışmaz.
ak2

3
@RBerteig Geri silme ve silme hakkında benzer bir öğrenim gördüm. Geri alma resmi olarak ^ H ve sil ^? Emacs geliştiricileri gibi bazı insanlar (yine Stallman?) Yardım gibi kısayollar gibi genel amaçlarla kullanılabilir. Kaçış dizisi ^ [[3 ~ veya onun yerine ^? ve geri al şimdi eski silme karakteri oldu ^? Aslında, özellikle Linux dağıtımlarında yamalar, terminfodaki anahtarları yeniden eşleştirmek için özel olarak yatarken, FreeBSD'deki ncurses yayandır, bazı sinir bozucu karışıklıkların çalışmamasına neden olur.
penguin359

23
Önce bazı kağıt bantlar ve bir ASR33 ile çalıncaya kadar DEL'in neden diğer kontrol karakterleriyle gruplanmak yerine 127 koduna sahip olduğunu merak ediyordum. Bir keresinde tüm delikleri delme etkisinin olduğunu fark ettiğimde, bu daha önce delinmiş herhangi bir karakterin üzerine silerek silinebileceği anlamına geliyordu.
RBerteig

3
@SanuelJackson Yakınıma baktığımdan beri bir süre geçti, ancak pencerelerle birlikte gelen varsayılan vimrc, uzun yıllar boyunca <Cs> ile ": güncelleme" eşlemesini yaptı. Ayrıca geçmişte de gvim için bazı dağıtımlarda gördüğümden de oldukça eminim. Bir terminalde vim kullanıyorsanız, ancak, bu tarih hala çok alakalı. Modern terminal emülatörleri hala akış kontrol tuşlarını kullanmaktadır, bu nedenle vim onları haritalandırsa bile, her kullanıcı kabul edilen cevapta açıklandığı gibi akış kontrolünü devre dışı bırakmak için kendi yolundan çıkmadıkça asla görmez.
Drew
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.