ทำไมปุ่มลัด Ctrl + A กระโดดไปที่จุดเริ่มต้นของบรรทัดในเทอร์มินัล


11

เช่นเดียวกับการกระโดดไปยังจุดสิ้นสุดของบรรทัดคือCtrl+ Eซึ่งEสามารถคิดได้ว่าเป็นจุดสิ้นสุดทำไมมันกระโดดไปที่จุดเริ่มต้นใช้A?


1
คุณสามารถนึกถึง "A" สำหรับ "Anfang"
Anthon

หรือ "A" เป็นตัวอักษรตัวแรกใน alpabet
Costas

โปรดทราบว่าในemacs(และในbashเช่นกัน) คุณสามารถข้ามไปยังจุดเริ่มต้น / จุดสิ้นสุดของบรรทัดด้วยปุ่มHome/ Endโดยค่าเริ่มต้น
jimmij

คำตอบ:


20

มีสองด้านสำหรับคำถามด้านเทคนิคและด้านประวัติศาสตร์

คำตอบทางเทคนิคเป็นเพราะbashการใช้GNU Readline ในreadlineControl-a ถูกผูกไว้กับฟังก์ชั่นbeginning-of-lineคุณสามารถแสดงสิ่งนี้ด้วย:

$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[7~", "\M-[H".

โดยที่ความ\C-aหมาย "Control-a" bind -pจะแสดงการเชื่อมโยงทั้งหมด (โปรดใช้ความระมัดระวังbindเป็นเรื่องง่ายที่จะทำลายแป้นพิมพ์ของคุณหากคุณมีตัวเลือกหรืออาร์กิวเมนต์เพิ่มเติมโดยไม่ตั้งใจ)

การเชื่อมโยงข้างต้นบางอย่างจะถูกเพิ่มตามค่าเริ่มต้นส่วนอื่น ๆ ที่ฉันเพิ่มไว้ (ผ่าน.inputrc) สำหรับเทอร์มินัลต่างๆที่ฉันใช้ ตั้งแต่ทุบตี-2.0 ถ้า termcap ขั้วมีความสามารถkhและkHแล้วHomeและEndจะถูกตั้งค่าและbeginning-of-line end-of-lineทั้งสองbashและreadlineได้รับการพัฒนาโดยChet Rameyผู้ใช้ Emacs และผู้พัฒนาceโคลน Emacs


(โปรดทราบว่าความพยายามนี้จะสรุปประวัติศาสตร์เป็นเวลาหลายปีจากหลายทศวรรษที่ผ่านมาและคัดสรรรายละเอียดบางอย่าง)

ทีนี้ทำไมมันถึงเป็น Control-a โดยเฉพาะ? Readline ใช้โดยค่าเริ่มต้น Emacs เหมือนผูก Control-a ใน GNU Emacs เรียกใช้move-beginning-of-lineสิ่งที่เราคิดว่าเป็นฟังก์ชั่น "home" ในตอนนี้

EMACS ดั้งเดิมของสตอลแมนและสตีลได้รับแรงบันดาลใจจากบรรณาธิการEของ Fred Wright ( บรรณาธิการ WYSIWYG ยุคแรก) และTECO (บรรณาธิการ / ภาษาที่เป็นคำกริยาลึกลับ) - EMACS เป็นชุดแมโครสำหรับ TECO ดูEssential E [PDF] (จากSAIL , 1980) E ใช้แบบฟอร์มควบคุมสำหรับ "จุดเริ่มต้นของบรรทัด" นี่คือบนแป้นพิมพ์ "DataDisc" ซึ่งมีControlคีย์และFormคีย์ แป้นพิมพ์พื้นที่โรงเรียนนายร้อยของเวลา (ขาดHomeที่สำคัญโดยวิธีการที่แม้ว่ามันจะมีEnd) เป็นตำหนิทั่วไปสำหรับอินเตอร์เฟซแป้นพิมพ์ Emacs

หนึ่งในคุณลักษณะที่พึงประสงค์ของ EMACS คือการใช้งานของ TECO ควบคุมของ-R "เวลาจริง" โหมดการแก้ไขบรรทัด (TECO ถือกำเนิด CRT / ขั้วแป้นพิมพ์) คุณจะเห็นปุ่มลัดบนหน้า 6 จากเอ็มไอทีเอไอแล็บ 1978 ITS รู้เบื้องต้นเกี่ยวกับ เครื่องมือแก้ไข EMACS [สแกน PDF] โดยที่┌ใช้เพื่อแสดงถึงการควบคุม ในโหมดนี้ปุ่มลัดทุกลำดับการควบคุมส่วนใหญ่จำ: การควบคุม-E สิ้นสุดของบรรทัดนี้ , การควบคุม-P ย้ายไปบรรทัดก่อนหน้า , การควบคุม-N ย้ายไปบรรทัดถัดไป , การควบคุม-B ย้อนหลังตัวละครตัวหนึ่งและไม่น้อยควบคุม - ย้ายไปที่จุดเริ่มต้นของบรรทัดนี้ข้อเสนอแนะของ Costas ของ "ตัวอักษรตัวแรกของตัวอักษร" สำหรับสิ่งนี้ดีเท่า ๆ กัน

(การผูกคีย์ที่คล้ายกันอยู่ในtvlibแพ็คเกจแมโครซึ่งมีวัตถุประสงค์เพื่อทำให้ EMACS ทำงานเหมือนตัวแก้ไข TVEDIT การควบคุมการเชื่อม A และ E กับประโยคย้อนหลังและไปข้างหน้าแต่ใช้ลำดับที่แตกต่างกันสำหรับการเริ่มต้นและสิ้นสุดบรรทัด)

การควบคุม A / Control-E ใน "^ R mode" ถูกนำไปใช้โดยตรงใน ITS TECO (1983, รุ่น 1208, ดู_teco_.tgzไฟล์เก็บถาวรที่ไซต์ nocrew PDP10 / ITSหรือGithub ) แม้ว่าฉันจะไม่สามารถระบุได้แม่นยำมากขึ้น เมื่อพวกเขาปรากฏตัวครั้งแรกและแหล่งที่มาของ TECO ไม่ได้ระบุว่าทำไมการเลือกการผูกใด ๆ โดยเฉพาะ เอกสาร 1978 EMACS ของ MIT ข้างต้นบอกเป็นนัยว่าในปี 1978 EMACS ไม่ได้ใช้ TECO ดั้งเดิม Control-A / Control-E เป็นไปได้ว่าscrlinแพคเกจมาโคร (เส้นหน้าจอ) นำสิ่งเหล่านี้ไปใช้

วิธีการสรุป:

  • bash ใช้ readline
  • การผูกคีย์ readline ทำตาม Emacs / EMACS
  • EMACS ดั้งเดิมถูกสร้างขึ้นด้วย TECO โดยสืบทอดคุณสมบัติมากมาย
  • มาโครโหมดการโต้ตอบของ TECO ใช้การผูกคีย์ควบคุมช่วยในการจำ (ส่วนใหญ่) และ "เริ่มต้นบรรทัด" จบลงด้วยการกำหนดให้กับ Control-A

ดูสิ่งนี้ด้วย:


6

เพราะริชาร์ดสตอลแมนชอบEmacs

Ctrl+ aกำลังกระโดดไปที่จุดเริ่มต้นของบรรทัดใน Emacs และ libreadline ใช้การเชื่อมโยงคีย์เดียวกันกับ Emacs Bash ใช้ libreadline


2
โปรดทราบว่าคุณสามารถทำset -o viหรือecho 'set editing-mode vi' >> ~/.inputrcเพื่อรับ keybindings เป็นกลุ่ม!
wchargin

ทำไมผู้คนถึงให้คะแนนคำตอบนี้ คำถามคือเหตุผลที่เลือก ctrl + a เป็นคำสั่งให้ไปที่จุดเริ่มต้นของบรรทัดไม่ใช่คำสั่งที่เป็น
wurtel

@Wurtel คำตอบอยู่ในประโยคแรกดู "history of Gnu"
Jasen

4
ขออภัยเพราะ Richard Stallman ชอบ Emacs ไม่ได้บอกฉันว่าทำไม ctrl-a พาฉันไปที่จุดเริ่มต้นของบรรทัด ทำไมไม่ลอง ctrl-s หรือ ctrl-x หรืออะไรล่ะ!
wurtel

0

เลือกตัวอักษร "a" เนื่องจาก Control + b และ Control + s ถูกใช้ไปแล้วพวกเขาจึงตัดสินใจว่าเนื่องจาก A เป็นตัวอักษรตัวแรกของตัวอักษรละตินที่จะเป็นสิ่งที่พวกเขาใช้ ฉันจะรู้ได้อย่างไร เพราะฉันได้รับคำตอบวันนี้จากหนึ่งในผู้พัฒนา TECO (บรรพบุรุษของ EMACS) และ EMACS

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.