(arg: n) ในพรอมต์คำสั่งหมายความว่าอย่างไร


10

ใน Codecademy ของCommand Line Courseเมื่อพยายามใช้แป้นพิมพ์ลัดAlt+Shift+#(ซึ่งควรจะคอมเม้นท์บรรทัดปัจจุบัน) ใน command prompt มันจะเปลี่ยน prompt จาก$เป็น(arg: 3)แทนการเพิ่ม dash ที่จุดเริ่มต้นของบรรทัด Alt+Shift+@จะทำให้มันแสดง(arg: 2)แทน ฯลฯ ดูบรรทัดสุดท้ายในภาพด้านล่าง ก่อนที่ผมจะตีมันเป็นเพียงแค่Alt+Shift+#$

ภาพหน้าจอ

ทางลัดทำงานได้ดีบนเครื่องของฉัน

  1. สิ่งนี้คือ(arg: n)อะไร
  2. แป้นพิมพ์ลัดขึ้นอยู่กับว่าทำงานอย่างไร รูปแบบแป้นพิมพ์? OS distro เทอร์มินัลอีมูเลเตอร์? CLI เริ่มต้น อะไร?

คำตอบ:


15

นี่คือพรอมต์ของไลบรารี readline เมื่อคุณป้อนอาร์กิวเมนต์ที่เป็นตัวเลข เมื่อพิมพ์AltShift@บนแป้นพิมพ์คุณจะเห็นได้ชัดว่าคุณกำลังเข้าสู่Alt2แผนที่M-2ใดที่ทำงานdigit-argumentในreadlineโดยค่าเริ่มต้นและเริ่มป้อนอาร์กิวเมนต์ที่เป็นตัวเลข หากคุณกดAlt3(ซึ่งAltShift#แผนที่จะเป็นในกรณีของคุณ) คุณจะเห็นการเปลี่ยนแปลงที่พร้อมท์ให้(arg: 23); คุณสามารถดำเนินการต่อด้วยการAltรวม -digit ใด ๆ

ข้อโต้แย้งเหล่านี้จะถูกใช้สำหรับการทำงานที่ ReadLine yank-nth-argบางอย่างเช่น หากต้องการดูสิ่งนี้ในการทำงานให้เรียกใช้

echo Hello my friend

จากนั้นกดAlt2ตามด้วยCtrlAltY; คุณจะเห็น(arg: 2)พรอมต์ปรากฏขึ้นจากนั้นหายไปและอาร์กิวเมนต์ที่สองของคำสั่งก่อนหน้า (“ ของฉัน”) จะถูกผนวกเข้ากับบรรทัดคำสั่งปัจจุบันของคุณ

ดูเอกสารที่เชื่อมโยงด้านบนสำหรับรายละเอียด Bash ใช้ readline เพื่อจัดการอินพุต กระสุนอื่น ๆ จะไม่แสดงพฤติกรรมเดียวกัน

เทอร์มินัลอีมูเลเตอร์บางตัวใช้คีย์ผสมเหล่านี้บางอย่างเพื่อจุดประสงค์ของพวกเขาเอง เช่นในเทอร์มินัล GNOME Alt-digit จะเปลี่ยนเป็นแท็บที่n คุณจะต้องปิดการใช้งานชุดค่าผสมเหล่านี้เพื่อใช้ฟังก์ชั่น readline

ในกรณีของคุณโปรแกรมจำลองเทอร์มินัลบนเว็บของ Codecademy ดูเหมือนจะไม่สามารถจัดการAltShiftชุดค่าผสมได้เป็นอย่างดี หากคุณไม่ต้องการช็อตคัทอาร์กิวเมนต์ตัวเลขคุณสามารถเปลี่ยนตำแหน่งได้โดยเรียกใช้

bind Meta-3:insert-comment

ในทางทฤษฎีคุณควรจะเก็บสิ่งนี้ไว้อย่างถาวรด้วยการเพิ่ม

Meta-3: insert-comment

ไปที่~/.inputrcไฟล์ แต่ฉันไม่สามารถใช้งาน Codecademy ได้


1
ขอบคุณ. ฉันจะปิดการใช้งาน readline หรืออื่น ๆ เพียงแค่ใช้แป้นพิมพ์ลัดเพื่อแสดงความคิดเห็นบรรทัดคำสั่งปัจจุบันได้อย่างไร
user331380

คุณใช้เทอร์มินัลอีมูเลเตอร์ใด?
Stephen Kitt

ฉันต้องการทราบวิธีการทำบน Codecademy ฉันไม่มีวิธีคลิกขวาและค้นหา เอาท์พุทps -o 'cmd=' -p $(ps -o 'ppid=' -p $$) /usr/local/bin/ein -service-port 4006 -http-port 4007สิ่งนี้ช่วยได้ไหม?
user331380

1
@ user331380 ดูเหมือนว่าคุณกำลังใช้bashเชลล์บน Codeacademy อยู่ที่นั่น bash --noeditingในเปลือกโต้ตอบคุณสามารถเริ่มต้นอินสแตนซ์ใหม่ที่มี ซึ่งจะปิดการใช้งาน readline แต่โปรดจำไว้ว่าreadlineห้องสมุดมีหน้าที่รับผิดชอบคุณสมบัติการแก้ไขบรรทัดจำนวนมากซึ่งอาจทำให้การใช้งานเชลล์แบบโต้ตอบไม่สะดวกขึ้นอีกเล็กน้อย
Sergiy Kolodyazhnyy

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