ทำไมfn- ⇧- →(หรือคนอื่น ๆ ) ทำที่บ้าน / สิ้นสุดใน Terminal แต่ a ⌘- →ทำงานได้ทุกที่อื่น?
ดังนั้นเพื่อให้ชัดเจนคำถามคือวิธีทำให้ Terminal ใช้Command+ ←และ→สำหรับบ้านและที่สิ้นสุด
ทำไมfn- ⇧- →(หรือคนอื่น ๆ ) ทำที่บ้าน / สิ้นสุดใน Terminal แต่ a ⌘- →ทำงานได้ทุกที่อื่น?
ดังนั้นเพื่อให้ชัดเจนคำถามคือวิธีทำให้ Terminal ใช้Command+ ←และ→สำหรับบ้านและที่สิ้นสุด
คำตอบ:
เทอร์มินัลไม่สามารถมอบฟังก์ชันการทำงานที่คุณต้องการได้อย่างสะดวกสบายอย่างที่มันเป็น
เหตุผลก็คือโปรแกรมที่ทำงานภายใน Terminal มีกฎที่แตกต่างกันสำหรับการย้ายเคอร์เซอร์ไปที่จุดเริ่มต้น / สิ้นสุดของบรรทัดตัวอย่างเช่น
bash
(และกระสุนอื่น ๆ ) ใช้CtrlAและCtrlEvi
ใช้0และ$/Shift4โปรแกรมอื่นอาจใช้ปุ่มอื่น ไม่มีชุดคีย์สากลสำหรับการวางเคอร์เซอร์ที่จุดเริ่มต้น / สิ้นสุดของบรรทัด
แน่นอนเทอร์มินัลสามารถรักษารายการชุดคีย์สำหรับโปรแกรมทั่วไปจำนวนหนึ่งตรวจสอบสิ่งที่กำลังทำงานและส่งคีย์ที่ถูกต้องให้คุณหรืออาจให้รายการเมนูเช่นย้ายเคอร์เซอร์ไปที่จุดเริ่มต้นของเชลล์ด้านใน⌘←แล้วส่งCtrlAเบื้องหลัง. แต่ฉันคิดว่าวิศวกรของ Apple คิดว่าถ้าคุณลงทุนในดินแดนCLIคุณจะรู้ว่ามันเป็นอย่างไร
เทอร์มินัลจัดเตรียมOption←และOption→ทำงานbash
ตามที่คาดไว้และเลื่อนเคอร์เซอร์ไปที่ตำแหน่งเริ่มต้นของคำก่อนหน้า / ถัดไป นั่นเป็นเพราะการผสมคีย์เหล่านี้ถูกแมปEscbและEscb(ดูman bash
ส่วน "คำสั่งสำหรับการย้าย" สำหรับข้อมูลเพิ่มเติม) ในvi
ตัวอย่างเฉพาะงานหลัง (ชนิด) ทำงาน (ท้ายคำตอบนี้ฉันจะแสดงวิธีกำหนดค่าvi
ให้ทำงานกับOption←และOption→)
แต่ต้องขอบคุณอัตโนมัติ, AppleScript และชื่อแทนทุบตีคุณจะได้รับ⌘←และ⌘→การทำงานกับbash
(และอาจจะเปลือกหอยอื่น ๆ ) vi
และ
ขั้นตอนแรกคือการทำแผนที่⌘←และ⌘→การและCtrlA CtrlEในขั้นตอนที่สองฉันจะแสดงวิธีกำหนดค่าvi
เพื่อเป็นเกียรติCtrlAและCtrlE(ซึ่งจะทำให้vi
เข้ากันได้กับ⌘←และ⌘→)
แผนที่⌘←และ⌘→ไปยังCtrlAและCtrlE
ในเทอร์มินัลไปที่การตั้งค่า ... > การตั้งค่า> [โปรไฟล์ที่ใช้งานอยู่ของคุณ]> คีย์บอร์ด:
กด+เลือก "เคอร์เซอร์ซ้าย", "Control-Shift" เป็นตัวดัดแปลงและการกระทำ "ส่งข้อความ:" จากนั้นกดCtrlA( \001
จะปรากฏในช่องข้อความ) และยืนยันด้วยOK:
(ในคำตอบก่อนหน้านี้ฉันใช้คำว่า "Shift" เป็นตัวดัดแปลงฉันสังเกตเห็นว่าการตั้งค่านี้ขัดแย้งกับ⌘shift←ซึ่งแสดงแท็บ Terminal ก่อนหน้านี้หากคุณไม่ปล่อยมือ⌘ทันทีโดยใช้ "Control-Shift" แก้ไขที่.)
ตอนนี้เพิ่มคีย์ผสมสำหรับ "เคอร์เซอร์ขวา" แต่กดCtrlE( \005
จะปรากฏในช่องข้อความ) OKยืนยันด้วย
เปิด Automator (เช่นกด⌘spaceเพื่อเปิด Spotlight และพิมพ์Automator ) เลือกไฟล์> ใหม่แล้วเลือกService
:
ลากRun AppleScript
ไปที่บานหน้าต่างด้านขวา:
พิมพ์สคริปต์ต่อไปนี้:
on run {input, parameters}
tell application "System Events"
tell application process "Terminal"
key code 123 using {shift down, control down}
end tell
end tell
end run
และบันทึกเป็นMove Cursor to Beginning of Line
:
ทำซ้ำขั้นตอนที่ 4. ถึง 6 ด้วยสคริปต์นี้:
on run {input, parameters}
tell application "System Events"
tell application process "Terminal"
key code 124 using {shift down, control down}
end tell
end tell
end run
และบันทึกเป็นMove Cursor to End of Line
:
นี่คือสิ่งที่เทอร์มินัล> บริการดูเหมือนตอนนี้:
กำหนดค่าvi
ให้เกียรติCtrlAและCtrlE
เปิด.bashrc
ด้วยโปรแกรมแก้ไขที่คุณชื่นชอบและเพิ่มบรรทัดนี้:
alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'
map
คำสั่งสองคำสั่งแรกบอกvim
ให้ตีความControlEและControlAเป็น$และ0ซึ่งเลื่อนเคอร์เซอร์ไปที่จุดเริ่มต้นหรือจุดสิ้นสุดของบรรทัดตามลำดับ
สุดท้ายทั้งสองmap
คำสั่งบอกvim
จะย้ายหนึ่งคำเคอร์เซอร์ในเวลาที่คุณจะคาดหวังว่าเมื่อมีการกดและoption←Option→
คำเตือน
คุณจะสังเกตเห็นว่ามีความล่าช้าเล็กน้อยระหว่างช่วงเวลาที่คุณกด⌘←หรือ⌘→ช่วงเวลาที่เคอร์เซอร์เคลื่อนไหว
โปรดทราบว่าจะใช้งานได้เฉพาะกับโปรแกรมที่ให้เกียรติCtrlA/ CtrlEดังนั้นคุณอาจต้องการเรียนรู้การผสมผสานคีย์เฉพาะของแต่ละโปรแกรมที่คุณใช้ใน Terminal
(ทดสอบบน macOS Sierra 10.12.4)
⌘
ทางลัดที่เลว
vi
ซึ่งเป็นแอปพลิเคชั่นที่แตกต่างจากเทอร์มินัลโดยสิ้นเชิง
แน่นอนมันเป็นไปได้
ก่อนอื่นคุณสามารถใช้เครื่องมือฟรี "DoubleCommand" หากคุณมีแป้นพิมพ์ windows พร้อมปุ่ม HOME / END เพื่อให้ทำงานได้อย่างที่ควรจะเป็น (เริ่มต้น / สิ้นสุดบรรทัด)
ประการที่สองสำหรับเทอร์มินัลโดยเฉพาะไปที่การตั้งค่าแป้นพิมพ์แก้ไขไอคอน / แป้นซึ่งดูเหมือนลูกศรชี้ขึ้นไปทางซ้ายเลือก "ส่งข้อความ" และพิมพ์ ctrl + a ทำ!
เช่นเดียวกับปุ่มวางสาย ..
หากคุณไม่มีแป้นพิมพ์พีซีคุณสามารถทำเช่นเดียวกันกับคีย์ผสมอื่น ๆ