Remapeie “Início” e “Fim” para o início e o fim da linha


326

A maior parte do meu tempo de computação é gasta no Linux (com tempo ocasional no Windows). Nessas plataformas, as teclas Homee Endsaltam universalmente para o início ou o fim da linha atual.

Estou gradualmente me acostumando a usar o único computador Apple na minha vida, mas ainda é frustrante porque essas chaves parecem estar vinculadas ao início e ao final do documento e não parece haver nenhuma chave para a linha ações baseadas.

Minha pergunta:

  1. Faltam atalhos de teclado existentes para o início e o fim da linha? (Eu uso principalmente um Terminal, Chrome e LibreOffice)
  2. Existe uma maneira de religar as funções dessas teclas às funções que eu conheço? Estou disposto a desistir das versões baseadas em documentos que me parecem pouco úteis.

Também duas advertências:

  1. Eu não sou o único usuário no sistema. Seria bom se minhas configurações de usuário não quebrassem a experiência de outras pessoas. Se isso não for possível, acho que provavelmente tenho a preferência mais forte!
  2. Eu uso vários idiomas e alterno entre os layouts de teclado; portanto, espera-se que qualquer solução funcione mesmo ao alternar entre vários layouts de teclado.

1
Observe que, apesar de ter acabado encontrando uma solução e respondendo minha própria pergunta, estou aberto a soluções mais fáceis ou mais versáteis. Além disso, o processo de descobrir isso não é claro. Por exemplo, onde você encontra códigos de chave e nomes de ação se eu quiser remapear mais chaves? Sinta-se à vontade para adicionar respostas se você tiver conhecimentos relevantes!
Caleb

Respostas:


304

Os atalhos padrão para mover para o início ou o fim das linhas (quebradas) são e . e ou Ae Emova para o início ou fim de linhas (ou parágrafos) desembrulhados. e mova-se para trás / para frente por palavras, e tudo isso é compatível com a espera Shiftpara selecionar durante os movimentos correspondentes.

Você pode remapear a página inicial e final criando ~/Library/KeyBindings/e salvando uma lista de propriedades como esta DefaultKeyBinding.dict:

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

A maioria das combinações de teclas para editar texto no OS X está definida em /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict.

A aplicação de alterações requer a reabertura de aplicativos. DefaultKeyBinding.dict é ignorado por algumas versões antigas do Xcode (funciona com a versão mais recente 6.3.1), Terminal e muitos aplicativos de plataforma cruzada.

Consulte Cocoa Text System e meu site para obter mais informações sobre os atalhos de teclado personalizáveis.

As combinações de teclas do terminal podem ser personalizadas em Preferências> Configurações> Teclado. \033OHmove para o início de uma linha e \033OFpara o final de uma linha.

No Eclipse, as ligações de teclas devem ser modificadas em Preferências> Geral> Chaves. É necessário modificar as ligações padrão para os comandos Line Start e Line End (substitua ⌘ ← por ↖ e ⌘ → por ↘). Para que a seleção funcione, modifique também Selecionar início da linha e Selecionar final da linha .

PS: Pode ser necessário sair e fazer login novamente para que a ~/Library/KeyBindings/DefaultKeyBinding.dictalteração entre em vigor.


1
Informações úteis sobre os principais mapeamentos - usei-os com o BetterTouchTool (comercial), consulte esta resposta .
RichVel

3
Isso não funciona na maioria dos aplicativos na minha experiência. É melhor usar Karabina-Elements.
Timmmm 25/10

3
Isso é ótimo porque funciona no Terminal, iTerm2, Chrome, Sublime e Outlook. A alternativa (Karabina) é menos boa, porque mapeia "Home" para Command + LeftArrow, que realmente muda as janelas no Terminal. Você deve se lembrar de reiniciar todos os aplicativos depois de salvar o arquivo .dict.
Will Sheppard

1
Isso não funciona com o vim
MohitC

2
Essa configuração funciona para mim no Mac OS Mojave com o teclado externo conectado.
Jdhao # 14/18

106

Atualmente, estou no Lion 10.7.4 e, por algum motivo estranho, editar o ~/Library/KeyBindings/DefaultKeyBinding.dictnão funcionou para mim.

