Sự khác biệt giữa j, CTRL-J, <NL> và CTRL-N ở chế độ bình thường là gì?


12

Tôi đã thấy một nơi nào đó trên web có người sử dụng Ctrl-Jvà vì tôi không biết ánh xạ này, tôi đã tra cứu trong tài liệu có liên quan và tìm thấy như sau:

j           or
<Down>      or
CTRL-J      or
<NL>        or
CTRL-N          [count] lines downward linewise.

Điều này dẫn tôi đến một số câu hỏi:

  • Cái gì là<NL> : Tôi sẽ thấy nó tương đương với việc <CR>nhấn Entersẽ đi xuống một dòng trong chế độ bình thường theo mặc định nhưng tại sao nó lại <NL>ở đây và không <CR>?
  • Sự khác biệt giữa các ánh xạ này là gì : Có phải tất cả 5 tùy chọn này đều đi xuống một dòng theo cùng một cách không? Theo thử nghiệm của tôi, tôi sẽ trả lời có nhưng điều đó sẽ dẫn đến câu hỏi tiếp theo của tôi.
  • Tại sao có 5 ánh xạ để thực hiện cùng một điều chính xác : Tôi có thể hiểu điều đó j<down>được giữ cho những người dùng không quen sử dụng ánh xạ vim, nhưng tại sao các ánh xạ khác lại tồn tại?
  • Khi nào thì thú vị hơn khi sử dụng cái này hơn cái kia : Đó là sự tiếp nối của câu hỏi trước: nếu có quá nhiều khả năng tôi đoán rằng chúng có những lợi thế khác nhau hoặc tốt hơn để sử dụng trong các trường hợp sử dụng cụ thể. Những trường hợp sử dụng là gì?

Tôi tìm ra sự dư thừa của các lệnh này thậm chí còn kỳ lạ hơn khi tôi nhìn vào :h k: chỉ có 3 cách để đi lên: k, <UP>ctrl-p. Vì vậy, câu hỏi tiền thưởng là: Tại sao có 5 cách để đi xuống và chỉ có 3 cách để đi lên?


Bạn có chắc chắn họ đã sử dụng Ctrl-Jràng buộc mặc định ? Dường như là phổ biến, ít nhất là trong số những người tôi biết, ánh xạ Ctrl-J/Ktới "xuống / lên cho đến dòng tiếp theo có cùng mức thụt lề như vạch xuất phát".
Aaron Dufour

4
Tôi muốn trả lời "Tại sao có 5 cách để đi xuống và chỉ có 3 cách để đi lên?" Chà - đó là bởi vì, trong cuộc sống, mọi thứ trở nên dễ dàng hơn! :)
VanLaser

@VanLaser câu trả lời thực sự tuyệt vời, họ nên xem xét thêm gợi ý này trong tài liệu! ;-)
statox

@VanLaser Quá tệ phải không. Với tốc độ đó, cả nhân loại sẽ rơi vào hư vô!
xji

"Hãy từ bỏ hy vọng, tất cả các ngươi <CR>ở đây"
VanLaser

Câu trả lời:


15

Thú vị mà bạn đề cập <CR>. <CR>hoặc vận chuyển trở lại, về mặt kỹ thuật được sử dụng có nghĩa là đi đến đầu dòng . <NL>, hoặc dòng mới aka nguồn cấp dữ liệu (thường được gọi LF), được sử dụng để đi đến dòng tiếp theo . Theo thời gian, sự khác biệt đã bị mất trong hầu hết các ứng dụng. 1 Nhấn Enterthực sự mang lại lợi nhuận vận chuyển, thường (thử nhấn CtrlVEnter- bạn sẽ thấy ^Mtrong các thiết bị đầu cuối Unix). <NL>Mã kiểm soát là CtrlJ.

CtrlNlàm tôi ngạc nhiên. Theo 2 , đó là một nhân vật thay đổi :man ascii

Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
────────────────────────────────────────────────────────────────────────
016   14    0E    SO  (shift out)             116   78    4E    N

Sự thay đổi trongthay đổi các ký tự, theo Wikipedia :

... cung cấp một cách để thay đổi, do đó, danh pháp, một dải ruy băng màu, được phân chia theo chiều dọc thường có màu đỏ và đen, lên và xuống màu khác trong một máy đánh chữ hoặc máy điện từ ...

Làm thế nào nó kết thúc có nghĩa là đi xuống là một bí ẩn đối với tôi.


Tại sao có 5 cách để đi xuống và chỉ có 3 cách để đi lên?

