Tại sao phím tắt Ctrl + Một bước nhảy đến đầu một dòng trong thiết bị đầu cuối?


11

Giống như nhảy đến cuối dòng là Ctrl+ E, nơi Ecó thể được coi là kết thúc, tại sao nó lại nhảy đến điểm bắt đầu sử dụng A?


1
Bạn có thể nghĩ về "A" cho "An Phường"
Anthon

Hoặc "A" là chữ cái đầu tiên trong alp.us
Costas

Xin lưu ý rằng trong emacs(và cả trong bash), bạn có thể nhảy đến đầu / cuối dòng cũng bằng Home/ Endphím theo mặc định.
jimmij

Câu trả lời:


19

Có hai mặt của câu hỏi, mặt kỹ thuật và mặt lịch sử.

Câu trả lời kỹ thuật là vì bashsử dụng GNU Readline . Trong readlineControl-a bị ràng buộc với chức năng beginning-of-line, bạn có thể hiển thị điều này với:

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

trong đó \C-acó nghĩa là "Kiểm soát-a". bind -psẽ hiển thị tất cả các ràng buộc (hãy cẩn thận khi sử dụng bind, thật dễ dàng để phá vỡ bàn phím của bạn nếu bạn vô tình cung cấp các tùy chọn hoặc đối số bổ sung).

Một số ràng buộc ở trên được thêm vào theo mặc định, một số ràng buộc khác mà tôi đã thêm (thông qua .inputrc) cho các thiết bị đầu cuối khác nhau mà tôi đã sử dụng. Kể từ bash-2.0, nếu termcap thiết bị đầu cuối có chứa các khả năng kh, và kHsau đó HomeEndsẽ được thiết lập để beginning-of-lineend-of-line. Cả hai bashreadlineđược phát triển bởi Chet Ramey , một người dùng Emacs và cũng là nhà phát triển của cemột bản sao Emacs.


(Xin lưu ý, nỗ lực này để tóm tắt nhiều năm lịch sử từ nhiều thập kỷ trước và làm nổi bật một số chi tiết.)

Bây giờ, tại sao nó lại là Control-a? Readline sử dụng theo các ràng buộc giống như Emacs mặc định . Control-a trong GNU Emacs gọi move-beginning-of-line, cái mà chúng ta coi là chức năng "home" bây giờ.

EMACS ban đầu của Stallman và Steel được lấy cảm hứng từ biên tập viên E của Fred Wright (một biên tập viên WYSIWYG đầu tiên) và TECO (một trình soạn thảo / ngôn ngữ phương thức mật mã) - EMACS là một bộ macro cho TECO. Xem Essential E [PDF] (từ SAIL , 1980). Tuy nhiên, E đã sử dụng Biểu mẫu kiểm soát cho "đầu dòng", đây là trên bàn phím "DataDisc" có Controlkhóa và Formkhóa. Các bàn phím không gian thiếu sinh quân của thời gian (thiếu một Homechìa khóa bằng cách này, mặc dù nó có một End) thường đổ lỗi cho giao diện bàn phím Emacs.

Một trong những tính năng đáng mong đợi của EMACS là việc sử dụng chế độ chỉnh sửa dòng "thời gian thực" Control-R của TECO (TECO có trước các thiết bị đầu cuối bàn phím CRT / bàn phím), bạn có thể thấy các ràng buộc chính trên trang 6 của MIT AI Lab 1978 Giới thiệu về ITS trình soạn thảo EMACS [quét PDF], trong đó được sử dụng để biểu thị Kiểm soát. Trong chế độ này, các ràng buộc chính là tất cả các chuỗi điều khiển, chủ yếu là ghi nhớ: Control-E End của dòng này , Control-P di chuyển đến dòng trước , Control-N chuyển sang dòng tiếp theo , Control-B lùi một ký tự và không kém Control -Chuyển sang đầu dòng này , đề xuất "chữ cái đầu tiên của bảng chữ cái" của Costas cho điều này cũng tốt như bất kỳ.

(Một ràng buộc khóa tương tự nằm trong tvlibgói macro nhằm mục đích làm cho EMACS hoạt động giống như trình soạn thảo TVEDIT, điều khiển ràng buộc A và E để câu ngược và chuyển tiếp , nhưng sử dụng các chuỗi khác nhau cho đầu và cuối dòng.)

Các ràng buộc Control-A / Control-E trong "^ R mode" đã được triển khai trực tiếp trong ITS TECO (1983, phiên bản 1208, xem _teco_.tgzkho lưu trữ tại trang web PDP10 / ITS được nocrew hoặc trên Github ), mặc dù tôi không thể xác định chính xác hơn khi chúng lần đầu tiên xuất hiện và nguồn TECO không cho biết lý do tại sao bất kỳ ràng buộc cụ thể nào được chọn. Năm 1978 tài liệu MIT Emacs trên ngụ ý rằng vào năm 1978 Emacs không sử dụng TECO mẹ đẻ Control-A / Control-E, nó có thểscrlingói vĩ mô (dòng màn hình) thực hiện này.

Tóm lại:

  • bash sử dụng đường dẫn
  • ràng buộc khóa readline theo Emacs / EMACS
  • EMACS ban đầu được tạo bằng TECO, kế thừa nhiều tính năng
  • Các macro chế độ tương tác của TECO được sử dụng (hầu hết) các ràng buộc phím điều khiển ghi nhớ và "bắt đầu dòng" đã được gán cho Control-A

Xem thêm:


6

Bởi vì Richard Stallman thích Emacs .

Ctrl+ ađang nhảy đến đầu dòng trong Emacs và libreadline sử dụng các ràng buộc chính giống như Emacs. Bash sử dụng libreadline.


2
Cũng lưu ý rằng bạn có thể làm set -o vi, hoặc echo 'set editing-mode vi' >> ~/.inputrc, để có được các phím bấm Vim!
wchargein

Tại sao mọi người cho điểm trả lời này? Câu hỏi đặt ra là tại sao ctrl + a được chọn làm lệnh đi đến đầu dòng chứ không phải lệnh là gì.
wurtel

@Wurtel Câu trả lời là trong câu đầu tiên, xem "lịch sử của Gnu".
Jasen

3
Xin lỗi, nhưng vì Richard Stallman thích Emacs. không cho tôi biết lý do tại sao ctrl-a đưa tôi đến đầu dòng. Tại sao không phải là ctrl-s, hoặc ctrl-x, hay bất cứ điều gì?!
wurtel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.