bash / readline para “avançar por palavra delimitada por espaços em branco?”

3

No bash / readline, se você quiser navegar por um comando, muitas vezes você tem coisas como:

cat /home/foo/bar.txt /home/bar/baz.txt

Se meu cursor estiver no final da linha (^ e), e eu quiser voltar ao início do segundo argumento, como faço para mover para o espaço em branco (próximo / anterior)?

Readline possui Meta-f (para frente) e Meta-b (para trás), mas eles param nas barras dos caminhos, e não se movem até o espaço em branco.

O vim tem W e B , o que fará isso, mas o modo de movimento do vim não está ativado em readline / bash por padrão.

    
por elliot42 05.02.2013 / 23:52

2 respostas

9

Você pode usar os comandos de movimento do vim em readline / bash, mesmo quando ainda estiver no modo de movimento do emacs. Os comandos relevantes da linha de leitura são vi-fWord e vi-bWord . Você pode vinculá-los a atalhos de teclado, como CTRL-f e CTRL-b , com o seguinte em .bash_profile :

bind '"\C-f":vi-fWord'
bind '"\C-b":vi-bWord'

Observe que a cotação dupla é significativa.

Você pode confirmar se as ligações estão funcionando executando bind -p

    
por 05.02.2013 / 23:52
3

Existem comandos Readline que permitem mover e tratar palavras como o shell os trata para dividir: shell-forward-word e shell-backward-word 1 .

Se você quiser vinculá-los a Ctrl + Meta + f e Ctrl + Meta + b para evitar sobrescrever as ligações existentes, você pode usar

bind '"\M-\C-f": shell-forward-word'
bind '"\M-\C-b": shell-backward-word'

na linha de comando ou adicione

"\M-\C-f": shell-forward-word
"\M-\C-b": shell-backward-word

para o arquivo inputrc relevante (geralmente ~/.inputrc ).

Dependendo da configuração de convert-meta , \M- precisa ser substituído por \e .

1 Introduzido no Bash 4.0.

    
por 07.01.2016 / 23:06

Tags