Переназначить «Дом» и «Конец» в начало и конец строки

326

Большая часть моего компьютерного времени проводится в Linux (иногда в Windows). На этих платформах Homeи Endключи повсеместно перейти на начало или конец текущей строки.

Я постепенно привыкаю к ​​использованию одного компьютера Apple в моей жизни, но это по-прежнему расстраивает, когда кажется, что эти ключи привязаны к началу и концу документа, и, похоже, нет никакого ключа для строки основанные действия.

Мой вопрос:

  1. Существуют ли комбинации клавиш, которые мне не хватает для начала и конца строки? (Я в основном использую Terminal, Chrome и LibreOffice)
  2. Есть ли способ привязать функции этих клавиш к функциям, с которыми я знаком? Я готов отказаться от основанных на документе версий, которые кажутся мне бесполезными.

Также два предостережения:

  1. Я не единственный пользователь в системе. Было бы хорошо, если бы мои пользовательские настройки не нарушали опыт других людей. Если это невозможно, я думаю, что у меня есть сильнейшее предпочтение!
  2. Я использую несколько языков и переключаюсь между раскладками клавиатуры, поэтому можно ожидать, что любые решения будут работать даже при переключении между несколькими раскладками клавиатуры.
Калеб
источник
1
Обратите внимание, что, хотя я и нашел решение и ответил на свой вопрос, я открыт для более простых или более универсальных решений. Также процесс обнаружения этого неясен. Например, где вы найдете коды клавиш и имена действий, если я хотел переназначить больше ключей? Не стесняйтесь добавлять ответы, если у вас есть соответствующие знания!
Калеб

Ответы:

304

Ярлыками по умолчанию для перехода к началу или концу (обернутых) строк являются и . и или Aи Eперейти к началу или концу развернутых строк (или абзацев). и двигаться назад / вперед по словам, и все они совместимы с удержанием Shiftдля выбора во время соответствующих ходов.

Вы можете переназначить начало и конец, создав ~/Library/KeyBindings/и сохранив список свойств следующим образом DefaultKeyBinding.dict:

{
    "\UF729"  = moveToBeginningOfLine:; // home
    "\UF72B"  = moveToEndOfLine:; // end
    "$\UF729" = moveToBeginningOfLineAndModifySelection:; // shift-home
    "$\UF72B" = moveToEndOfLineAndModifySelection:; // shift-end
}

Большинство сочетаний клавиш для редактирования текста в OS X определены в /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict.

Применение изменений требует повторного открытия приложений. DefaultKeyBinding.dict игнорируется некоторыми старыми версиями Xcode (работает с последней версией 6.3.1), Terminal и многими кроссплатформенными приложениями.

См. Cocoa Text System и мой веб-сайт для получения дополнительной информации о настраиваемых сочетаниях клавиш.

Назначения клавиш терминала могут быть настроены в Предпочтения> Настройки> Клавиатура. \033OHперемещается в начало строки и \033OFв конец строки.

В Eclipse привязки клавиш следует изменить в «Предпочтения»> «Основные»> «Ключи». Вам нужно изменить привязки по умолчанию для команд Line Start и конец строки (замените ⌘ ← на ↖ и ⌘ → по ↘). Чтобы выбор работал, также измените Select Line Start и Select End End .

PS: Вам может потребоваться выйти из системы и войти снова, чтобы ~/Library/KeyBindings/DefaultKeyBinding.dictизменения вступили в силу.

LRI
источник
1
Полезная информация о сопоставлениях клавиш - я использовал их с (коммерческим) BetterTouchTool, см. Этот ответ .
RichVel
3
Это не работает в большинстве приложений по моему опыту. Лучше использовать Карабина-Элементы.
Тимммм
3
Это здорово, потому что он работает в терминалах, iTerm2, Chrome, Sublime и Outlook. Альтернатива (Карабина) менее хороша, потому что она отображает «Домой» в Command + LeftArrow, которая фактически переключает окна в Терминале. Не забудьте перезапустить все приложения после сохранения файла .dict.
Уилл Шеппард
1
Это не работает с vim
MohitC
2
Этот параметр работает для меня в Mac OS Mojave с подключенной внешней клавиатурой.
jdhao
106

