“홈”과“끝”을 줄의 시작과 끝으로 다시 매핑


326

내 컴퓨팅 시간의 대부분은 Linux에서 사용됩니다 (Windows에서는 가끔 시간이 소요됨). 이러한 플랫폼에서 HomeEnd키는 현재 줄의 시작 또는 끝으로 보편적으로 이동합니다.

내 인생에서 한 대의 Apple 컴퓨터를 사용하는 데 점차 익숙해 지지만이 키가 문서의 시작과 끝 부분에 묶여있는 것보다 여전히 실망 스럽습니다. 기반 행동.

내 질문:

  1. 줄의 시작과 끝에서 누락 된 기존 키 바인딩이 있습니까? (주로 터미널, Chrome 및 LibreOffice를 사용합니다)
  2. 이 키의 기능을 내가 알고있는 기능에 리 바인드하는 방법이 있습니까? 나는 거의 쓸모가없는 문서 기반 버전을 기꺼이 포기할 것입니다.

또한 두 가지주의 사항 :

  1. 나는 시스템의 유일한 사용자가 아닙니다. 내 사용자 설정이 다른 사람들의 경험을 방해하지 않으면 좋을 것입니다. 이것이 가능하지 않다면 아마도 내가 가장 선호하는 것 같습니다!
  2. 여러 언어를 사용하고 키보드 레이아웃간에 전환하므로 여러 키보드 레이아웃간에 전환 할 때도 모든 솔루션이 작동 할 것으로 예상됩니다.

1
나는 해결책을 찾고 내 자신의 질문에 대답하는 동안 더 쉽고 다재다능한 해결책을 열었습니다. 또한 이것을 발견하는 과정은 명확하지 않습니다. 예를 들어 더 많은 키를 다시 매핑하려면 키 코드와 작업 이름을 어디에서 찾을 수 있습니까? 관련 지식이 있으면 언제든지 답변을 추가하십시오!
Caleb

답변:


304

줄 바꿈 시작 또는 끝으로 이동하기위한 기본 바로 가기는 입니다. 또는 AE언 래핑 된 라인 (또는 단락)의 시작 또는 끝으로 이동한다. 그리고 단어 앞으로 / 뒤로 이동, 그리고이 모든 지주와 호환되는 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에서 키 바인딩은 환경 설정> 일반> 키에서 수정해야합니다. 줄 시작줄 끝 명령에 대한 기본 바인딩을 수정해야합니다 (를 ⌘ ←로 ​​바꾸고 ⌘ →를 ↘로 바꾸십시오). 선택이 작동하려면 라인 시작 선택라인 끝 선택을 수정 하십시오 .

PS : 당신이해야 할 수 있습니다 로그 아웃하고 다시 로그인 에 대한 ~/Library/KeyBindings/DefaultKeyBinding.dict사항을 적용하려면 변경.


1
키 매핑에 대한 유용한 정보-(상업용) BetterTouchTool과 함께 사용했습니다 . 이 답변을 참조하십시오 .
RichVel

3
내 경험에 따르면 대부분의 응용 프로그램에서는 작동하지 않습니다. Karabina-Elements를 사용하는 것이 좋습니다.
Timmmm

3
이것은 터미널, iTerm2, Chrome, Sublime 및 Outlook에서 작동하기 때문에 좋습니다. 대안 (Karabina)은 "Home"을 Command + LeftArrow에 매핑하므로 실제로 터미널에서 창을 전환하기 때문에 성능이 떨어집니다. .dict 파일을 저장 한 후 모든 앱을 다시 시작해야합니다.
윌 셰퍼드

1
이것은 vim과 작동하지 않습니다
MohitC

2
이 설정은 외부 키보드가 연결된 Mac OS Mojave에서 작동합니다.
jdhao

106

저는 현재 Lion 10.7.4를 사용하고 있으며 이상한 이유로 편집이 효과 ~/Library/KeyBindings/DefaultKeyBinding.dict가 없었습니다.

KeyRemap4MacBook 시스템 환경 설정 애드온 (현재 Karabiner )이 실제로 잘 작동 한다는 것을 알았으며 텍스트 파일을 편집하지 않고도 다양한 키를 다시 매핑 할 수 있습니다. 예를 들어, 페이지 위로 / 페이지 아래로 키를 변경하면 커서가 페이지 위로 / 아래로도 이어집니다.

애드온을 다운로드하고 시스템 환경 설정 패널에서 해당 For PC Users섹션을 찾아 확인하십시오 Use PC Style Home /End.

참고로, 나는 첫 번째를 선택한 것처럼을 (Change Home to Command+Left)대신 (Change Home to Control+A)선택했습니다. 줄이 줄 바꿈되면 홈은 현재 줄의 시작 부분으로 이동하는 대신 줄 바꿈 된 줄의 시작 부분으로 이동합니다.

KeyRemap4MacBook


9
Karabiner는 훌륭하고 오픈 소스입니다.
Jedidja

2
10.10.5에서는 다른 제안이 작동하지 않는 것 같지만 Karabiner (KeyRemap4MacBook의 새로운 이름-모든 Mac 제품에서 작동)는 잘 작동하며 변경 사항을 적용하기 위해 재시동 할 필요가 없습니다. 이 Mac 멍청한 놈에게 큰 도움이됩니다. 다른 사람들도 혜택을 볼 수 있기를 바랍니다.
Ralph J

1
현재 "Karabiner는 현재 macOS Sierra에서 작동하지 않습니다."
james.garriss

2
@ james.garriss는 Karabiner-요소 갈 줄 - 같은 저자 시에라을 지원하기 위해 처음부터 다시 작성하지만 (그들은 꽤 거친 가장자리이야 있도록 개발에 아직) - github.com/tekezo/Karabiner-Elements을
jklp

