Перезапустіть "Головна" та "Кінець" до початку та кінця рядка


324

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

Я поступово звикаю до використання одного комп’ютера Apple у своєму житті, але це все ще неприємно, ніж ці клавіші, здається, пов'язані з початком і кінцем документа, і, здається, не існує жодної клавіші для рядка засновані на дії.

Моє запитання:

  1. Чи є існуючі вкладиші клавіатури, які мені не вистачає для початку та кінця рядка? (Я в основному використовую термінал, Chrome і LibreOffice)
  2. Чи є спосіб відновити функції цих клавіш до знайомих мені функцій? Я готовий відмовитись від версій на основі документа, які мені не здаються корисними.

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

  1. Я не єдиний користувач у системі. Було б добре, якби мої налаштування користувача не порушили досвід інших людей. Якщо це неможливо, я думаю, що я, мабуть, маю найбільш сильну перевагу!
  2. Я використовую кілька мов і перемикаюся між розкладками клавіатури, тому, як очікується, будь-які рішення працюватимуть навіть при перемиканні між декількома розкладками клавіатури.

Зауважте, що поки я знайшов рішення та відповів на власне запитання, я відкритий для більш легких чи універсальних рішень. Також процес виявлення цього не зрозумілий. Наприклад, де ви знайдете коди ключів та назви дій, якщо я хотів перезавантажити ще кілька клавіш? Сміливо додайте відповіді, якщо маєте відповідні знання!
Калеб

Відповіді:


299

Ярликами за замовчуванням для переходу до початку або кінця (загорнутих) рядків є і . і чи 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), терміналом та багатьма кросплатформенними програмами.

Див. Текстову систему Какао та мій веб-сайт для отримання додаткової інформації про налаштовані клавіші.

Клавіатурні зв'язки терміналу можна налаштувати в розділі Налаштування> Налаштування> Клавіатура. \033OHрухається до початку рядка та \033OFдо кінця рядка.

У Eclipse ключові прив’язки слід змінювати в налаштуваннях> Загальні> Ключі. Потрібно змінити прив’язки за замовчуванням для команд Початок рядка та Кінець рядка (замінити ⌘ ← на ↖ та ⌘ → на ↘). Для того, щоб вибір працював, також змініть Select Start Start і Select End End .

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


1
Корисна інформація про ключові відображення - я використовував їх з (комерційним) BetterTouchTool, дивіться цю відповідь .
RichVel

3
На моєму досвіді це не працює в більшості програм. Краще використовувати Карабіна-Елементи.
Timmmm

3
Це чудово, оскільки він працює в Terminal, iTerm2, Chrome, Sublime & Outlook. Альтернатива (Карабіна) менш гарна, тому що відображає "Головна" на Command + LeftArrow, яка насправді перемикає вікна в Терміналі. Ви повинні пам’ятати, щоб перезапустити всі програми після збереження файлу .dict.
Буде Шеппард

1
Це не працює з vim
MohitC

2
Цей параметр працює для мене в Mac OS Mojave з підключеною зовнішньою клавіатурою.
jdhao

106

Зараз я перебуваю на Леві 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), ніби я вибрав перший, і якщо рядок був завернутий, додому перевезе мене до початку загорнутої лінії, на кілька рядків вище, замість того, щоб перевести мене до початку поточного рядка.

KeyRemap4MacBook


9
Карабінер є чудовим, а також відкритим кодом
Jedidja

2
З 10.10.5 інші пропозиції, схоже, не спрацьовують, але Karabiner (нова назва для KeyRemap4MacBook - працює на всіх продуктах Mac) працює добре, і не потрібно перезавантаження, щоб зміни вступили в силу. Надзвичайно корисна для цього Mac noob; сподіваємось, інші можуть також отримати користь.
Ральф J

1
На сьогоднішній день "Карабінер наразі не працює на macOS Sierra".
james.garriss

2
@ james.garriss Дайте Karabiner-Elements іти - той самий автор хоч і переписаний з нуля, щоб підтримати Сьєрру (вона все ще знаходиться в розробці, тому їх досить багато нерівних країв) - github.com/tekezo/Karabiner-Elements
jklp

5
@jklp На жаль, функція, необхідна для перекомпонування клавіш додому та кінця на розширеній клавіатурі Apple, ще не доступна в Karabiner Elements. Мені здається, що у мене є м'язова пам'ять для Ctrl-a, Ctrl-e під час роботи в консолі, але коли ви працюєте в додатку GUI, як Sublime, це важко запам'ятати. Однак для Sublime (конкретно) є рішення: coderwall.com/p/upolqw/…
Віль,

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для рідних ярликів Ctrl+Aі Ctrl+E. BetterTouchTool не є безкоштовним, але існує 45-денний пробний період.

Зробити це:

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

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


Дякую - я просто використав це на 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з цитатами тут :

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

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

Якщо ви використовуєте zsh, також зробіть це:

1) Помістіть у своєму ~/.zshrcфайлі наступне

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

2) Запустіть source ~/.zshrcбудь-які відкриті клеми.


iTerm2 також має попереднє налаштування відображення клавіш "Природне редагування тексту", яке включає таку поведінку.
Метт М.

Необхідно змінити bindkey "^[[~4" end-of-line. Зверніть увагу на положення 4.
Ty.

@ Дякую, але ви можете пояснити, чому? Первісне джерело, а також github.com/reenhanced/zsh-config/blob/master/lib/… та github.com/TentistMaster/zsh-config/blob/master/zshrc.d/… використовують "^ [[4 ~ "
RationalDev

Я не дуже добре розбираюся в цих керуючих послідовностей , але для мене ^[[4~вторить з 4поки ^[[~4переміщує курсор в кінець рядка.
Тай.

@Ty Цікаво. Я зробив кілька пошуків, щоб з'ясувати, чому, але мені вдалося знайти лише приклади ^[[4~. Які клавіатури та кодування символів ви використовуєте, можливо, це має значення?
RationalDev


5

Я здійснив це за допомогою елементів Карабінера .

Вам потрібно оновити розділ правил ~/.config/karabiner/karabiner.jsonу масіві JSON з коду нижче. Це переробляє домашні та кінцеві клавіші для роботи так, як вони працюють на ПК / 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

@ Відповідь Лрі приголомшлива ( велике спасибі; це мене зводило з розуму ), але я в кінцевому підсумку змінив її.

(У цій відповіді я використовую не-яблучні імена для клавіш, тому command = super та option = alt.)

Суперлівий і супер правий звик насправді відображатися на moveToLeftEndOfLineта moveToRightEndOfLine. Використання moveToBeginningOfLineта moveToEndOfLine, як це робить @Lri, може спричинити непослідовну поведінку.

Існує ціла купа інших відмінностей між яблучними ярликами та буквально усіма іншими ярликами, які я додав. Наприклад, ctrl-ліворуч і ctrl-right повинні рухатися між словами; не alt-ліворуч та 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
Чи можете ви розширити свою відповідь інструкціями, як використовувати вказане програмне забезпечення для вирішення початкової проблеми?
гр

Не вільний ні в «Вільному пиві», ні в «Свободі». 45-денний пробний період із закритим кодом, платне програмне забезпечення.
Wyatt8740
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.