วิธีการยกเลิกการตรึงหลังจากกด Ctrl-S ในเทอร์มินัลโดยไม่ตั้งใจ


729

มันเป็นสถานการณ์ที่เกิดขึ้นกับฉันบ่อยมาก: หลังจากฉันกด (ด้วยความตั้งใจที่แตกต่าง) Ctrl-Sในเทอร์มินัลการโต้ตอบ (อินพุตหรือเอาต์พุต) กับมันจะหยุดลง อาจเป็น "ล็อคการเลื่อน" หรืออะไรก็ตาม

ฉันจะยกเลิกการตรึงเทอร์มินัลหลังจากนี้ได้อย่างไร

(เวลานี้ฉันทำงานกับapt-shellข้างbashในurxvt- ไม่แน่ใจว่าอันไหนของพวกเขาที่รับผิดชอบการจัดการพิเศษCtrl-S: ฉันกำลังค้นหาประวัติของคำสั่งย้อนหลังด้วยC-rเหมือนปกติสำหรับ readline แต่แล้วฉันก็อยากกลับไป " "ส่งต่อผ่านประวัติโดยปกติ - อย่างน้อยใน Emacs - C-s( 1 , 2 , 3 ) แต่นั่นทำให้เทอร์มินัลหยุดการทำงานดีการเลื่อน / เพจจิ้งเพื่อดูสิ่งที่ผ่านมายังคงใช้งานได้ในเทอร์มินัล กับกระบวนการทำงานที่นั่น)


23
ฉันทำงานอยู่vimและกด Ctrl-S เพื่อบันทึกการแก้ไขของฉัน Uh-ohXD
ADTC

4
ทำไมมันมีอยู่ในตอนแรก?
neverMind9

คำตอบ:


862

Ctrl-Q

หากต้องการปิดใช้งานสิ่งนี้ให้ติดstty -ixonในสคริปต์เริ่มต้น ในการอนุญาตให้ปุ่มใด ๆ stty ixanyเพื่อได้รับสิ่งที่ไหลอีกครั้งใช้

ps: มันไม่ใช่ทั้งเทอร์มินัลและเชลล์ที่ทำสิ่งนี้ แต่เป็นเทอร์มินัลไดรเวอร์ของระบบปฏิบัติการ


8
ขอขอบคุณ! BTW, มีพวกเขาแนะนำCtrl-C; มันใช้งานได้เช่นกัน? (และในสถานที่อื่นพวกเขาแนะนำCtrl-Qเช่นเดียวกับคุณ)
imz - Ivan Zakharyaschev

23
Ctrl-C ทำงานได้ แต่ก็ยังส่งสัญญาณขัดจังหวะซึ่งโดยทั่วไปไม่ต้องการ (Btw, กุญแจที่ใช้สำหรับสิ่งเหล่านี้ล้วนผ่านการกำหนดค่าstty)
ak2

