Emacsify OSX ตลอด: word-forward (⌥ + F) และ word-backward (⌥ + B) แทนที่จะเป็น 'อักขระพิเศษ'?


8

ใช่ OSX รองรับแล้ว+ และ+ สำหรับการเลื่อนเคอร์เซอร์ไปข้างหลังและข้างหน้า แต่การไปยังปุ่มลูกศรนั้นน่ารำคาญ ดังนั้นทำไมไม่มี+ Bและ+ Fทำเช่นนี้? ฉันหมายถึงฉันไม่ได้ (ตั้งใจ) เขียนเครื่องหมายอินทิกรัล∫ด้วย+ B(นอกเหนือจากนี้)

ในระยะสั้นฉันควรจะมีพฤติกรรมคล้าย Emacs (ไม่ใช่เพียงแค่พูด^+ Fสำหรับตัวละครไปข้างหน้า) ตลอด OSX


คำถามที่เกี่ยวข้อง: หยุดใช้ตัวเลือกแป้นพิมพ์ Mac เป็นตัวดัดแปลงให้เป็นอักขระ

คำตอบ:


7

DefaultKeyBinding.dict

สร้าง~/Library/KeyBindings/และบันทึกรายการคุณสมบัติเช่นนี้เป็น~/Library/KeyBindings/DefaultKeyBinding.dict:

{
  "^ " = setMark:;
  "^/" = undo:;
  "^l" = selectParagraph:;
  "^u" = deleteToBeginningOfParagraph:;
  "^w" = deleteToMark:;
  "^x" = {
    "^x" = swapWithMark:;
    "^m" = selectToMark:;
  };
  "^V" = pageDownAndModifySelection:;
  "~@" = selectWord:;
  "~b" = moveWordBackward:;
  "~c" = (capitalizeWord:, moveForward:, moveForward:);
  "~d" = deleteWordForward:;
  "~f" = moveWordForward:;
  "~l" = (lowercaseWord:, moveForward:, moveForward:);
  "~r" = centerSelectionInVisibleArea:;
  "~u" = (uppercaseWord:, moveForward:, moveForward:);
  "~v" = pageUp:;
  "~w" = (deleteToMark:, setMark:, yank:, swapWithMark:);
  "~B" = moveWordForwardAndModifySelection:;
  "~F" = moveWordForwardAndModifySelection:;
  "~V" = pageUpAndModifySelection:;
}

DefaultKeyBinding.dictไม่สามารถใช้งานได้ในบางแอปพลิเคชันเช่น Xcode หรือ Firefox วิธีการที่ใช้ kill ring จะลบการจัดรูปแบบออกจาก rich text การผสมคีย์ที่ป้อนสถานะคีย์ตาย (เช่น option-u ในรูปแบบแป้นพิมพ์สหรัฐฯ) ไม่สามารถกำหนดใหม่ได้

ดูเพิ่มเติมhttp://www.hcs.harvard.edu/~jrus/site/KeyBindings/Emacs%20Opt%20Bindings.dict transposeWords:ไม่ทำงานในแอปพลิเคชันส่วนใหญ่ openDocument:และsaveDocument:ไม่ทำงานในแอปพลิเคชันที่ใช้การบันทึกอัตโนมัติและperformClose:ไม่สามารถทำงานได้ทุกที่

ดูhttp://www.hcs.harvard.edu/~jrus/site/cocoa-text.htmlหรือhttp://osxnotes.net/keybindings.htmlสำหรับข้อมูลเพิ่มเติม

KeyRemap4MacBook

ทางเลือกหนึ่งคือการเปิดใช้งานการตั้งค่าในกลุ่มโหมด Emacs ที่กำหนดไว้ล่วงหน้า:

อีกทางเลือกหนึ่งคือการบันทึกไฟล์แบบนี้~/Library/Application Support/KeyRemap4MacBook/private.xml:

<?xml version="1.0"?>
<root>
  <appdef>
    <appname>EMACSMODEIGNORE</appname>
    <equal>com.gnu.Emacs</equal>
    <equal>com.apple.Terminal</equal>
    <equal>com.googlecode.iterm2</equal>
    <equal>com.vmware.fusion</equal>
    <prefix>com.vmware.proxyApp.</prefix>
  </appdef>
  <item>
    <name>emacs</name>
    <identifier>private.emacs</identifier>
    <not>EMACSMODEIGNORE</not>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_LEFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT</autogen>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_UP, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_DOWN, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION | VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION | VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::D, VK_OPTION | ModifierFlag::NONE, KeyCode::FORWARD_DELETE, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_OPTION | ModifierFlag::NONE, KeyCode::PAGEUP</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::PAGEUP, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::PAGEDOWN, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::U, VK_CONTROL | ModifierFlag::NONE, KeyCode::DELETE, VK_COMMAND</autogen>
  </item>
</root>

จากนั้นเปิดแอปพลิเคชัน KeyRemap4MacBook กดปุ่ม ReloadXML และเปิดใช้งานการตั้งค่า

เปลี่ยนรหัสคีย์หากคุณใช้รูปแบบแป้นพิมพ์เช่น Dvorak หรือ Colemak

ดูhttps://pqrs.org/macosx/keyremap4macbook/xml.html.enหรือhttp://osxnotes.net/keyremap4macbook.htmlสำหรับข้อมูลเพิ่มเติม


น่าอัศจรรย์ การเปลี่ยนพฤติกรรมที่ค่อนข้างต่ำและง่ายมาก ก้าวกระโดดใกล้กับสวรรค์ของ OS หวังว่าจะมีทางออกที่ดียิ่งขึ้น 100% มิฉะนั้นนี่คือคำตอบ
Blaz

อย่างที่คุณพูดมันไม่ทำงานในแอพทั้งหมด Xcode สำหรับหนึ่งจะไม่ขยับเขยื่อนนี้.dict(แต่ที่สามารถ "แก้ไข" ด้วยปุ่มลัดที่กำหนดเองพูด⌘ + B และ⌘ + F) ยังทรงพลังมากที่มีพฤติกรรมคล้าย Emacs (เกือบ) ตลอดทั้งระบบปฏิบัติการ
Blaz

KeyRemap4MacBook มีกลุ่มโหมด emacsที่เปลี่ยนตัวอย่างเช่น⌥Fถึง⌥→ แต่ไม่ใช่เมื่อ Terminal หรือ Emacs อยู่ด้านหน้าสุด คุณสามารถปรับแต่งได้โดยการสร้างprivate.xmlขึ้นอยู่กับมัน ฉันคิดว่าทางออกที่แท้จริงคือการได้รับแป้นพิมพ์ที่มีปุ่มลูกศรและปุ่มตัวแก้ไขที่ตำแหน่งที่ดีกว่า
Lri

1
@courteous โหมด emacs ใน KeyRemap4MacBook ทำเช่นนั้น ไม่สามารถทำได้ในไฟล์คีย์เลย์เอาต์หรือกับ DefaultKeyBinding.dict
Lri

1
@courteous ฉันเพิ่มเข้าไปในคำตอบเช่นกัน ฉันมี"~w" = selectWord:;ในDefaultKeyBinding.dict ของฉัน
Lri
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.