Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

สร้าง Macro และ Keybinding ฟังก์ชันในไฟล์ .inputrc ของ Linux

Readline ยังให้คุณสามารถจับคู่ (Map) Keybinding (การผูกคีย์) แบบกำหนดเอง (Custom) ได้ โดยการแก้ไข ไฟล์การกำหนดค่า .inputrc ในไดเรกทอรี Home ของคุณ

ต่อไปนี้คือ 2 ประเภทของ Custom keybindings ที่คุณสามารถกำหนดได้:

  1. Macros (แมโคร)
  2. Functions (ฟังก์ชัน)

Macros (แมโคร)

คุณสามารถกำหนด Keybinding ที่เมื่อรัน จะ เติมสตริงตัวอักษร (String of characters) ที่ตำแหน่งเคอร์เซอร์ (Cursor) ปัจจุบัน เพื่อทำเช่นนี้ ให้เพิ่มบรรทัดต่อไปนี้ในไฟล์ .inputrc (หรือสร้างไฟล์ถ้ายังไม่มี):

<key combination>: "<string of characters>"

เช่น สมมติว่าผมพบว่าตัวเอง Redirect (เปลี่ยนทิศทาง) เอาต์พุทไปไฟล์ "~/debug_output.txt" บ่อยครั้ง ผมสามารถกำหนด Macro ใน .inputrc โดยเพิ่มบรรทัดนี้:

Control-g: " > ~/debug_output.txt"

ตอนนี้ ทุกครั้งที่ผมพิมพ์ Key combination Control-g คำสั่ง Redirect จะถูกเพิ่มหลังเคอร์เซอร์ ทำให้ผมนำไปต่อท้ายคำสั่งอื่นๆ ได้ง่าย

จดจำข้อต่อไปนี้เมื่อสร้าง Macro:

  • สามารถเขียน Key combination ภาษาอังกฤษได้ (รายละเอียดเพิ่มเติม ดู man page ของ bash ค้นหาส่วน "Readline Key Bindings")
  • ลำดับตัวอักษรที่ Macro จะแทรก ต้องห่อหุ้มด้วย Double quotes (")
  • การเลือก Control-g เป็น arbitrary (สุ่ม/ตามใจชอบ) คุณสามารถเลือก Combination ที่มีความหมายกับคุณมากกว่า
  • เป็นไปได้ที่จะ Override (ทับ) Keybinding เริ่มต้น (Default) จงระลึกถึงสิ่งนี้เมื่อกำหนดของตัวเอง
  • เพื่อให้ Keybinding เริ่มทำงาน ต้อง เริ่ม Shell instance ใหม่ (.inputrc ถูกอ่านตอน Shell เริ่มต้น)

Functions (ฟังก์ชัน)

คุณยังสามารถสร้าง Keybinding ที่เมื่อรัน จะ เรียกใช้ฟังก์ชัน (Call a function) Readline จัดเตรียม Pre-defined functions (ฟังก์ชันที่กำหนดไว้ล่วงหน้า) จำนวนมากให้เลือก เพื่อ Map key combination ไปยัง Pre-defined function:

<key combination>: <function-name>

สำหรับรายการ Pre-defined functions ที่มีอยู่ ดู GNU Readline manual

ยังเป็นไปได้ที่จะกำหนด Custom functions เอง แต่ต้องเขียนด้วยภาษา C และอยู่นอกขอบเขตของบทช่วยสอน (Tutorial) นี้ อาจครอบคลุมใน Tutorial แยกภายหลัง

Pre-defined function ที่มีประโยชน์คือ menu-complete มันให้พฤติกรรม Auto-completion แบบใหม่

พฤติกรรมเริ่มต้นของ Auto-completion (ผูกกับปุ่ม TAB) คือ:

  • เติมคำสั่ง/ไดเรกทอรี/ไฟล์ ที่พิมพ์บางส่วน หากมี Match (ตรงกัน) เพียงตัวเดียว
  • แสดงรายการ Matches ที่เป็นไปได้ เมื่อมีมากกว่า 1 ตัว

menu-complete จะแทนที่จะ Cycle (วนลูป) ผ่านรายการ Matches ที่เป็นไปได้ เติม Match ถัดไปทุกครั้งที่ฟังก์ชันถูกเรียก พฤติกรรมนี้สะดวก โดยเฉพาะตอน Auto-complete ชื่อไฟล์ยาว เพื่อ Remap ปุ่ม TAB ให้ใช้พฤติกรรมนี้ ให้เพิ่มบรรทัดนี้ใน .inputrc:

TAB: menu-complete

โปรดทราบ: Keybinding ใหม่นี้ จะไม่มีผลใน Shell ปัจจุบัน ต้องเริ่ม Instance ใหม่เพื่อโหลด .inputrc ใหม่

ในบทช่วยสอนนี้ เราเรียนรู้ว่า Keybinding คำสั่งบรรทัดคำสั่ง (Command line) ของ Linux ถูกขับเคลื่อนโดยเครื่องมือชื่อ Readline Keybinding สามารถเป็น 1 ใน 2 ประเภท:

  • Macro: ขยายลำดับตัวอักษร
  • Function: ดำเนินการกระทำ

Readline ให้ชุด Default keybindings แต่อย่างไรก็ตาม ยังให้ความยืดหยุ่นสร้างของตัวเองในไฟล์ .inputrc สุดท้าย เพื่อดู Keybinding ปัจจุบันทั้งหมด ใช้คำสั่ง 'bind':

bind -p