5
@jklp 불행하게도 Karabiner Elements에서는 Apple 확장 키보드에서 Home 및 End 키를 다시 매핑하는 데 필요한 기능을 아직 사용할 수 없습니다. 나는 개인적으로 콘솔에서 작업 할 때 Ctrl-a, Ctrl-e에 대한 근육 기억을 가지고있는 것처럼 보이지만 Sublime과 같은 GUI 응용 프로그램에서 작업 할 때 기억하기가 매우 어렵습니다. Sublime (특히) 솔루션은 다음과 같습니다. coderwall.com/p/upolqw/…
Ville

43

이 기사 덕분에 키보드 레이아웃에서 작동하는 사용자별로 HomeEnd키를 라인 기반 동작에 리 바인드하는 방법을 알아 냈습니다 .

키 코드와 매핑 할 새 명령을 사용하여 사전 파일을 만들어야하지만 먼저 터미널을 열고 실행하여이 폴더를 배치 할 폴더가 있는지 확인하십시오.

$ 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와 같은 일부 응용 프로그램에는 원하는 동작이 있지만 다른 응용 프로그램은 그렇지 않습니다. Chrome과 Slack은 DefaultKeyBinding.dict파일 을 존중하지 않는 것 같습니다 .

나머지 응용 프로그램 문제를 해결하려면, 내가 사용 BetterTouchTool가 바인딩 응용 프로그램 별 키보드 단축키를 생성 Home하고 EndOS X의 기본 바로 가기에 Ctrl+ACtrl+E. BetterTouchTool은 무료가 아니지만 45 일의 평가 기간이 있습니다.

이것을하기 위해:

  1. BetterTouchTool 설치 및 시작
  2. 제스처> 키보드 탭으로 이동
  3. "응용 프로그램 선택"에서을 클릭 +하고 수정하려는 앱을 선택하십시오.
  4. "새 바로 가기 추가"를 클릭 Home하고 "레코드 바로 가기"필드에 키를 지정한 다음 "다른 키보드 바로 가기 트리거"를 Ctrl + A로 설정하십시오. End와 Ctrl + E를 반복하십시오 .
  5. 완료되면 패널은 다음과 같아야합니다.BetterTouchTool 패널
  6. BetterTouchTool의 고급 설정에서 시작시 실행되도록 허용하십시오.

참고 : BetterTouchTool 앱을 종료하지 마십시오. 그렇지 않으면 키 누름 차단이 중지됩니다. 창을 닫으면 백그라운드에서 계속 작업해야합니다.


고마워-BetterTouchTool에 대해 이미 지불 했으므로 El Capitan에서 이것을 사용했으며 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. 그런 다음 +키 목록 맨 아래 에있는 버튼을 클릭 하고을 누른 다음 select 아래 에서 Home또는 Fn+left arrowApple 무선 키보드를 누릅니다.ActionSend Escape Sequence[1~

이스케이프 키 시퀀스에 대해 End키를 반복하십시오 [~4.

zsh를 사용하는 경우 다음을 수행하십시오.

1) ~/.zshrc파일에 다음을 배치하십시오.

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

2) source ~/.zshrc열린 터미널에서 실행하십시오 .


iTerm2에는이 동작을 포함하는 "자연 텍스트 편집"키 매핑 사전 설정도 있습니다.
Matt M. 17 년

로 변경해야 bindkey "^[[~4" end-of-line합니다. 4.
Ty

@ 감사합니다,하지만 왜 설명 할 수 있습니까? 원본 소스와 github.com/reenhanced/zsh-config/blob/master/lib/…github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/… 는 "^ [[4 ~ "
RationalDev

나는이 이스케이프 시퀀스에 정통하지는 않지만 커서를 줄의 끝으로 옮기는 동안 나에게 ^[[4~반향을 일으킨다 . 4^[[~4
타이.

@Ty 흥미 롭습니다. 이유를 찾기 위해 몇 가지 검색을 수행했지만의 예만 찾을 수있었습니다 ^[[4~. 어떤 종류의 키보드 및 문자 인코딩을 사용하고 있습니까?
RationalDev


5

나는 Karabiner Elements를 사용하여 이것을 달성했다 .

~/.config/karabiner/karabiner.json아래 코드에서 JSON 배열로 규칙 섹션을 업데이트해야 합니다. 이렇게하면 홈 / 종료 키가 다시 매핑되어 PC / 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

@Lri의 답변은 훌륭합니다 ( 너무 감사합니다. 이것은 나를 미치게했습니다 ).

(이 답변에서는 키에 애플이 아닌 이름을 사용하므로 command = super 및 option = alt.)

슈퍼 왼쪽 및 사용 슈퍼 오른쪽 실제로 매핑 할 수 moveToLeftEndOfLinemoveToRightEndOfLine. @Lri moveToBeginningOfLinemoveToEndOfLine같이 and를 사용하면 동작이 일관되지 않을 수 있습니다.

애플 바로 가기와 문자 그대로 내가 추가 한 다른 모든 바로 가기에는 다른 많은 차이점이 있습니다. 예를 들어, ctrl-left와 ctrl-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

http://blog.boastr.net/ 에서 무료로 제공되는 BetterTouchTool을 사용하여 키보드 키를 다시 매핑하고 모든 종류의 멋진 방법으로 마우스와 트랙 패드를 사용자 지정할 수 있습니다 . 입력 장치의 작동을 사용자 정의하기위한 탁월한 솔루션!


2
지정된 소프트웨어를 사용하여 원래 문제를 해결하는 방법대한 지침으로 답을 넓힐 수 있습니까?
grg

"무료 맥주"또는 "자유"의미에서 자유롭지 않습니다. 45 일 평가판, 폐쇄 소스, 유료 소프트웨어.
Wyatt8740
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.