Emacsify OSX全体:「特殊文字」の代わりにワードフォワード(⌥+ F)およびワードバックワード(⌥+ B)?


8

はい、OSX はカーソルを単語の後方および前方に移動するための+ および+ をすでにサポートしていますが、矢印キーに到達するのは面倒です。では、なぜ+ B+ Fでこれを行わないのですか?つまり、私が(意図的に)+ 付きの積分記号oteを書いたことは一度もありませんB(今は別です)。

要するに、私はOSX全体でEmacsのような動作(たとえば、文字転送の場合は^+ だけではない)を使用したいと思いFます。


関連質問: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.dictXcodeやFirefoxなどの一部のアプリケーションでは機能しません。キルリングを使用するメソッドは、リッチテキストからフォーマットを削除します。デッドキー状態を入力するキーの組み合わせ(USキーボードレイアウトの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

1つのオプションは、事前定義された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

おっしゃるように、すべてのアプリで機能するわけではありません。.dictたとえば、Xcodeはこれに悩まされることはありません(ただし、カスタムキーバインド、たとえば⌘+ Bや⌘+ Fで「解決」できます)。それでも、OS全体で(ほぼ)Emacsのような動作をさせるには非常に強力です。
Blaz

KeyRemap4MacBookには、たとえば⌥Fから⌥→に変更されるemacsモードグループがありますが、ターミナルまたはEmacsが最前面にある場合は変更されません。これに基づいてprivate.xmlを作成することにより、カスタマイズできます。本当の解決策は、矢印キーと修飾キーがより適切な位置にあるキーボードを入手することです。
Lri

1
@courteous KeyRemap4MacBookのemacsモードがこれを行います。keylayoutファイルやDefaultKeyBinding.dictでは不可能です。
Lri

1
@courteous私もそれを答えに加えました。私が持っている"~w" = selectWord:;中で、私のDefaultKeyBinding.dict
Lri
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.