Vâng, ba cách để đi lên đều có những cách tương ứng để đi xuống. ( CtrlPcó lẽ là phần bổ sung CtrlN, ngụ ý rằng sự thay đổi vào / ra không liên quan ở đây). Thêm hai cách xuống ( <NL>hoặc CtrlJ) thực sự là hai đại diện của cùng một cách. <NL>là một sự kế thừa từ những ngày đánh máy - và trong những ngày đó, tôi không nghĩ rằng có một chìa khóa để đi lên - chỉ để đi xuống.

Xem thêm:

1 Vẫn còn vấn đề trong một số trường hợp (in \r(vận chuyển trở lại) và \n(nguồn cấp dữ liệu) bằng cách sử dụng hầu hết các chức năng / công cụ in được định dạng vẫn giữ nguyên nghĩa cũ.).

2 Bảng này được sắp xếp sao cho bảng chữ cái tương ứng với mã điều khiển của ký tự trên cùng một dòng.


3
Tôi luôn nghĩ Ctrl-Nlà cho tiếp theo , và Ctrl-Plà cho trước đó . Dù sao đó cũng là những gì họ đại diện cho Emacs, trong đó họ bị ràng buộc next-lineprevious-line. Ngoài ra, Ctrl-Pkhông phải là thay đổi trong ; đó là thoát liên kết dữ liệu . Thay đổi trongCtrl-O.
Tiếng Litva

@Lithis tôi đứng sửa.
muru

2
@Lithis Thành thật mà nói, điều duy nhất tôi biết về Emacs là cx ce.
muru

Câu trả lời lịch sử và rõ ràng, cảm ơn Muru rất nhiều! Tôi nên nghĩ về mã ascii của các nhân vật, câu trả lời thường nằm ở đó.
statox

@muru Điều đó thật tệ vì Emacs thực sự có rất nhiều thứ để cung cấp, đặc biệt là chế độ org của nó đã giúp ích rất nhiều cho tôi. Tôi khuyên bạn nên kiểm tra dự án Spacemacs github.com/syl20bnr/spacemacs , tập trung nhiều vào mô phỏng Vim để bạn không cần biết bất kỳ lệnh Emacs truyền thống nào để sử dụng. Có lẽ điều đó sẽ thay đổi nhận thức của bạn một chút.
xji

8

Xem :help key-notation.

  1. <NL>có nghĩa là "linefeed" và <CR>có nghĩa là "vận chuyển trở lại".

    Đó là hai cách khác nhau để phá vỡ dòng hiện tại. Chúng được ràng buộc trong lịch sử với các ký tự điều khiển khác nhau ( ctrl-jctrl-m) nhưng thường được chèn với cùng một khóa , <CR>. Tôi đồng ý rằng sử dụng <NL>trong bối cảnh này có vẻ phản trực giác.

  2. Tất cả những "ánh xạ" (chúng không thực sự là ánh xạ) hoạt động giống hệt nhau.

  3. Lịch sử, chủ yếu, cũng hạn chế đa nền tảng.

    Không có phím chuyển động chuyên dụng Thiết bị đầu cuối của Bill Joy nhưng đề can mũi tên nằm trên hjklphím. Vì các trình soạn thảo phương thức rất hiếm vào thời điểm đó, nhấn các phím đó chỉ chèn ký tự liên quan vào bất cứ điều gì bạn đang làm. Bạn phải nhấn <C-h>, <C-j>, <C-k><C-l>để di chuyển con trỏ trên màn hình.

    Như bạn có thể thấy, có khá trùng lặp giữa j, <C-j>, <NL><Down>. <C-n>thường có nghĩa là "tiếp theo" trong Vim, thật dễ dàng để xem làm thế nào nó được gộp lại với các đồng đội của nó.

  4. Vì tất cả chúng đều đồng nghĩa, bạn có thể tự do sử dụng cái phù hợp nhất với mình.

    <CR>, ví dụ, là một chìa khóa thú vị để sử dụng cho ánh xạ của riêng bạn.


Cảm ơn sự giác ngộ! Tôi rất đồng ý về <CR>bản đồ. Ngoài ra một câu hỏi nữa: Tôi biết rằng những "tổ hợp phím" đó thực sự không được gọi là ánh xạ nhưng tôi không chắc mình nên gọi chúng như thế nào?
statox

Đó là một câu hỏi thú vị, tôi có xu hướng gọi chúng là "mệnh lệnh".
romainl

Tôi có thể sai nhưng không phải là "lệnh" đề cập đến cựu lệnh chế độ thích :ls, :substitute, new, vv ...?
statox

xcũng là một "mệnh lệnh".
romainl

Trên thực tế tôi chỉ thấy rằng các cuộc gọi doc x, dd, c, vv "lệnh". Vì vậy, bạn phải đúng, tôi đoán rằng jhoặc ^Jcũng là lệnh.
statox
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.