อะไรคือความแตกต่างระหว่าง j, CTRL-J, <NL> และ CTRL-N ในโหมดปกติ?


12

ฉันเห็นบางแห่งบนเว็บที่มีคนใช้Ctrl-Jและฉันไม่รู้ว่าการทำแผนที่นี้ฉันค้นหาเอกสารที่เกี่ยวข้องและพบสิ่งต่อไปนี้:

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

ซึ่งทำให้ฉันมีคำถามหลายข้อ:

  • คืออะไร<NL> : ฉันจะเห็นว่ามันเป็นเทียบเท่าของ<CR>ตั้งแต่การกดEnterจะลงไปหนึ่งบรรทัดในโหมดปกติโดยค่าเริ่มต้น แต่ทำไมมันเป็น<NL>ที่นี่และไม่<CR>?
  • ความแตกต่างระหว่างการแมปเหล่านี้ : ตัวเลือกทั้งหมด 5 ตัวเลือกเหล่านี้มีหนึ่งบรรทัดในลักษณะเดียวกันหรือไม่? จากการทดสอบของฉันฉันจะตอบว่าใช่ แต่นั่นจะนำไปสู่คำถามต่อไปของฉัน
  • เหตุใดจึงมีการแมป 5 รายการเพื่อทำสิ่งเดียวกัน : ฉันเข้าใจjและ<down>เก็บไว้สำหรับผู้ใช้ที่ไม่คุ้นเคยกับการจับคู่การแมป แต่ทำไมการแมปอื่น ๆ จึงมีอยู่
  • เมื่อใดจึงจะน่าสนใจที่จะใช้มากกว่าอีกคำถาม: นั่นคือความต่อเนื่องของคำถามก่อนหน้านี้: หากมีความเป็นไปได้มากมายฉันคิดว่าพวกเขามีข้อได้เปรียบที่แตกต่างกันหรือดีกว่าที่จะใช้ในกรณีการใช้งานเฉพาะ กรณีการใช้งานเหล่านั้นคืออะไร?

ผมพบความซ้ำซ้อนของคำสั่งเหล่านี้แม้จะแปลกเมื่อฉันมองไปที่อื่น ๆ:h k: มีเพียง 3 วิธีที่จะขึ้นไป: k, และ<UP> ctrl-pดังนั้นคำถามโบนัสคือ: ทำไมมี 5 วิธีที่จะลงไปและเพียง 3 ขึ้นไป?


คุณแน่ใจหรือว่าพวกเขากำลังใช้การCtrl-Jเชื่อมโยงเริ่มต้น ดูเหมือนว่าเป็นเรื่องปกติอย่างน้อยในหมู่ผู้ที่ฉันรู้จักจะแมปCtrl-J/K"ลง / ขึ้นจนถึงบรรทัดถัดไปที่มีระดับการเยื้องเหมือนกับบรรทัดเริ่มต้น"
Aaron Dufour

4
ฉันต้องการที่จะตอบว่า "ทำไมมี 5 วิธีที่จะลงไปและเพียง 3 ขึ้นไป?" - เพราะในชีวิตทุกอย่างไปทางทิศใต้ง่ายขึ้น! :)
VanLaser

@VanLaser คำตอบที่ดีมากพวกเขาควรพิจารณาเพิ่มคำแนะนำนี้ในเอกสาร! ;-)
statox

@VanLaser แย่มากใช่ไหม ในอัตราที่มนุษย์ทุกคนจะลงไปในความว่างเปล่าในเวลาไม่นาน!
xji

"ละทิ้งความหวังทุกท่านที่อยู่ที่<CR>นี่"
VanLaser

คำตอบ:


16

<CR>ที่น่าสนใจที่คุณกล่าวถึง <CR>หรือกลับรถในทางเทคนิคที่ใช้ในการเฉลี่ยไปยังจุดเริ่มต้นของบรรทัด <NL>หรือขึ้นบรรทัดใหม่ aka อาหารเส้น (โดยปกติจะเรียกว่าLF) ถูกใช้ในความหมายไปยังบรรทัดถัดไป เมื่อเวลาผ่านไปความแตกต่างก็หายไปในการใช้งานส่วนใหญ่ 1 การกดEnterจริง ๆ แล้วให้ผลตอบแทนการขนส่งโดยปกติ (ลองกดCtrlVEnter- คุณควรเห็น^Mในเทอร์มินัล Unix) รหัสควบคุมก็คือ<NL>CtrlJ

CtrlNทำให้ฉันประหลาดใจ ตามที่2มันเป็นตัวละครกะออก :man ascii

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

การเลื่อนและเลื่อนตัวละครตามWikipedia :

... หากมีวิธีการเปลี่ยนดังนั้นศัพท์เฉพาะ, ริบบิ้นสี, แบ่งตามยาวโดยปกติจะมีสีแดงและดำ, ขึ้นและลงไปที่สีอื่นในเครื่องพิมพ์ดีดไฟฟ้าหรือเครื่องจักรกลทางไฟฟ้า ...

ความหมายของการลงไปคือความลึกลับสำหรับฉัน


ทำไมมี 5 วิธีในการลงและ 3 เท่านั้นที่จะขึ้นไป?

ทั้งสามวิธีที่จะขึ้นไปมีวิธีที่สอดคล้องกันเพื่อลงไป ( CtrlPสันนิษฐานว่าเป็นส่วนเสริมของCtrlNซึ่งหมายความว่าการเปลี่ยนแปลงเข้า / ออกไม่เกี่ยวข้องที่นี่) วิธีพิเศษสองทางที่ลง ( <NL>หรือCtrlJ) เป็นจริงสองแนวทางที่เป็นแบบเดียวกัน <NL>เป็นมรดกจากสมัยของเครื่องพิมพ์ดีด - และในสมัยนั้นฉันไม่คิดว่าจะมีกุญแจขึ้นไป - เพียงเพื่อลง

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

