One option would be to create ~/Library/KeyBindings/ and save this as DefaultKeyBinding.dict:
{
"@\UF702" = moveWordBackward:;
"@\UF703" = moveWordForward:;
"~\UF702" = moveToBeginningOfLine:;
"~\UF703" = moveToEndOfLine:;
"~$\UF702" = moveToBeginningOfLineAndModifySelection:;
"~$\UF703" = moveToEndOfLineAndModifySelection:;
}
You can't change ⇧⌘← or ⇧⌘→ though. And it doesn't work in some text views or Xcode or Firefox.
Using KeyRemap4MacBook, you could add this to private.xml:
<autogen>--KeyToKey-- KeyCode::CURSOR_LEFT, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_COMMAND</autogen>
<autogen>--KeyToKey-- KeyCode::CURSOR_RIGHT, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_COMMAND</autogen>
<autogen>--KeyToKey-- KeyCode::CURSOR_LEFT, VK_SHIFT | VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_SHIFT | VK_COMMAND</autogen>
<autogen>--KeyToKey-- KeyCode::CURSOR_RIGHT, VK_SHIFT | VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_SHIFT | VK_COMMAND</autogen>
<autogen>--KeyToKey-- KeyCode::CURSOR_LEFT, VK_COMMAND | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION</autogen>
<autogen>--KeyToKey-- KeyCode::CURSOR_RIGHT, VK_COMMAND | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION</autogen>
<autogen>--KeyToKey-- KeyCode::CURSOR_LEFT, VK_COMMAND | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION | VK_SHIFT</autogen>
<autogen>--KeyToKey-- KeyCode::CURSOR_RIGHT, VK_COMMAND | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION | VK_SHIFT</autogen>
It would make going back with ⌘← and changing tabs with ⇧⌘← stop working though.
See the source for the key code constants and predefined settings.