As chaves inicial e final podem ser mapeadas ao usar o Terminal?


76

As teclas homee endno MacBook Pro podem ser emuladas com fn + seta para a esquerda ou fn + seta para a direita. Ou quando certas configurações são alteradas, com a tecla Command (Apple) em vez de fn.

Nenhuma dessas obras no Terminal.

Como frequentemente preciso ir para o início ou o fim da linha e também gostaria de pular para frente ou para trás por palavra.

Como posso pular uma linha no Terminal?

Respostas:


64

Use control+ apara HOME e control+ epara END no Terminal.

Use também esc+ fpara ir para o início da próxima palavra e esc+ bpara ir para o início da palavra atual . (Você deve ter cuidado com o atual e o próximo)


2
perfeito! que tal pular por palavra? (ctrl-esquerda e ctrl-direita no Windows)
at01

@ at01 Atualizei minha resposta.
Am1rr3zA

40
Quem projetou as chaves do Terminal?!?!
at01

4
Eu prefiro usar a opção + seta para a esquerda e a opção + seta para a direita para mover-se para início das palavras
Allan Jikamu

2
Ctrl + a e Ctrl + e funcionaram para mim, mas sem recorrer ao mapeamento de pressionamentos de teclas, como proposto por muitos aqui, prefiro a alternativa do @ AlphaFighter de Shift + Home e Shift + End (Shift + Fn + seta à esquerda e Shift + Fn + seta para a direita no teclado do MacBook Pro) para o início e o fim da linha.
John Rix

70

Para responder sobre como obter o início ou o fim da linha, parece que, por padrão, o Terminal mapeia essas chaves:

  • shift + home → início da linha, equivalente à tecla "home" nos terminais normais
  • shift + end → fim da linha, equivalente à tecla "end" nos terminais normais

Se você deseja que a casa e o final trabalhem da maneira "normal" (e não exija mudança), vá para [Menu Terminal] → Preferências → guia Perfis (ou configurações em algumas versões do OS X) → subguia Teclado.

