Como faço para ⌘ ← e ⌘ → trabalharem na combinação home / end do Terminal?


21

Por que fn- - (ou outros) faz um home / end no Terminal, mas a - funciona em qualquer outro lugar?

Então, só para esclarecer, a questão é como fazer o Terminal levar Command+ e para casa e fim?

Respostas:


21

Por mais conveniente que fosse, o Terminal não pode fornecer facilmente as funcionalidades solicitadas.

O motivo é que os programas executados dentro do Terminal possuem regras diferentes para mover o cursor para o início / fim da linha, por exemplo:

  • bash(e outras conchas) usam CtrlAeCtrlE
  • viusos 0e $/Shift4

Outros programas podem usar outras teclas. Não existe uma combinação de teclas universal para posicionar o cursor no início / final da linha.

Obviamente, o Terminal poderia manter uma lista de combinações de teclas para vários programas comuns, verificar o que está sendo executado e enviar as chaves corretas para você, ou fornecer um item de menu como Mover cursor para o início da linha dentro do shell ⌘ ← e enviar CtrlAPor trás das cenas. Mas acho que os engenheiros da Apple pensaram que, se você se aventurar no território da CLI, conhece suas idiossincrasias.

Como observação lateral, o Terminal fornece Optione Optionqual se comporta bashconforme o esperado e move o cursor para o início da palavra anterior / seguinte. Isso ocorre porque essas combinações de teclas são mapeadas para Escbe Escb(consulte a man bashseção "Comandos para mover" para obter mais informações). Por viexemplo, apenas o último (tipo de) funciona (no final desta resposta, mostrarei como configurar vipara trabalhar com Optione Option).

Mas, graças ao Automator, AppleScript e aliases do bash, você pode obter e trabalhar com bash(e possivelmente outros shells) e vi.

O primeiro passo é mapear e para CtrlAe CtrlE. Em uma segunda etapa, mostrarei como configurar vipara honrar CtrlAe CtrlE(que, como resultado, será vicompatível com e ).

Mapa e para CtrlAeCtrlE

  1. No Terminal, vá para Preferências ...> Configurações> [seu perfil ativo]> Teclado: insira a descrição da imagem aqui

  2. Pressione +, selecione "Cursor para a esquerda", "Control-Shift" como modificador e a ação "Enviar texto:". Em seguida, pressione CtrlA( \001aparecerá no campo de texto) e confirme com OK: insira a descrição da imagem aqui

    (Em uma versão anterior desta resposta, usei "Shift" como modificador. Percebi que essa configuração entra em conflito com shift, o que mostra a guia Terminal anterior, se você não soltar imediatamente. Usando "Control-Shift" corrige isso.)

  3. Agora adicione uma combinação de teclas para "Cursor Right", mas pressione CtrlE( \005aparecerá no campo de texto). Confirme com OK.

  4. Abra o Automator (por exemplo, pressione spacepara exibir o Spotlight e digite Automator ), selecione Arquivo> Novo e escolha Service:

    insira a descrição da imagem aqui

  5. Arraste Run AppleScriptpara o painel direito: insira a descrição da imagem aqui

  6. Digite o seguinte script:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 123 using {shift down, control down}
            end tell
        end tell
    end run

    e salve como Move Cursor to Beginning of Line:

    insira a descrição da imagem aqui

  7. Repita as etapas 4. a 6. com este script:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 124 using {shift down, control down}
            end tell
        end tell
    end run

    e salve como Move Cursor to End of Line:

    insira a descrição da imagem aqui

  8. É assim que o Terminal> Serviços se parece agora:

    insira a descrição da imagem aqui

Configure vipara honrar CtrlAeCtrlE

  1. Abra .bashrccom seu editor favorito e adicione esta linha:

    alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'

    Os dois primeiros mapcomandos dizem vimpara interpretar ControlEe ControlAcomo $e 0, que movem o cursor para o início ou o fim da linha, respectivamente.

    Os dois últimos mapcomandos dizem vimpara mover o cursor uma palavra por vez, como seria de esperar ao pressionar optione Option.

Ressalvas

Você notará que existe um pequeno atraso entre o momento em que você pressiona ou e o momento em que o cursor realmente se move.

Lembre-se de que ele só funcionará para programas que respeitem CtrlA/ CtrlE, portanto, você ainda pode querer aprender as combinações de teclas específicas de cada programa usado no Terminal.

(Testado no macOS Sierra 10.12.4)


3
Obrigado pela resposta detalhada, existe uma petição apenas para ter a Apple inclui um botão home / final na próxima reformulação :-)
Jackie

Estou feliz por poder ajudar.
jaume

Uau .. tudo isso para obter uma porcaria de atalho
levesque

Essa é uma boa resposta, mas poderia ser aprimorada excluindo todas as informações estranhas sobre a viqual é uma aplicação completamente diferente da do terminal.
axiopistia 5/05

1
Esse é um ótimo truque. Eu também conseguiu obter o AppleScript correndo enviando os códigos de tecla de "Início" e "Fim": "código de chave 115" e "código de chave 119""
Keymon

2

Claro que é possível.

Primeiro, você pode usar a ferramenta gratuita "DoubleCommand" se tiver um teclado do Windows com as teclas HOME / END para fazer com que eles se comportem como deveriam (início / fim da linha).

Em segundo lugar, para o terminal especificamente, vá para as preferências Teclado, edite o ícone / tecla que se parece com uma seta apontando para a esquerda, selecione "enviar texto" e digite ctrl + a. Feito!

O mesmo para o botão final.

Se você não possui um teclado para PC, pode fazer o mesmo com outras combinações de teclas.

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.