2
ฉันจำได้ว่าลองชุดค่าผสมนี้บน Apple ของฉัน] [โคลนและมันก็ทำงานได้เช่นกัน - Ctrl-Sจากนั้นจึงCtrl-Qกลับมาทำงานต่อ
sashoalm

19
ขอบคุณพระเจ้า !! นี่เป็นสิ่งที่ฉันมานานหลายปี ไม่แน่ใจว่าทำไม VIM ไม่ได้ใช้สิ่งนี้เป็นทางลัดในการบันทึกแทนที่จะเป็นสิ่งที่นรกทำ เป็นการดีที่จะรู้ว่ามีการหลบหนีออกจากคุกซึ่งเป็นหน้าจอ VIM ที่แช่แข็งเนื่องจากการใช้ CTRL + S (บันทึกทางลัด) ที่ใช้งานได้ตามปกติในเกือบทุกแอปพลิเคชันยกเว้น VIM
Kraang Prime

8
@SanuelJackson Ctrl-S "บันทึกทางลัด" สามารถใช้ได้ในแอปพลิเคชัน DESKTOP เกือบทั้งหมดยกเว้น vim และยกเว้น Emacs และนาโน และ "แอปพลิเคชั่น" อื่น ๆ ทุกตัวที่คุณสามารถเรียกใช้บนเทอร์มินัลเพราะเทอร์มินัลนั้นถูกใช้เพื่อควบคุมการไหล มันเป็นเหตุผลเดียวกันกับที่คุณจะไม่พบแอปพลิเคชัน Linux Desktop ที่ใช้ทางลัด Ctrl-Alt-FN: เพราะพวกมันถูกใช้โดยระบบแล้ว
gerlos

384

Ctrl- Qแน่นอนคำตอบ ฉันคิดว่าฉันโยนในประวัติศาสตร์เล็ก ๆ น้อย ๆ นี้ที่ยาวเกินไปให้พอดีกับอัตรากำไรขั้นต้นของคำตอบที่ถูกต้องของ ak2

ย้อนกลับไปในยุคมืดเทอร์มินัลเป็นอุปกรณ์ชิ้นใหญ่ที่เชื่อมต่อกับอุปกรณ์ระยะไกล (แต่เดิมเทอร์มินัลอื่นเพราะเทเลทับทีง่ายต่อการเรียนรู้การใช้งานมากกว่ากุญแจโทรเลข) ผ่านสายยาวหรือผ่านโมเด็ม เมื่อถึงเวลาที่ Unix กำลังพัฒนารหัส ASCII นั้นได้รับการยอมรับอย่างดีแล้ว (แม้ว่ารหัส EBCDIC ที่แข่งขันกันจาก IBM นั้นยังคงเป็นสิ่งที่ต้องพิจารณาอีกครั้ง)

เทอร์มินัลแรกสุดเก็บบันทึกที่พิมพ์ของตัวละครทุกตัวที่ได้รับ ตราบใดที่อักขระมาถึงไม่เร็วกว่าหัวพิมพ์ก็สามารถพิมพ์ได้อย่างน้อย แต่ทันทีที่เป็นไปได้ว่าเทอร์มินัลที่ใช้ CRT เป็นปัญหาเกิดขึ้นเพียงประมาณ 25 บรรทัดพอดีกับ CRT และ 25 บรรทัดของ 80 ตัวอักษรแสดงถึงแรมเพียงพอที่ไม่มีใครคิดอย่างจริงจังเกี่ยวกับการจัดหา RAM เพิ่มเติมสำหรับตัวละครที่เลื่อนออกจากด้านบนของ หน้าจอ.

ดังนั้นการประชุมบางอย่างจำเป็นต้องส่งสัญญาณว่าปลายส่งควรหยุดเพื่อให้ผู้อ่านทัน

รหัส ASCII 7 บิตมี 33 จุดรหัสเพื่อรองรับอักขระควบคุม (0 ถึง 31 และ 127) บางคนมีวัตถุประสงค์จริงๆดีขึ้นเช่นNUL(หัวหน้าเทปกระดาษที่ว่างเปล่าสำหรับเกลียวช่องว่างและ splices) DEL( "ข้ามออก" ตัวอักษรบนเทปกระดาษที่ระบุโดยไล่ทั้งเจ็ดหลุม) BEL(Ding!) CR, LFและTAB. แต่สี่ถูกกำหนดอย่างชัดเจนสำหรับการควบคุมอุปกรณ์ปลายทาง ( DC1เพื่อDC4aka Ctrl + Q, Ctrl + R, Ctrl + S และ Ctrl + T)

ฉันเดาได้ดีที่สุดว่าวิศวกรบางคนคิดว่า (เป็นตัวช่วยจำ), "S" สำหรับ "หยุด" และ "Q" สำหรับ "ดำเนินการต่อ" ไม่เลวร้ายเกินไปและกำหนดDC3ให้หมายถึง "โปรดหยุดส่ง" และDC1หมายถึง "ตกลง ส่งต่อไปเดี๋ยวนี้ "

แม้การประชุมนั้นได้รับการยอมรับอย่างดีในเวลาที่ยูนิกซ์กำลังออกจากรังที่ Bell Labs เพื่อออกไปสู่โลก

การประชุมเป็นที่รู้จักกันในชื่อซอฟต์แวร์ควบคุมการไหลและเป็นเรื่องธรรมดาในอุปกรณ์อนุกรมจริง มันไม่ง่ายที่จะติดตั้งอย่างถูกต้องเนื่องจากมันป้องกันการใช้ตัวอักษรตัวใดตัวหนึ่งเพื่อจุดประสงค์อื่น ๆ ในช่องทางการสื่อสารและสัญญาณ Stop จะต้องได้รับการจัดการก่อนตัวอักษรที่ได้รับที่ค้างอยู่เพื่อหลีกเลี่ยงการส่งมากกว่าปลายทาง ถือ.

หากใช้งานได้จริงการใช้สัญญาณเพิ่มเติมนอกแบนด์จากสตรีมข้อมูลอนุกรมสำหรับการควบคุมการไหลเป็นที่ต้องการอย่างมาก ในการเชื่อมต่อแบบใช้สายโดยตรงที่สามารถจ่ายสายสัญญาณเพิ่มเติมได้คุณจะพบการจับมือกันของฮาร์ดแวร์ซึ่งทำให้อักขระเหล่านั้นว่างสำหรับการใช้งานอื่น ๆ

แน่นอนหน้าต่างเทอร์มินัลปัจจุบันไม่ได้ใช้พอร์ตอนุกรมจริงมีแถบเลื่อนและไม่จำเป็นต้องมีการจับมือซอฟต์แวร์เลย แต่การประชุมยังคงมีอยู่

ฉันจำได้ว่าคำกล่าวอ้างที่ Richard Stallman ได้รับการร้องเรียนเกี่ยวกับการทำแผนที่ Ctrl + S ของเขาเพื่อเพิ่มการค้นหาในรุ่นแรกของ emacs และเขาค่อนข้างไม่เห็นใจผู้ใช้ที่ต้องพึ่งพาการเชื่อมต่อที่ควบคุมด้วยซอฟต์แวร์ 7 บิต


2
Thanke .. น่าสนใจมาก ... ฉันได้รับการสงสัย: ทำไมในโลกทุกคนจะเลือกที่จะดำเนินการต่อกระบวนการที่มี "Q" ซึ่งเป็นที่นิยมใช้ (ตอนนี้) เพื่อออกจาก ... ความ QRST จัดกลุ่มอธิบายมัน .....
Peter.O

13
ขอบคุณมากสำหรับประวัติศาสตร์เล็กน้อย ฉันเพิ่งปิดการใช้งานโฟลว์คอนโทรลตามค่าเริ่มต้นในเทอร์มินัลอีมูเลเตอร์ที่ฉันบำรุงรักษา แต่ต้องกลับคืนสภาพเดิมอย่างรวดเร็วหลังจากการประท้วงแกนนำจาก Unix traditionalists ที่ยังคงใช้งานอยู่ ฉันตั้งค่าบิต ixany แทนอย่างน้อยคนที่กด ^ S โดยไม่ทราบว่า ^ Q จะไม่ติดขัด
ak2

3
@Rertert ฉันพบสิ่งที่คล้ายกันเกี่ยวกับ backspace และการลบ Backspace เป็นทางการ ^ H และลบคือ ^? บางคนชอบนักพัฒนา Emacs (Stallman อีกครั้ง?) ต้องการ ^ H เพื่อการใช้งานทั่วไปเช่นทางลัดเช่น Help ลำดับการหลบหนี ^ [[3 ~ หรืออะไรทำนองนั้นถูกสร้างขึ้นเพื่อแทนที่ ^? และ backspace ตอนนี้กลายเป็นอักขระลบตัวเก่า ^? ในความเป็นจริงฉันได้เห็น ncurses ที่ได้รับการติดตั้งบน Linux distros เพื่อทำการแมปปุ่มต่าง ๆ ใน terminfo ในขณะที่ ncurses บน FreeBSD นั้นไม่ได้เปรียบทำให้เกิดความสับสนที่น่ารำคาญทำให้ backspace ไม่ทำงาน
penguin359

23
ฉันเคยสงสัยว่าทำไม DEL ถึงมีรหัส 127 แทนที่จะจัดกลุ่มกับตัวควบคุมอื่น ๆ จนกระทั่งฉันเล่นเทปกระดาษและ ASR33 เป็นครั้งแรก เมื่อฉันรู้ว่ามันมีผลในการต่อยรูทั้งหมดซึ่งหมายความว่ามันจะมีการกดทับตัวละครที่ต่อยก่อนหน้านี้เพื่อลบ
RBerteig

3
@SanuelJackson มีบางครั้งที่ฉันดูอย่างใกล้ชิด แต่ vimrc เริ่มต้นที่มาพร้อมกับ windows ได้แมป <Cs> กับ ": update" เป็นเวลาหลายปี ฉันยังค่อนข้างแน่ใจว่าฉันเคยเห็นมันใน distros สำหรับ gvim ในอดีตเช่นกัน หากคุณใช้เสียงเรียกเข้าในเทอร์มินัลประวัตินี้ยังคงมีความเกี่ยวข้องมาก เทอร์มินัลอีมูเลเตอร์รุ่นใหม่ยังคงใช้ปุ่มควบคุมการไหลดังนั้นแม้ว่ากลุ่มที่มีการแมปจะไม่เห็นพวกเขาเว้นแต่ผู้ใช้แต่ละคนออกไปเพื่อปิดการใช้งานการควบคุมการไหลตามที่อธิบายไว้ในคำตอบที่ยอมรับ
ดึง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.