Em seguida, modifique / adicione essas chaves para que seja o seguinte "enviar string para shell"

  • casa: \033[H
  • fim: \033[F

Você pode obter a \033peça pressionando a tecla Escape na entrada da caixa de diálogo de edição, se precisar adicioná-la.

Então o lar e o fim voltarão a funcionar normalmente (ufa).

Observe também que "alt + ←" e "alt + →" por padrão no terminal mapeiam a palavra esquerda e a palavra direita, outra combinação útil a ser lembrada.

Nas versões posteriores do Mac OS X, se a tela do terminal mudar para cima ou para baixo quando você pressionar a tecla Home / End, talvez seja necessário definir a tecla Home \033[1~e a tecla End \033[4~para obter os resultados desejados (nenhuma mudança é necessária) .

Sinta-se à vontade para modificar esta resposta para adicionar combinações de teclas mais úteis, pois é um wiki da comunidade.


5
\ 033 [H e \ 033 [F para casa e fim não funcionaram para mim; no entanto, \ 001 e \ 005 fizeram. Você pode inserir esses códigos na caixa de diálogo de edição pressionando ctrl-A e ctrl-E. Estou usando o zsh, não tenho certeza se isso faz alguma diferença.
JW.

shift + home / end fez o trabalho
isaias-b

11
Tentando descobrir isso por um tempo, isso me salvou!
Paul Gray

Isso funciona muito bem quando você está no aplicativo de terminal real localmente. No entanto, quando você é transferido para uma máquina macOS, eles parecem não funcionar mais. Como contornar isso ?!
Ahi Tuna

2
O @AhiTuna SSH é apenas uma conexão com uma sessão de terminal, não uma conexão com um emulador de terminal. As opções de entrada são sempre definidas por qualquer emulador de terminal que você estiver usando.
Bachsau 11/06

39

Parece que você está procurando alguma ajuda para usar o readline e o bash. Aqui está uma lista insana de itens de teclado modificados em: http://www.math.utah.edu/docs/info/features_7.html#SEC45

Ctrla Mover para o início da linha.
Ctrle Mover para o final da linha.
Escf Avançar uma palavra.
Escb Retroceder uma palavra.
Ctrll Limpe a tela, reimprimindo a linha atual na parte superior.

Ctrlk Coloque o texto da posição atual do cursor até o final da linha.
Escd Mate do cursor até o final da palavra atual ou, se estiver entre as palavras, até o final da próxima palavra.
EscDel Mate do cursor o início da palavra anterior, ou se entre palavras, até o início da palavra anterior.
Ctrlw Mate do cursor para o espaço em branco anterior. Isso é diferente EscDelCtrla porque os limites das palavras diferem.

Ctrld Exclua o caractere abaixo do cursor.
Ctrl_ Desfazer a última coisa que você fez. Você pode desfazer todo o caminho de volta para uma linha vazia.

E, aqui está como puxar o texto de volta para a linha. Arrancar significa copiar o texto morto mais recentemente do buffer de interrupção.

Ctrly Coloque o texto morto mais recentemente de volta no buffer no cursor.
Escy Gire o anel de abate e puxe o novo topo. Você só pode fazer isso se o comando anterior for Ctrlyou Escy.


isso é inestimável - obrigado - eu gostaria que isso estivesse disponível como um arquivo imprimível em algum lugar!
Matt b

Eu percebo que não é "otimizado", mas; Arquivo -> Imprimir?
Jason SALAZ

Uau, estes são super estranhos em comparação com o termo no linux .. alguma maneira de remapear esse absurdo?
Btk

Sim, tente a página de manual do Bash. (Eu não sei como fazê-lo eu mesmo.)
Silverwolf

6

Para aqueles que preferem usar as setas, pressionar fnShift+ Left Arrowo levará para casa na linha de comando. Da mesma forma, fnShift+ Right Arrowo levará até o fim.


6

Você pode mover uma palavra de cada vez com option+ lefte option+ right.

Quanto ao uso de homee end, as ligações padrão do Terminal são as seguintes:

  • shift+ home→ pula para o início da linha
  • shift+ end→ pula para o final da linha
  • home → role para o topo do buffer de rolagem para trás
  • end → role para a parte inferior do buffer de rolagem para trás

Em muitos outros aplicativos de terminal (em várias plataformas), os pares modificados e não modificados são revertidos (ou seja, nus homee endsão usados ​​para pular a linha atual e as versões modificadas (por uma shiftou outra coisa)) são usadas para navegar no buffer de rolagem ) Você pode reverter as ligações do Terminal para funcionar dessa maneira, se desejar, fazendo o seguinte:

Vá para o menu Terminal → Preferências → guia Configurações / Perfil → subguia Teclado.

Em seguida, modifique os pares de chave-ação para serem os seguintes:

  • ↖︎: Enviar texto: \ 033 [H
  • Próximo: Scroll To Top
  • ↘︎: Enviar texto: \ 033 [F
  • Scroll: Role para baixo

Nota: \ 033 é inserido na caixa de texto a ser enviado na caixa de diálogo Editar pressionando a tecla Escape.

Enquanto estiver lá, você pode trocar as ligações de modificado e não modificado page upe page down, para manter as coisas consistentes: pressionar uma tecla de navegação com shiftrepresenta um comando para o próprio Terminal (para navegar no buffer de rolagem como um documento), enquanto pressiona um sem envia a chave-prima até tudo o que está sendo executado dentro dele (por exemplo bash, less, nano, screen, etc.). Os pares chave-ação para isso são:

  • ⇞: Enviar texto: \ 033 [5 ~
  • ⇧⇞: rolar para cima
  • ⇟: Enviar texto: \ 033 [6 ~
  • ⇧⇟: Rolar a página para baixo


4

O mapeamento homee as endteclas com a funcionalidade desejada resolverão facilmente o problema.

Muitas respostas foram postadas, mas no caso de você estar usando zsh, você pode definir homepara:

\001

e defina endpara:

\005

clicando em preferência - perfil - teclado.


Eu tentei isso também, mas, em seguida, ele quebra Início e Fim no vim :( Você pode mapeá-los para o que Alfredo Cardigliano sugeriu: Chave: ↖ Ação: \ 033OH chave: ↗ Ação: \ 033OF
curlingdude

Isso funcionou perfeitamente para mim! Eu só uso o Nano, então não há problemas aqui.
Sterling Bourne

Sim, isso está funcionando, mas não resolve o problema em geral. Eu mudei do bash para o zsh e fui usado FN-SHIFT-ESQUERDA / DIREITA .. isso resolveu meu problema: stackoverflow.com/questions/8638012/…
vlk

1

Essa é a maneira mais eficaz de fazê-lo funcionar também com o vim. Vá para Terminal -> Preferências -> Perfis -> Teclado e adicione:

Chave: ↖ Ação: \ 033OH

Chave: ↗ Ação: \ 033OF


1

Eu gostaria de fornecer uma solução alternativa para esse problema. Isso funciona muito bem se você é um usuário vi. As ligações de teclas do Vim no terminal fornecem uma maneira de usar o seu terminal no estilo vim. Você pode fazer isso digitando o set -o viterminal e sinta-se à vontade para colocá-lo, .bash_profilese quiser. Depois disso, seu terminal é efetivamente um editor de vim. Você pode usar a esctecla para entrar no modo de comando e andar de um modo vim. Por exemplo, 0leva você ao começo e $leva ao final. Você também pode usar Ie Apara ir para o início e o fim e entrar no modo de edição imediatamente. we bpermitir avançar e retroceder uma palavra. E se você tentar entrar no modo visual pressionandov, você receberá um editor de vim e o texto que você tiver ao sair deste editor será executado no terminal.

Esteja ciente de que essa ligação de chave do vim anulará todas as teclas de acesso rápido que você aprendeu de outras respostas.


0

aqui está a lista em formato imprimível, conforme desejado :)

http://pastebin.com/uCqwn7qs

Eu também corrigi um "bug" na descrição. Isto é o que você poderia ler originalmente nas instruções:

ESC-d Mate do cursor o início da palavra anterior, ou se entre as palavras, até o início da palavra anterior.

Isso cheira mal como um erro de recortar e colar, pois as duas frases parciais dizem a mesma coisa. Dizendo da lógica simples, a primeira metade deve realmente ler "do cursor até o início da palavra atual".


0

... Que tal pular por palavra? (Ctrl-esquerda e Ctrl-direita no Windows)

# in ~/.inputrc
"\033[5C": forward-word
"\033[5D": backward-word
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.