Descobri que o complemento Preferências do sistema KeyRemap4MacBook (que agora é chamado Karabiner ) funciona muito bem, e você também pode mapear novamente uma variedade de chaves com ele, sem precisar editar nenhum arquivo de texto. Por exemplo, alterando as teclas de página para cima / página para baixo, para que o cursor também siga na página para cima / para baixo.

Basta baixar o complemento e, no painel Preferências do Sistema, navegue até a For PC Usersseção e verifique Use PC Style Home /End.

Observe que eu escolhi em (Change Home to Command+Left)vez de (Change Home to Control+A), como se tivesse escolhido a primeira, e se a linha estivesse quebrada, a casa me levaria ao início da linha quebrada, várias linhas acima, em vez de me levar ao início da linha atual.

KeyRemap4MacBook


9
Mosquetão é grande e também de código aberto
Jedidja

2
Com a 10.10.5, as outras sugestões parecem não funcionar, mas o Karabiner (o novo nome do KeyRemap4MacBook - funciona em todos os produtos Mac) funciona bem e não precisa ser reiniciado para que as alterações tenham efeito. Imensamente útil para este Mac noob; espero que outros possam se beneficiar também.
Ralph J

1
A partir de hoje, "o Karabiner não funciona no macOS Sierra no momento".
James.garriss 19/05