Я в настоящее время на Lion 10.7.4, и по какой-то странной причине редактирование ~/Library/KeyBindings/DefaultKeyBinding.dictне работает для меня.

Я обнаружил, что аддон KeyRemap4MacBook System Preferences (который теперь называется Karabiner ) работает очень хорошо, и вы также можете переназначить различные ключи с ним, не редактируя текстовые файлы. Например, переключая страницы вверх / вниз страницы, курсор также следует за страницей вверх / вниз.

Просто скачайте дополнение и на панели «Системные настройки» перейдите к For PC Usersразделу и проверьте Use PC Style Home /End.

Заметьте, я выбрал (Change Home to Command+Left)вместо (Change Home to Control+A), как если бы я выбрал первую, и если строка была перенесена, home перенесет меня в начало перенесенной строки, на несколько строк выше, вместо того, чтобы перенести меня в начало текущей строки.

KeyRemap4MacBook

jklp
источник
9
Карабинер великолепен и также с открытым исходным кодом
Джедиджа
2
В 10.10.5 другие предложения, похоже, не работают, но Karabiner (новое имя для KeyRemap4MacBook - работает на всех продуктах Mac) работает хорошо и не требует перезапуска, чтобы изменения вступили в силу. Очень полезно для этого Mac Noob; Надеюсь, что другие могут извлечь выгоду.
Ральф Дж
1
На сегодняшний день «Карабинер не работает на macOS Sierra в данный момент».
james.garriss
2
@ james.garriss Дайте возможность Karabiner-Elements - тот же автор, хотя и переписанный с нуля для поддержки Sierra (он все еще находится в разработке, поэтому у них немало
острых
5
@jklp К сожалению, функциональность, необходимая для переназначения клавиш Home и End на расширенной клавиатуре Apple, еще не доступна в Karabiner Elements. Мне лично кажется, что у меня достаточно мышечной памяти для Ctrl-a, Ctrl-e при работе в консоли, но при работе в приложении с графическим интерфейсом, таком как Sublime, это очень сложно запомнить. Для Sublime (в частности) есть решение, однако: coderwall.com/p/upolqw/…
Ville
43

Благодаря этой статье , я понял, как повторно связать Homeи Endключи к линии действия , основанному на основе каждого пользователя , который работает по всей раскладке клавиатуры.

Вам необходимо создать файл словаря с кодами клавиш и новыми командами для сопоставления, но сначала убедитесь, что папка, в которую он будет помещен, существует, открыв терминал и выполнив:

$ mkdir -p ~/Library/KeyBindings

Затем создайте или отредактируйте файл в ~/Library/KeyBindings/DefaultKeyBinding.dict. Если его не было раньше, добавьте весь раздел ниже. Если он существует, просто добавьте четыре новые строки внутри блока.

{
    "\UF729"  = "moveToBeginningOfLine:";
    "\UF72B"  = "moveToEndOfLine:";
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:";
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";
}

Чтобы активировать настройки, вам необходимо выйти из системы и снова войти в систему.

Обратите внимание, что это охватывает как обычное действие перемещения курсора, так и комбинацию Shift+ Home/ Endдля выбора во время перемещения курсора.

Калеб
источник
12

Я использую OS X Sierra, и ~/Library/KeyBindings/DefaultKeyBinding.dictрешение, предложенное другими пользователями, частично сработало: некоторые приложения, такие как TextEdit, теперь имеют желаемое поведение, а другие - нет. Google Chrome и Slack - два, которые, кажется, не уважают DefaultKeyBinding.dictфайл.

Чтобы исправить оставшиеся приложения, я использовал BetterTouchTool для создания привязки сочетаний клавиш для конкретного приложения, Homeа также Endдля собственных сочетаний клавиш OS X Ctrl+Aи Ctrl+E. BetterTouchTool не является бесплатным, но есть 45-дневный пробный период.

Сделать это:

  1. Установить и запустить BetterTouchTool
  2. Перейдите на вкладку Жесты> Клавиатура
  3. В разделе «Выберите приложение» нажмите +и выберите приложение, которое хотите исправить.
  4. Нажмите «Добавить новый ярлык», назначьте Homeключ в поле «ярлык записи» и установите для «Сочетание других сочетаний клавиш» Ctrl + A. Повторите для Endи Ctrl + E.
  5. Когда вы закончите, панель должна выглядеть так:Панель BetterTouchTool
  6. Под Расширенными настройками BetterTouchTool разрешите ему запускаться при запуске.

Примечание: не закрывайте приложение BetterTouchTool, иначе оно перестанет перехватывать нажатия клавиш. Просто закройте его окно, и оно должно продолжать работать в фоновом режиме.

mamacdon
источник
Спасибо - только что использовал это на El Capitan, поскольку я уже заплатил за BetterTouchTool, и он отлично работает с Chrome, Slack и другими приложениями.
RichVel
9

Я использую удивительный KeyRemap4MacBook с пользовательскими настройками ниже.

Он исправляет Home / End в большинстве приложений и не портит iTerm2.

С https://gist.github.com/lhotari/6134223181439b9ed0a1

<?xml version="1.0"?>
<!-- ~/Library/Application Support/KeyRemap4MacBook/private.xml -->
<!-- Custom keyboard mappings for MBP using https://pqrs.org/macosx/keyremap4macbook/ -->
<root>
    <item>
        <name>Lari's PC Style Home/End</name>
        <appendix>(Change Home to Command+Left)</appendix>
        <appendix>(Change End to Command+Right)</appendix>
        <appendix></appendix>
        <appendix>{{ PC_STYLE_BINDINGS_IGNORE_APPS_DESCRIPTION }}</appendix>
        <identifier>lari.remap.pclikehomeend</identifier>
        <block>
            <only>DREAMWEAVER</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME, ModifierFlag::SHIFT_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::END,  ModifierFlag::SHIFT_L</autogen>
        </block>
        <block>
            <only>BLUEFISH,WORD,EXCEL,POWERPOINT</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::END</autogen>
        </block>
        <!--
        <block>
            <only>EMACS, TERMINAL, X11, ECLIPSE</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::A, ModifierFlag::CONTROL_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::E, ModifierFlag::CONTROL_L</autogen>
        </block>
         -->
        <block>
            <not>{{ PC_STYLE_BINDINGS_IGNORE_APPS }}</not>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_UP,    ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_UP,    ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_DOWN,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_DOWN,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME,             KeyCode::CURSOR_LEFT,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,              KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L</autogen>
        </block>
    </item>
</root>
Лари хотари
источник
Не обновлялся для работы с Sierra, по ссылке выше.
james.garriss
Этот инструмент был переименован в Karabiner и, очевидно, работает с OS X El Capitan 10.11, Sierra 10.12 и High Sierra 10.13.
RichVel
7

Я нашел следующее полезное для iterm2и zshс цитатами отсюда :

Open iTerm > Preference. Перейти к profiles tab > Keys. Затем нажмите +кнопку в нижней части списка клавиш, нажмите Home(или Fn+left arrowна беспроводной клавиатуре Apple), Actionвыберите «Выбрать» Send Escape Sequenceи введите[1~

Повторите для Endключа с [~4для последовательности клавиш escape.

Если вы используете zsh, также сделайте это:

1) Поместите следующее в ваш ~/.zshrcфайл

bindkey "^[[1~" beginning-of-line
bindkey "^[[4~" end-of-line

2) Запустите source ~/.zshrcв любых открытых терминалах.

RationalDev
источник
iTerm2 также имеет предустановку отображения клавиш «Естественное редактирование текста», включающую это поведение.
Мэтт М.
Необходимо изменить на bindkey "^[[~4" end-of-line. Обратите внимание на положение 4.
Ты.
@ Спасибо, но ты можешь объяснить почему? Первоначальный источник, а также github.com/reenhanced/zsh-config/blob/master/lib/… и github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/… use "^ [[4 ~ "
RationalDev
Я не очень хорошо разбираюсь в этих escape-последовательностях, но для меня ^[[4~выводит эхом, 4пока ^[[~4перемещает курсор в конец строки.
Ты.
@ Интересно. Я сделал некоторые поиски, чтобы выяснить, почему, но я смог найти только примеры ^[[4~. Какую клавиатуру и кодировку символов вы используете, может быть, это имеет значение?
RationalDev
6

Imho лучший инструмент для внесения изменений в клавиатуру - это действительно Karabiner (старое название KeyRemap4MacBook). Открытый исходный код ( https://github.com/tekezo/Karabiner ), но также доступен в виде приложения ( https://pqrs.org/osx/karabiner/index.html.en ). Я долго искал и никогда не нашел ничего лучшего.

HaFr1954
источник
5

Я сделал это с помощью элементов Karabiner .

Вам необходимо обновить раздел правил ~/.config/karabiner/karabiner.jsonс массивом JSON с кодом ниже. При этом клавиши home и end преобразуются так, чтобы они работали так же, как на ПК / Windows.

{
  "rules": [
    {
      "description": "change home key to command + left_arrow",
      "manipulators": [
        {
          "from": {
            "key_code": "home"
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                "left_command"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change home key to command + left_arrow while presing shift (selection)",
      "manipulators": [
        {
          "from": {
            "key_code": "home",
            "modifiers": {
              "mandatory": [
                "left_shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                "left_command",
                "left_shift"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change end key to command + right_arrow",
      "manipulators": [
        {
          "from": {
            "key_code": "end"
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                "left_command"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change end key to command + right_arrow while presing shift (selection)",
      "manipulators": [
        {
          "from": {
            "key_code": "end",
            "modifiers": {
              "mandatory": [
                "left_shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                "left_command",
                "left_shift"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    }
  ]
}

смотри также: github gist

введите описание изображения здесь

Джейсон Уотерс
источник
1

@ Ответ Лри потрясающий ( большое спасибо; это сводило меня с ума ), но в итоге я немного его изменил.

(В этом ответе я использую не-appley имена для ключей, поэтому command = super и option = alt.)

Супер-левый и супер-правый используется для отображения moveToLeftEndOfLineи moveToRightEndOfLine. Использование moveToBeginningOfLineand moveToEndOfLine, как и @Lri, может привести к противоречивому поведению.

Есть целый ряд других различий между ярлыками appley и буквально ярлыками всех остальных, которые я добавил. Например, ctrl-left и ctrl-right должны перемещаться между словами; не alt-left и alt-right. Я не думаю, что это исчерпывающе, но сейчас это работает довольно хорошо для меня. Я предположил, что пользователь уже поменял местами клавиши управления и супер-клавиши, чтобы исправить вырезание, копирование и вставку.

~/Library/KeyBindings/DefaultKeyBinding.dict:
{
    "\UF729"   = moveToLeftEndOfLine:; // home
    "\UF72B"   = moveToRightEndOfLine:; // end
    "$\UF729"  = moveToBeginningOfLineAndModifySelection:; // shift-home
    "$\UF72B"  = moveToEndOfLineAndModifySelection:; // shift-end

    "@\UF700"  = moveUp:;  //super-up
    "@\UF701"  = moveDown:;  //super-down
    "@\UF702"  = moveWordLeft:;  //super-left
    "@\UF703"  = moveWordRight:;  //super-right

    "@$\UF700" = moveUpAndModifySelection:;  // super-shift-up
    "@$\UF701" = moveDownAndModifySelection:;  // super-shift-down
    "@$\UF702" = moveWordLeftAndModifySelection:;  // super-shift-left
    "@$\UF703" = moveWordRightAndModifySelection:;  // super-shift-right

    "@\UF728"  = deleteWordForward:;  // super-delete
    "@\U7F"    = deleteWordBackward:;  // super-backspace
}
Эрик Тоомбс
источник
-3

Вы также можете переназначать клавиши клавиатуры, а также настраивать мышь и трекпад различными способами, используя бесплатный BetterTouchTool, доступный по адресу http://blog.boastr.net/ . Отличное решение для настройки работы ваших устройств ввода!

Гари Кокер
источник
2
Не могли бы вы расширить свой ответ инструкциями о том, как использовать указанное программное обеспечение для решения исходной проблемы?
grg
Не свободен ни в «свободном пиве», ни в «свободе». 45-дневная пробная версия, закрытое, платное программное обеспечение.
Wyatt8740