ฉันจะรับลูกศรควบคุม + ลูกศรซ้ายเพื่อย้อนกลับหนึ่งคำใน iTerm2 ได้อย่างไร


114

ฉันอ่านคู่มือ Linux และสังเกตว่ามันบอกว่าฉันสามารถใช้ control + left และ control + right เพื่อเลื่อนไปข้างหน้าและย้อนกลับคำศัพท์ในเทอร์มินัลขณะทำการแก้ไข

"การกด Ctrl พร้อมปุ่มลูกศรซ้ายหรือขวาจะเลื่อนไปข้างหลังหรือส่งต่อคำในแต่ละครั้งเช่นเดียวกับการกด Esc แล้วกด B หรือ F"

บน OS X control+leftและcontrol+rightพื้นที่ควบคุมปกติ ฉันได้ปิดการใช้งานเหล่านั้น ฉันยังพยายามใช้บานหน้าต่างการตั้งค่าเพื่อตั้งค่าแป้นพิมพ์ลัด:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตามสิ่งนี้ไม่ทำงานและทำให้เกิดข้อผิดพลาดนี้:

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้ถ้าฉันอยู่ใน iTerm และใช้alt+escapeแล้ว B หรือ F ตัวละครจะย้ายไปมา สิ่งนี้เกิดขึ้นก่อนการเปลี่ยนแปลงการกำหนดค่าของฉัน แต่ฉันอยากจะใช้ปุ่มควบคุม + ปุ่มลูกศร


อนึ่งวิธีการที่น่าชื่นชมยิ่งกว่านี้ในการทำเช่นนี้คือการใช้คำสั่ง map + left และ command + right แทน ctrl + left และ ctrl + right ฉันไม่จำเป็นต้องปิดใช้งานระบบใด ๆ เพื่อให้บรรลุสิ่งนี้
หมอโมฮอว์

คำตอบ:


135

ทุบตี

เพียงเพิ่มสิ่งต่อไปนี้ใน~/.inputrc:

"\e[1;5D": backward-word
"\e[1;5C": forward-word

ดูโพสต์ Wiki ที่เก็บถาวรนี้สำหรับคำอธิบายเพิ่มเติม หากคุณต้องการใช้altปุ่มแทนการเคลื่อนไหวแบบคำต่อคำ (เช่นพฤติกรรม OS X เริ่มต้น) ให้ใช้:

"\e[1;9D": backward-word
"\e[1;9C": forward-word

zsh

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

bindkey -e
bindkey '^[[1;9C' forward-word
bindkey '^[[1;9D' backward-word

ดูเอกสารนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ zsh line editor (zle) ในตัว


ทำไมนี้ คุณได้ตั้งค่าโปรไฟล์ของคุณเพื่อใช้ค่าเริ่มต้น Xterm:

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือเหตุผลที่คุณจะต้อง "จับ" ลำดับนี้และบอกreadlineว่าจะทำอย่างไร


หากสิ่งที่กล่าวมาข้างต้นยังไม่ทำงานและคุณใช้ OS X 10.9 (Mavericks) หรือที่นั่นคุณอาจต้องปิดใช้งานทางลัด Mission Control ทั่วโลกซึ่งป้องกันไม่ให้ปุ่มควบคุม + ลูกศรไปถึง iTerm แม้ว่าตัวควบคุมภารกิจจะถูกปิดใช้งาน คุณสามารถทำได้จากการตั้งค่าระบบ→คีย์บอร์ด→ทางลัด→การควบคุมภารกิจ :

แป้นพิมพ์การควบคุมภารกิจ


4
ฉันพยายามทำตามคำแนะนำเพื่อให้ปุ่ม alt + left และ alt + right ทำงาน ฉันเพิ่มสองบรรทัดลงในไฟล์. inputrc ของฉัน แต่สิ่งเดียวที่เกิดขึ้นเมื่อฉันกดปุ่มก็คือ "D" หรือ "C" จะถูกพิมพ์ลงในเชลล์ ฉันใช้ iTerm2 กับ zsh shell ความคิดใด ๆ
Flo

1
@Flo ลองเพิ่มเส้นbindkey -e, bindkey '^[[1;9C' forward-wordและbindkey '^[[1;9D' backward-wordที่คุณ~/.zshrcแทน IIRC zsh ไม่อ่าน.inputrc- หรืออย่างน้อยก็ใช้ได้กับฉันด้วยวิธีนี้
slhck

2
ไม่ทำงานสำหรับฉันด้วย ctrl-left / right + bash แต่ทำงานได้ดีถ้าฉันตั้งค่าสำหรับ alt-left / right
Dalin

3
เพิ่มการแก้ไขเกี่ยวกับทางลัด Mission Control เพื่อป้องกันสิ่งนี้จากการทำงานในลักษณะที่ขุ่นมัวที่สุด หวังว่ามันจะช่วยประหยัดใครบางคนจากที่จะผ่านสิ่งเดียวกันผมก็ไม่ได้ Urgh ...
rubyruy

12
สำหรับ OSX + zsh + iTerm2 + ctrl-left / right ใช้สิ่งต่อไปนี้:bindkey -e; bindkey '\e\e[C' forward-word; bindkey '\e\e[D' backward-word
Artur Bodera

45

วิธีแก้ปัญหาการทำงานสำหรับ zsh เรียบง่ายตรงไปตรงมาและนอกกรอบ

  1. ไปที่: ⌘, Preferences → Profiles → Keys → Keyboard Behavior

  2. โหลดที่ตั้งไว้ล่วงหน้า: Natural Text Editing

