Bash CTRL para mover o cursor entre palavras / strings

86

Estou acostumado a usar a CTRLtecla para me mover mais rápido quando uso as setas esquerda e direita (vai para o final de uma palavra, em vez de um caractere por vez).

Posso fazer isso no bash de alguma forma?

Eu provavelmente poderia codificá-lo, mas gostaria de saber se há algo mais fácil / já feito.

Bryan Ruiz
fonte

Respostas:

95

Com os atalhos de teclado padrão readline, ALT+ Bvolta uma palavra, ALT+ Favança uma palavra.

A configuração padrão do Ubuntu fornece adicionalmente CTRL+ setas como você está acostumado. Eles estão em /etc/inputrce são especificados da seguinte forma:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\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

Não sei por que precisamos de três deles ...

Thomas
fonte
20
@bryan_ruiz: Teclados diferentes (emuladores de terminal, etc.) geram sequências diferentes. Para ver a sequência, pressione Ctrl-v e a tecla. Para mim no PuTTY, Ctrl-v Ctrl-RightArrow fornece ^[OCo mesmo que o seu. Em xtermI get ^[[1;5que é o mesmo que Thomas.
Dennis Williamson
7
seria melhor editar em ~/.inputrcvez disso
svassr
1
Eu não posso acreditar quanto tempo vivi sem isso.
Ryan Shillington
4
Editar ~ / .inputrc pode interromper o carregamento do 'sistema' (/ etc / inputrc). Observe também que as configurações de 'set -o' - "set -o emacs" devem fornecer ligações de teclas no estilo emacs na linha de comando, ao contrário de, por exemplo, "set -o vi" (depois de fazer isso você precisará pressionar ESC antes de tentar usar w ou b).
David Goodwin
5
@DavidGoodwin Depois de um pouco de pesquisa, a adição $include /etc/inputrctambém carregará o arquivo inputrc do sistema.
SirGuy
42

Como Thomas explicou, você pode adicionar as ligações a /etc/inputrc.

Outra alternativa para que carregue sempre que você fizer login é colocá-los ~/.bashrc assim:

#use ctl keys to move forward and back in words
bind '"\eOC":forward-word'
bind '"\eOD":backward-word'

Aprendi que você pode usar cat > /dev/null para ver os caracteres que seu teclado está enviando, por exemplo, CTRL + seta para a direita mostra:

^[OC

onde ^[é o mesmo, \e então é daí que vem o código no bindcomando.

Você também pode procurar ligações como esta:

bind -p | grep forward-word

Tudo isso é muito incrível e estou feliz por descobrir mais um pouco do poder do bash.

Bryan Ruiz
fonte
6
Acho que isso afetará apenas o bash, enquanto a inputrcsolução também se aplicará a outros programas que usam readline, por exemplo, o interpretador Python, a maioria dos outros shells. Observe que você também pode colocar os comandos ~/.inputrcse não tiver root ou não quiser que eles se apliquem a todos os usuários.
Thomas
Por alguma razão, isso só funcionou para mim quando troquei a ordem de suas linhas acima. Nota adicional. Estou usando o Ubuntu 14.04LTS atrás do putty do Windows 8.1.
Rebecca Dessonville
2
+1 especialmente para I learned that you can use cat > /dev/null to look at the characters that your keyboard is sending. #TIL
Sungam
3
Você também pode simplesmente digitar reade pressionar Enter para obter o mesmo efeito que cat > /dev/null. Sou preguiçoso, então gosto de soluções com menos digitação. :)
theglossy1 de
ctrl + 4 trava meu gato (envia ^ /)
user1040495
4

Um .inputrc em seu diretório inicial fará com que ctrl + left pare de funcionar no Ubuntu (por exemplo).

Para fazer tudo funcionar, adicione o seguinte a ~ / .inputrc:

# Include system-wide inputrc, which is ignored by default when
# a user has their own .inputrc file.
$include /etc/inputrc

crédito para f.kowal

Constantin De La Roche
fonte
1

Adicionar $include /etc/inputrc

dentro ~/.inputrc

Funcionou para CentOS Linux versão 8.2.2004 (Core)

pablohe
fonte