เปลี่ยนคีย์ลัด bash เช่น Ctrl-C หรือไม่


21

ฉันใช้ Kubuntu 10.04 ฉันต้องการเปลี่ยนปุ่มลัดมาตรฐานบางอย่างสำหรับทุบตี (เทอร์มินัล)

นี่คือทางลัดที่ฉันต้องการตั้งค่า:

  • Ctrl- Cเพื่อคัดลอกข้อความที่เลือกในเครื่องไปยังคลิปบอร์ด

  • Ctrl- Vเพื่อวางจากคลิปบอร์ดลงในเครื่อง

  • Ctrl- Zเพื่อเลิกทำการแก้ไขในบรรทัดปัจจุบันในเทอร์มินัล

  • Ctrl- Shift- C(หรือดียิ่งขึ้น Super- C) เพื่อยกเลิกคำสั่ง

  • Ctrl- Shift- Z(หรือSuper- Z) เป็นคำสั่งพื้นหลัง

  • Ctrl- Shift- V(หรือSuper- V) จะเป็นคำสั่งแทรกตัวอักษร (หรืออะไรก็ตามCtrl- zทำมาก่อน)

ฉันจะทำการเปลี่ยนแปลงเหล่านี้ได้อย่างไร

BTW ฉันชอบวิธีที่เทอร์มินัลทำงานบน OS X การใช้คีย์คำสั่งทำให้คำสั่ง copy / paste ทั้งหมดสอดคล้องกันมาก (ไม่เหมือนกับสิ่งอื่น ๆ ใน OS X)

PS ฉันอ่านหน้าคนทุบตีและมันก็ไม่ได้ช่วย มันทำให้ฉันมีความคิด แต่ฉันต้องการตัวอย่างที่เฉพาะเจาะจงสำหรับชุดค่าผสมข้างต้น ขอบคุณ


บางส่วนของ "ทางลัด" เหล่านี้ไม่สามารถ "นำไปใช้" ในทุบตีได้ แต่จะต้องใส่ลงในเทอร์มินัลเอง (xterm, gnome-terminal, konsole ฯลฯ ) .. เช่น "ข้อความที่เลือก", "คลิปบอร์ด"
akira

คำตอบ:


10

สิ่งเหล่านั้นไม่ใช่คุณสมบัติของการทุบตี แต่เป็นคุณสมบัติของไดรเวอร์เทอร์มินัล stty(1)เช่นนี้พวกเขากำลังตามที่ระบุไว้

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

5
ตกลง. ขอบคุณสำหรับคำใบ้ ตอนนี้ฉันยังต้องการบรรลุเป้าหมายของฉัน และฉันก็รู้ว่า inputrc สามารถทำการแมป Ctrl-C ใหม่ได้ แต่ฉันไม่สนใจว่าฉันจะทำอย่างไรฉันแค่อยากรู้ว่าการแมปทางลัดเหล่านี้ในเทอร์มินัลใหม่ได้อย่างไร
พอล

15
นี่คือ "ปลา": stty intr \ ^ k (โดยที่คำสั่งยุติเมื่อก่อน Ctrl-C ตอนนี้กลายเป็น Ctrl-K, K สามารถเป็นคีย์อัลฟ่าใด ๆ ) ไม่มีใคร "ให้ปลาตัวนั้น" ฉันทำงานหนักเพื่อหามันด้วยตัวเอง ดังนั้นการเทศนาด้วยสุภาษิตทำให้คุณดูเหมือนกระตุก
Paul

คุณสามารถตั้งค่าใหม่อีกครั้งเป็น Ctrl + Shift + C ได้อย่างไร
crypdick

8

นี้จะเกือบแก้ไขอย่างสมบูรณ์ในขณะนี้ ส่วนหนึ่งของการแก้ปัญหาได้รับความสนใจจากฉันเป็นครั้งแรกโดย MTK358 ที่http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ . เขาชี้ให้เห็นถึงความจริง (ค่อนข้างชัดเจนกับความอับอายขายหน้าของฉัน) ข้อเท็จจริงที่ว่าปุ่มลัดคัดลอกและวางสามารถเปลี่ยนได้อย่างง่ายดายโดยการตั้งค่าเมนูของ konsole เมื่อฉันเห็นสิ่งนี้มันใช้เวลาประมาณ 1 นาทีในการตั้งค่า Ctrl-C และ Ctrl-V เพื่อคัดลอกและวางด้วยเทอร์มินัล