2
@ james.garriss Experimente o Karabiner-Elements - mesmo autor reescrito do zero para dar suporte ao Sierra (ele ainda está em desenvolvimento, portanto, existem
jklp

5
@jklp Infelizmente, a funcionalidade necessária para remapear as teclas Home e End no teclado estendido da Apple ainda não está disponível no Karabiner Elements. Pessoalmente, parece que tenho memória muscular para Ctrl-a, Ctrl-e ao trabalhar no console, mas ao trabalhar em um aplicativo GUI como o Sublime, é super difícil de lembrar. Para o Sublime (especificamente), existe uma solução: coderwall.com/p/upolqw/…
Ville

43

Graças a este artigo , eu descobri como vincular novamente as teclas Homee Endàs ações baseadas em linha, por usuário, que funcionam nos layouts de teclado.

Você precisa criar um arquivo de dicionário com os códigos-chave e os novos comandos para mapear, mas primeiro verifique se a pasta onde isso será colocado existe, abrindo um Terminal e executando:

$ mkdir -p ~/Library/KeyBindings

Em seguida, crie ou edite o arquivo em ~/Library/KeyBindings/DefaultKeyBinding.dict. Se não existia antes, adicione a seção inteira abaixo. Se existir, basta adicionar as quatro novas linhas dentro do bloco.

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

Para ativar as configurações, você precisará sair do seu usuário e entrar novamente.

Observe que isso abrange a ação normal de mover o cursor e a combinação Shift+ Home/ Endpara selecionar durante o movimento do cursor.


12

Estou usando o OS X Sierra, e a ~/Library/KeyBindings/DefaultKeyBinding.dictsolução sugerida por outros usuários funcionou parcialmente: alguns aplicativos como o TextEdit agora têm o comportamento desejado, mas outros não. Google Chrome e Slack são dois que parecem não respeitar o DefaultKeyBinding.dictarquivo.

Para corrigir os aplicativos restantes, usei BetterTouchTool para criar atalhos de teclado específicos do aplicativo de ligação Homee Endde atalhos nativas OS X do Ctrl+Ae Ctrl+E. O BetterTouchTool não é gratuito, mas há um período de avaliação de 45 dias.

Para fazer isso:

  1. Instale e inicie o BetterTouchTool
  2. Vá para a guia Gestos> Teclado
  3. Em "Selecionar aplicativo", clique +e escolha o aplicativo que você deseja corrigir.
  4. Clique em "Adicionar novo atalho", atribua a Hometecla no campo "atalho de registro" e defina "Ativar outro atalho de teclado" como Ctrl + A. Repita para Ende Ctrl + E.
  5. Quando terminar, o painel deve ficar assim:Painel BetterTouchTool
  6. Em Configurações avançadas do BetterTouchTool, permita que ele seja executado na inicialização.

Nota: não saia do aplicativo BetterTouchTool ou ele interromperá a interceptação de teclas. Basta fechar a janela e ela deve continuar trabalhando em segundo plano.


Obrigado - usei isso no El Capitan, pois já paguei pelo BetterTouchTool e funciona bem com o Chrome, Slack e outros aplicativos.
RichVel

9

Estou usando o incrível KeyRemap4MacBook com as configurações personalizadas abaixo.

Ele corrige Home / End na maioria das aplicações e não estraga o iTerm2.

De 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>

Não foi atualizado para funcionar com o Sierra, de acordo com o link acima.
James.garriss 18/05

Essa ferramenta foi renomeada para Karabiner e aparentemente funciona com o OS X El Capitan 10.11, Sierra 10.12 e High Sierra 10.13.
RichVel

7

Eu achei o seguinte útil para iterm2e zshcom citações daqui :

Aberto iTerm > Preference. Vá para profiles tab > Keys. Em seguida, clique no +botão na parte inferior da lista de teclas, pressione Home(ou Fn+left arrowno teclado sem fio da apple), em Actionselecionar Send Escape Sequencee digite[1~

Repita para a Endtecla com [~4para a sequência de teclas de escape.

Se você estiver usando o zsh, faça também o seguinte:

1) Coloque o seguinte no seu ~/.zshrcarquivo

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

2) Funcione source ~/.zshrcem qualquer terminal aberto.


O iTerm2 também possui uma predefinição de mapeamento de teclas "Edição de texto natural" que inclui esse comportamento.
Matt M.

Precisa ser alterado para bindkey "^[[~4" end-of-line. Observe a posição do 4.
Ty.

@ Ty Obrigado, mas você pode explicar por quê? A fonte original, assim como github.com/reenhanced/zsh-config/blob/master/lib/… e github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/…, use "^ [[4 ~ "
RationalDev

Não sou muito versado nessas seqüências de escape, mas para mim ^[[4~ecoa 4enquanto ^[[~4move o cursor para o final da linha.
Ty.

@Ty Interessante. Eu fiz algumas pesquisas para descobrir o porquê, mas só consegui encontrar exemplos ^[[4~. Que tipo de teclado e codificação de caracteres você está usando, talvez isso faça a diferença?
RationalDev


5

Consegui isso usando o Karabiner Elements .

Você precisa atualizar a seção de regras ~/.config/karabiner/karabiner.jsoncom a matriz JSON a partir do código abaixo. Fazer isso remapeia as teclas home e end para funcionarem da maneira que funcionam no 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"
        }
      ]
    }
  ]
}

veja também: github gist

insira a descrição da imagem aqui


1

@ A resposta de Lri é incrível ( muito obrigado; isso estava me deixando louco ), mas acabei modificando um pouco.

(Nesta resposta, eu uso os nomes não aplicáveis ​​para as chaves, então command = super e option = alt.)

Super esquerda e super direita costumavam ser mapeadas para moveToLeftEndOfLinee moveToRightEndOfLine. Usar moveToBeginningOfLinee moveToEndOfLine, como o @Lri, pode causar um comportamento inconsistente.

Há várias outras diferenças entre os atalhos do appley e literalmente os atalhos de todos os outros que adicionei. Por exemplo, ctrl-esquerda e ctrl-direita devem se mover entre as palavras; não alt-esquerda e alt-direita. Não acho que isso seja exaustivo, mas está funcionando muito bem para mim agora. Presumi que o usuário já trocou o controle e as super teclas para corrigir o corte, a cópia e a colagem.

~/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

Você também pode remapear as teclas do teclado, bem como personalizar o mouse e o trackpad de todas as formas interessantes, com o BetterTouchTool gratuito, disponível em http://blog.boastr.net/ . Uma excelente solução para personalizar o funcionamento dos seus dispositivos de entrada!


2
Você poderia expandir sua resposta com instruções sobre como usar o software especificado para resolver o problema original?
grg

Não é livre nos sentidos "Cerveja grátis" ou "Liberdade". Software de avaliação de 45 dias, de código fechado e pago.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.