Ative alt / ctrl + esquerda / direita na linha de comando do CentOS

7

Meu hoster foi recentemente atualizado para um novo CentOS e eu tenho 'customizado' e agora estou perdendo alguma coisa.

No meu Ubuntu Server, eu posso forward-word e backward-word com ALT + DIREITA / ESQUERDA . Eu não fiz nada por isso. Eu também posso ALT + BACKSPACE para apagar uma palavra.

No meu novo CentOS eu posso fazer o ALT + BACKSPACE , mas não consigo obter o ALT + DIREITO / ESQUERDO funcionando! ALT + B / F funciona, mas isso não é aceitável, porque só funciona para a esquerda ALT e meus dedos não são tão magros. (right ALT + B / F apenas imprime "b" ou "f")

Eu tentei copiar uma parte do / etc / inputrc para o CentOS, mas isso não faz nada.

ALT ou CTRL , eu não ligo, mas eu realmente preciso de um atalho. O último CentOS não tinha, mas desde o Ubuntu eu estava perdendo no CentOS.

Meu CentOS /etc/inputrc :

"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

Meu Ubuntu /etc/inputrc :

"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Eu nem sei o que todos eles significam !? O que é [1;5C para a chave ??

    
por Rudie 05.01.2013 / 00:29

3 respostas

8

Graças à sua pergunta, finalmente fiz algumas leituras e aumentei meu entendimento, vivas!

Portanto, uma boa fonte de informação é man readline . As combinações de teclas especificadas nos vários arquivos inputrc controlam o funcionamento da biblioteca readline BASH. De acordo com a manline readline, você pode usar nomes de chaves simbólicas ou seqüências de escape:

   Key Bindings
       The syntax for controlling key bindings in the inputrc file is
       simple.  All that is required is the name of  the  command  or
       the  text  of a macro and a key sequence to which it should be
       bound. The name may be specified in one of two ways: as a sym‐
       bolic  key  name, possibly with Meta- or Control- prefixes, or
       as a key sequence.  The name and key sequence are separated by
       a  colon.  There can be no whitespace between the name and the
       colon.

       When using the form keyname:function-name or macro, keyname is
       the name of a key spelled out in English.  For example:

              Control-u: universal-argument
              Meta-Rubout: backward-kill-word
              Control-o: "> output"

A página man também afirma que o arquivo de configuração padrão é ~/.inputrc , então eu recomendo colocar suas ligações lá.

Se você quiser usar as teclas de letras normais (por exemplo Controle - g ), Control-g: forward-word funciona bem. As teclas de seta são mais difíceis. Eu tentei, e falhei, para encontrar a chave nome para as teclas de seta. Nenhum dos que eu tentei ( left-arrow , left , :left ) funcionou então parece que estamos presos às seqüências de escape.

Infelizmente, a seqüência de escape exata é diferente entre os emuladores de terminal (é por isso que o seu inputrc do Ubuntu tem várias linhas). Para descobrir qual sequência de escape seu terminal favorito usa, execute read e, em seguida, digite a seqüência de teclas em que você está interessado. Em terminator , xterm e gnome-terminal , Control - Esquerda , dê:

$ read
^[[1;5D

em aterm :

$ read
^[Od    <-- that is a capital O not a zero (0).

Experimentando um pouco, descobri que ^[[D é Esquerda e ^[[1;5D é Controle - Esquerda . O primeiro ^[ é a chave Esc , usada aqui, suponho, para denotar uma seqüência de escape .

Em qualquer caso, para ligar Control - Esquerda para forward-word de uma forma que funcione para todos, adicionei estas linhas ao meu ~/inputrc :

"\e[1;5D": backward-word
"\eOd": backward-word

Por razões que eu não entendi completamente, Controle é representado por \e , o qual deve ser Esc .

Meu arquivo ~/.inputrc final que funciona para todos os terminais listados acima é:

"\e[1;5D": backward-word
"\eOd": backward-word
"\e[1;5C": forward-word
"\eOc": forward-word
    
por 05.01.2013 / 15:23
1

Como fazer isso em Iterm2 para que funcione quando você se conectar a qualquer host.

Nota: Eu só escrevo isso porque, outra pergunta ( link ) tem ligado a esta questão como uma duplicata, mas esta questão não responde como fazer isso em Iterm2, por isso não é realmente uma duplicata.

Se você está no OS X e usando o Iterm2 você pode mapear Alt / Ctrl + → (seta para a direita) e Alt / Ctrl + para os comandos padrão de linha de leitura Meta + F e Meta + B . No exemplo abaixo, é assumido que a chave de escape é meta. Para fazer isso, abra Iterm2.

  1. Clique em: Menu - > Preferências ...
  2. Clique na guia "Perfis".
  3. Clique no seu perfil ou no padrão.
  4. Clique na subguia "Chaves".
  5. Clique no sinal de adição "+" ao lado de "Carregar predefinição ..."
  6. Digite seu atalho de teclado no primeiro campo (por exemplo, Ctrl + )
  7. Escolha “Enviar texto”, “Enviar hex” (mais detalhes sobre envio de Hex em “Como ligar uma sequência de teclas à tecla de controle” abaixo) ou “Enviar sequência de escape”. Neste caso, estamos usando "Send Escape Sequence".
  8. No último campo, escolha os caracteres que a linha de leitura pode interpretar.
  9. ^[ é a sequência readline para escape. Esta entrada mapeia Opt + para Esc + F (pode ser Alt + F em outros terminais)

Comomapearatalhosparasequênciasquenãosãodeescape(Ctrl,Alt,Cmd,etc.)

  1. Façaodownloadde"códigos-chave" na loja de aplicativos. Instale-o e abra-o.
  2. Enquanto estiver em uma janela de códigos-chave aberta, aperte a tecla Ctrl + [alguma chave] , neste caso eu usarei Ctrl + W para apagar uma palavra anterior na linha de leitura.
  3. Anote o campo "Unicode".
  4. Agora, mapeie sua sequência de teclas usando iterm, preferences- > Keys- > + (a seqüência fornecida acima).
  5. Insira o campo "Atalho de teclado", como nesta situação Opt + Backspace .
  6. Altere "Ação" para "Enviar código hexadecimal".
  7. Insira no último campo o hex anotar anteriormente; nesse caso, 23 / 0x17 .
  8. Clique em "OK" e o atalho deverá estar operacional na janela do terminal e funcionar em qualquer sistema em que a linha de leitura esteja disponível.
por 14.04.2016 / 23:24
0

Obrigado pela pergunta. Teve esse problema com o PuTTY no CentOS 7 e resolveu adicionando isso dentro do $if mode=emacs condicional:

# for PuTTY
"\e\e[C": forward-word
"\e\e[D": backward-word

Ativou a configuração com Ctrl + X e < kbd> Ctrl + R

    
por 23.05.2017 / 01:53

Tags