ส่วนอื่น ๆ ของการแก้ปัญหาควรจะชัดเจนจากหน้าคน stty แต่มันไม่ใช่ (สำหรับฉัน) ฉันลงเอยด้วยการทดลองโดยอิงตามปมต่างๆเช่นที่โพสต์ด้านบน

ฉันตัดสินใจว่าคีย์ใดที่ไม่ใช่ตัวเลขฉันต้องการแทนที่ Ctrl-C เป็นคำสั่งยุติ (ฉันใช้ "k") ฉันไม่เคยพบข้อมูลใด ๆ เกี่ยวกับวิธีถ่ายทอดโมดิฟายเออร์กะไปยัง stty ดังนั้นฉันจึงยอมแพ้ในสิ่งนั้น เมื่อตัดสินใจแล้วสิ่งที่ฉันต้องทำคือป้อนคำสั่งต่อไปนี้ในบรรทัดคำสั่ง:

stty intr \ ^ k

ฉันยืนยันว่าทุกอย่างทำงานได้ตามที่ต้องการ

ตอนนี้ฉันต้องวางคำสั่งเดียวด้านบน (stty intr \ ^ k) ในสคริปต์เริ่มต้น ฉันไม่แน่ใจว่าอันไหนเป็น "เหมาะสม" ฉันต้องการให้การเปลี่ยนแปลงนี้เป็นระบบที่กว้างและถาวร

ข้อเสนอแนะใด ๆ เกี่ยวกับสคริปต์ที่ฉันควรวางคำสั่งใน?

และในที่สุดคำตอบของนักเทศน์ก็ไม่จำเป็นและไม่ช่วยเหลือ


คุณเคยพิจารณาว่าสคริปต์เริ่มต้น "ถูกต้อง" ที่ใช้คืออะไรหรือเป็นวิธีที่ดีกว่า ฉันกำลังดิ้นรนกับปัญหาเดียวกันนี้ (คำถามเดิมของคุณ) แต่ในขณะที่ฉันสามารถสร้าง 'stty intr \ ^ k' ctrl-k ได้ แต่ก็ไม่ได้ผูกมัด ctrl-c และ 'stty intr undef' และ 'stty intr = ^ -' ทำ ctrl-c ยังคงส่ง interupt . และ 'stty -a' ไม่เคยแสดงการเปลี่ยนแปลงใด ๆ ที่ฉันทำ
EricS

4

สามารถตั้งค่าบางส่วนได้โดยใช้กลไกแป้นพิมพ์ลัด KDE ปกติ ในเมนู "การตั้งค่า" ของ Konsole ให้คลิกที่ "กำหนดค่าทางลัด" และคุณจะได้รับกล่องโต้ตอบซึ่งคุณสามารถใช้เพื่อเปลี่ยนการเชื่อมโยงคีย์สำหรับฟังก์ชันที่ KDE จัดการ ซึ่งจะช่วยให้คุณสามารถตั้งค่า Ctrl + C เพื่อคัดลอกและ Ctrl + V เพื่อวาง - โปรดทราบว่าเมื่อคุณทำเช่นนั้นลำดับคีย์เหล่านั้นจะไม่ถูกส่งผ่านไปยังเทอร์มินัลอีกต่อไปดังนั้นคุณจะไม่สามารถใช้ Ctrl + C เพื่อขัดจังหวะโปรแกรมตัวอย่างเช่น

ฟังก์ชั่นอื่น ๆ จะถูกควบคุมโดยห้องสมุดซึ่งคุณสามารถกำหนดค่าโดยการแก้ไขไฟล์readline ~/.inputrcในการรับ Ctrl + Z เพื่อยกเลิกการแก้ไขใด ๆ ที่ทำในบรรทัดปัจจุบันคุณต้องการเพิ่ม

C-z: revert-line

แต่ลำดับคีย์นั้นอาจถูกเทอร์มินัลติดอยู่แล้วดังนั้นคุณอาจต้องใช้sttyเพื่อยกเลิกการผูกมันก่อนที่มันจะทำงาน ก่อนอื่นให้ดู^Zในผลลัพธ์ของstty -a(ดังแสดงในคำตอบของ Ignacio) จากนั้นยกตัวอย่างเช่นหากปรากฏขึ้นsusp = ^Zให้เรียกใช้

stty susp ^-

เพื่อยกเลิกการผูกการจับคู่คีย์นั้น

การเปลี่ยนแปลงอื่น ๆ ที่คุณถามเกี่ยวกับจะต้องทำsttyอย่างที่อิกนาชิโอพูดเพราะเป็นฟังก์ชันเทอร์มินัล แต่ฉันไม่แน่ใจอย่างแน่นอน ปัญหาคือฉันไม่รู้ว่าเทอร์มินัลรู้จัก Shift หรือไม่หรือไม่มันจะถ่ายทอดข้อมูลนั้นไปยังsttyวิธีใด


