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?
emacs
(và cả trong bash
), bạn có thể nhảy đến đầu / cuối dòng cũng bằng Home
/ End
phím theo mặc định.
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?
emacs
(và cả trong bash
), bạn có thể nhảy đến đầu / cuối dòng cũng bằng Home
/ End
phím theo mặc định.
Câu trả lời:
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ì bash
sử dụng GNU Readline . Trong readline
Control-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-a
có nghĩa là "Kiểm soát-a".
bind -p
sẽ 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à kH
sau đó Homevà Endsẽ được thiết lập để beginning-of-line
và end-of-line
. Cả hai bash
và readline
đượ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 ce
mộ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 tvlib
gó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_.tgz
kho 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ể là scrlin
gói vĩ mô (dòng màn hình) thực hiện này.
Tóm lại:
Xem thêm:
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.
set -o vi
, hoặc echo 'set editing-mode vi' >> ~/.inputrc
, để có được các phím bấm Vim!