1มันยังคงมีความสำคัญในบางกรณี (การพิมพ์\r(carriage return) และ\n(การป้อนบรรทัด) โดยใช้ฟังก์ชั่นการพิมพ์ที่จัดรูปแบบส่วนใหญ่ / เครื่องมือยังคงรักษาความหมายเดิมไว้)

2ตารางนี้จัดเรียงในลักษณะที่ตัวอักษรสอดคล้องกับรหัสควบคุมของตัวละครในบรรทัดเดียวกัน


3
ผมคิดเสมอว่าCtrl-Nเป็นต่อไปและCtrl-Pเป็นเวลาก่อนหน้านี้ นั่นคือสิ่งที่พวกเขายืนใน Emacs อยู่แล้วที่พวกเขาจะผูกพันและnext-line previous-lineนอกจากนี้ยังCtrl-Pไม่ได้เปลี่ยนใน ; มันเป็นที่หลบหนีการเชื่อมโยงข้อมูล การเปลี่ยนแปลงในการCtrl-Oมี
Lithis

@Lithis ฉันยืนแก้ไข
muru

2
@ Lithis จริงๆสิ่งเดียวที่ฉันรู้เกี่ยวกับ Emacs คือ cx ce
muru

คำตอบทางประวัติศาสตร์และชัดเจนขอบคุณ Muru มาก! ฉันควรนึกถึงรหัส ascii ของตัวละครที่คำตอบมักจะอยู่ในนั้น
statox

@muru นั้นแย่เกินไปเนื่องจาก Emacs มีข้อเสนอมากมายโดยเฉพาะโหมด org ซึ่งเป็นประโยชน์กับฉันอย่างมาก ฉันขอแนะนำให้คุณตรวจสอบโครงการ Spacemacs github.com/syl20bnr/spacemacsซึ่งเน้นการจำลอง Vim เป็นอย่างมากเพื่อที่คุณจะได้ไม่ต้องใช้คำสั่ง Emacs ดั้งเดิมใด ๆ บางทีนั่นอาจเปลี่ยนการรับรู้ของคุณเล็กน้อย
xji

8

:help key-notationดู

  1. <NL>หมายถึง "linefeed" และ<CR>หมายถึง "การคืนสินค้า"

    นี่เป็นวิธีที่แตกต่างกันสองวิธีในการแบ่งบรรทัดปัจจุบัน พวกมันถูกผูกไว้กับตัวควบคุม ( ctrl-jและctrl-m) ที่ต่างกันในอดีตแต่มักจะถูกแทรกด้วยคีย์เดียวกัน, <CR>. ฉันเห็นด้วยว่าการใช้<NL>ในบริบทนี้ดูเหมือนจะไม่ง่าย

  2. "การแมป" เหล่านั้นทั้งหมด (ไม่ใช่การแมปจริง ๆ ) จะทำงานในลักษณะเดียวกัน

  3. ประวัติศาสตร์ส่วนใหญ่ยังมีข้อ จำกัด ข้ามแพลตฟอร์ม

    ไม่มีปุ่มกดเฉพาะของ Bill Joy แต่สติ๊กเกอร์ลูกศรอยู่บนhjklปุ่ม เนื่องจากตัวแก้ไขคำกริยาหายากในเวลานั้นการกดแป้นเหล่านั้นจึงแทรกเฉพาะอักขระที่เกี่ยวข้องในสิ่งที่คุณทำ คุณจะต้องกด<C-h>, <C-j>, <C-k>และ<C-l>เพื่อเลื่อนเคอร์เซอร์บนหน้าจอ

    ในขณะที่คุณสามารถดูมีค่อนข้างทับซ้อนระหว่างj, <C-j>, และ<NL> โดยทั่วไปมีความหมายว่า "ถัดไป" ในกลุ่มมันง่ายที่จะดูว่ามันถูกรวมเข้ากับสหายของมันอย่างไร<Down><C-n>

  4. เนื่องจากเป็นคำพ้องความหมายคุณจึงมีอิสระที่จะใช้สิ่งที่ดีที่สุดสำหรับคุณ

    <CR>ตัวอย่างเช่นเป็นกุญแจสำคัญที่น่าสนใจสำหรับการแมปของคุณเอง


ขอบคุณสำหรับการรู้แจ้ง! ฉันเห็นด้วยอย่างมากกับการ<CR>ทำแผนที่ อีกหนึ่งคำถาม: ฉันรู้ว่า "การผสมคีย์" เหล่านั้นไม่ได้เรียกว่าการแมป แต่ฉันไม่แน่ใจว่าฉันควรโทรหาพวกเขาอย่างไร
statox

นั่นเป็นคำถามที่น่าสนใจฉันมักจะเรียกพวกเขาว่า "คำสั่ง"
romainl

ผมอาจจะผิด แต่ไม่ได้เป็น "คำสั่ง" หมายถึงอดีตคำสั่งโหมดชอบ:ls, :substitute, newฯลฯ ... ?
statox

xยังเป็น "คำสั่ง"
romainl

อันที่จริงฉันเพิ่งเห็นว่าสาย doc x, dd, cฯลฯ "คำสั่ง" ดังนั้นคุณจะต้องถูกต้องฉันเดาว่าjหรือ^Jยังเป็นคำสั่ง
statox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.