โหลดที่ตั้งไว้ล่วงหน้า "การแก้ไขข้อความธรรมชาติ"


ขอบคุณ @Happy Torturer ฉันเชื่อว่าคำตอบที่ดีที่สุดส่วนใหญ่เพราะฉันไม่มี Terminal.app ธรรมดาปัญหานั้นดังนั้นฉันไม่ต้องการแก้ไข bash / zsh เพียงต้องการทำงานทุกอย่างใน Terminal.app
galuszkak

นี่นี่สินี่ ขอบคุณมากสำหรับวิธีนี้! ฉันผ่านขั้นตอนการคลั่งนี้กับ Mac แต่ละเครื่องที่ฉันได้รับแล้ว ตอนนี้ฉันรู้วิธีที่ง่ายที่สุดในการทำให้สิ่งนี้เกิดขึ้นแล้ว ขอขอบคุณ!
vernonk

8

ฉันแก้ไขด้วยวิธีนี้:

ในเมนูด้านบน ไปที่

Profiles 
-> Open profiles... 
-> Edit profiles... (button) 
-> Keys (tab) 
-> Load Preset... (dropdown) 
->  Choose "Natural text editing". Done! :-)

สิ่งที่ฉันมีภายใต้ค่าที่ตั้งไว้คือ "ค่าเริ่มต้นจากโรงงาน"
MaylorTaylor

7

ฉันใช้วิธีการอื่น การใช้BetterTouchToolฉันตั้งโปรแกรมแป้นพิมพ์ลัดที่กำหนดเองสำหรับ iTerm2 เมื่อฉันกด alt-left ใน iTerm2 มันจะส่งแป้นพิมพ์ลัด ctrl-left พร้อมแอ็คชั่น "ส่งแป้นพิมพ์ลัดไปยังแอปพลิเคชันเฉพาะ" แอปพลิเคชั่นคือ iTerm2 ฉันทำเช่นเดียวกันกับ alt-right แมปกับ ctrl-right

ผลกระทบคือการกด alt- ซ้ายหรือ alt-right ใน iTerm ส่ง ctrl-left หรือ ctrl-right โดยตรงไปยัง iTerm2 โดยข้ามทางลัดทั่วทั้งระบบปกติเพื่อย้ายเดสก์ท็อปไปทางซ้ายหรือขวา เช่นนี้ฉันจะได้รับพฤติกรรม mac โดยทั่วไปใน iTerm2 ในเซสชันเทอร์มินัลท้องถิ่น แต่ยังอยู่ในเซสชัน SSH ระยะไกลและฉันสามารถใช้ ctrl-left / ctrl-right มาตรฐานเพื่อย้ายไปยังเดสก์ท็อปที่แตกต่างกัน ฉันเขียนมันที่นี่:

http://www.callum-macdonald.com/2013/04/17/ctrl-left-and-ctrl-right-on-iterm2/


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

7

ที่จริงแล้วฉันพบว่าวิธีที่ง่ายที่สุดคือไปที่การตั้งค่าโปรไฟล์ของฉัน (พบในโปรไฟล์ / คีย์) ลบทางลัดโปรไฟล์ที่ละเมิด (เนื่องจากโปรไฟล์แทนที่ทั่วโลกใน iTerm) ในกรณีของฉัน alt + ซ้ายและ alt + ขวาแล้ว ทางลัดทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน!

นอกจากนี้หากคุณใช้ OS X คุณควรติดตั้งทางลัดกว้าง ๆ ของระบบเช่นใช้ alt + left และ alt + right แทนจุดประสงค์นี้การมีพฤติกรรมที่แตกต่างกันในเทอร์มินัลย่อมก่อให้เกิดความเจ็บปวดในที่สุด

นอกเหนือจากโซลูชันของ chmac ที่ใช้ Better Touch Tool เป็นวิธีที่ยอดเยี่ยมในการเปลี่ยนการควบคุม + ลูกศรของพฤติกรรมใน iterm เท่านั้น


อันที่จริงนี่เป็นทางออกที่ดีที่สุด มันสับสนเพราะพวกเราส่วนใหญ่ไปที่Keysแท็บ แต่เราต้องไปที่Profilesแท็บ -> โปรไฟล์ (เช่นค่าเริ่มต้น) -> กุญแจ
Paschalis

นี่เป็นทางออกที่ปลอดภัยและง่ายที่สุดแน่นอน
คืน

2

โพสต์นี้สอนทางลัดนี้และทางลัดอื่น ๆ เป็น⌥←ลบเพื่อลบคำ:

http://elweb.co/making-iterm-2-work-with-normal-mac-osx-keyboard-shortcuts/


นี่ไม่ได้ตอบคำถามซึ่งเกี่ยวกับการใช้ <ctrl> <left>
DavidPostill

สิ่งที่คุณต้องทำคือใช้ทางลัดที่เหมาะกับความต้องการของคุณ "<ctrl> <left>" หรืออะไรก็ได้ที่คุณต้องการ
Seralto

1
ดังนั้นโปรดอ้างอิงส่วนสำคัญของคำตอบจากลิงก์อ้างอิงเนื่องจากคำตอบอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง
DavidPostill

1

คุณต้องเข้าไปที่Profilesแท็บและลบการแมปสำหรับalt+ leftและalt+ rightตามค่าเริ่มต้นมันจะแสดงผลเป็นค่าฐานสิบหก


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