3

Bash ใช้emacsหรือviโหมดบนบรรทัดคำสั่ง ไม่มีแนวคิดของ "การเลือก" หรือ "คลิปบอร์ด" มันใช้สิ่งต่าง ๆ เช่น "kill buffer" และ "point", "mark", "word", "line", "kill" และ "yank" เป็นต้น

การลองใช้ฟังก์ชั่นสไตล์ GUI ของ shoehorn ในนั้นจะทำให้หงุดหงิดที่สุดและจะไม่ทำงานอย่างเต็มที่ คุณจะต้องพยายามที่จะรวมการทำงานของstty, readlineและสถานีของคุณ (สมมุติTerminal.appสำหรับคุณ) คุณจะต้องทำการแมปฟังก์ชั่นเช่นintr, susp, lnextฯลฯ เพื่อให้คุณยังคงสามารถใช้คุณสมบัติของพวกเขา

ฉันขอแนะนำอย่างยิ่งต่อการดัดแปลงที่รุนแรงเช่นนี้ มันไม่ได้ออกแบบมาเพื่อทำสิ่งที่คุณต้องการ

เมื่ออยู่ในกรุงโรม ...


Dave สำหรับระบบที่ทำงานเหมือนกับ OS X ฉันขอแนะนำให้คุณใช้ OS X ได้ไหม ตามที่เดนนิสบอกใบ้ถึงแม้ว่าคุณจะสามารถทำให้มันใช้งานได้คุณจะรู้สึกแย่เมื่อเข้าสู่ระบบเป็นอะไรก็ได้ยกเว้นคุณอยู่ในเครื่องของคุณเอง
msw

ฉันไม่สามารถรับรองคำสั่งอื่น ๆ ได้ แต่คัดลอกและวางได้อย่างสมบูรณ์แบบในหน้าต่างคำสั่งและมีประโยชน์มาก ฉันใช้มันอย่างต่อเนื่องเพื่อคัดลอกและวางระหว่างหน้าต่างอื่นและคอนโซลและทำมาหลายปีแล้ว Shift-Ctrl-C และ Shift-Ctrl-V ทำงานด้วยวิธีนี้เพื่อ Konsole ออกนอกกรอบ และแม้ว่าฉันจะทำสิ่งนี้ทุกวันเป็นเวลาหลายปี แต่ฉันก็ลืมและกด Ctrl-c ใน Konsole อย่างหลีกเลี่ยงไม่ได้ โดยส่วนตัวฉันพร้อมที่จะหยุดใช้คำว่า "เมื่ออยู่ในโรม" และทำการแมปใหม่ให้ทำงานเหมือนแอปพลิเคชันอื่น ๆ
EricS

1

ผมใช้ Ubuntu และการเปลี่ยนแปลงทางลัดสำหรับการคัดลอกจากค่าเริ่มต้นCtrl+ Shift+ Cกับปกติมากขึ้นและง่าย+Ctrl Cอย่างไรก็ตามเรื่องนี้ทำให้ผมทำงานเป็นปัญหาไม่สามารถส่งคำสั่งขัดจังหวะ^ C

ขอบคุณ@Paul คำตอบฉันพบการรันคำสั่ง

tty intr \^k

จะให้ฉันไปส่งคำสั่งขัดจังหวะใช้+Ctrl Kอย่างไรก็ตามคำสั่งนี้จำเป็นต้องเรียกใช้ทุกครั้งที่ฉันเปิดเครื่องเทอร์มินัลซึ่งเป็นเรื่องยุ่งยาก (เหมือนกับที่เขาพูดถึงตัวเอง)

ด้วยนิด ๆ หน่อย ๆ ของการวิจัยต่อไป (googling 😂) ผมพบว่าวิธีการที่จะดำเนินการคำสั่งทุกครั้งที่ขั้วเปิด (ในอูบุนตูแล้ว)

ดังนั้นในที่สุดก็รันคำสั่งต่อไปนี้(หนึ่งครั้ง) (ใน Ubuntu 18.04 และมีโอกาสมากขึ้น) จะให้พฤติกรรมที่คาดหวังทุกครั้ง

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

ในที่สุดมันก็คุ้มที่จะพูดถึงว่าคุณต้องไม่ใช้Kปุ่ม คุณสามารถแลกเปลี่ยนตัวอักษรkในคำสั่งทั้งหมดข้างต้นเป็นรหัสตัวอักษรที่คุณเลือก

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