Mover-se por palavra delimitada por espaço em branco em bash / readline

3

Na edição de linha de bash (ou em qualquer programa que use readline GNU), Meta-f se move para a direita por uma "palavra" e Meta-b para a esquerda por uma "palavra", onde uma "palavra" é composto de letras e dígitos. Estes são os comandos forward-word e backward-word . (Meta-f pode ser a tecla modificadora Alt ou uma tecla Escape prefixada.)

Por exemplo, se eu digitei

cat /etc/motd

em seguida, digitar repetidamente Meta-b move o cursor para m , depois o e e, em seguida, o c .

Existe um comando que se move de forma semelhante, mas por palavras delimitadas por espaços em branco, então /etc/motd é uma única palavra?

(Eu costumo trabalhar com caminhos de arquivo muito longos e gostaria de ser capaz de ignorá-los facilmente. Minha solução alternativa é digitar os comandos de mover palavras existentes repetidamente ou digitar ^ X ^ E para iniciar um editor.)

No vim, w e b avançam e recuam por palavras, e W e B movem-se por palavras delimitadas por espaços em branco. Eu estou procurando por algo similar.

Eu examinei a documentação de readline e suspeito que a resposta seja não, mas talvez eu tenha perdido alguma coisa.

    
por Keith Thompson 07.10.2017 / 04:21

2 respostas

2

Você pode adicionar isto:

set keymap vi-move
"\e[EMACS~": emacs-editing-mode
set keymap emacs
"\e[VI~": vi-movement-mode
"\ed": "\e[VI~dW\e[EMACS~"
"\ef": vi-fWord
"\eb": vi-bWord

Para o seu inputrc ou use zsh onde é mais facilmente personalizável. Veja esta resposta a outro Q & A para detalhes .

    
por 07.10.2017 / 08:33
1

Se você usar set -o vi readline aceita os comandos vim style e, em seguida, w / W e b / B terão o mesmo comportamento palavra / WORD que no editor vim . Eu uso rotineiramente W / B para pular caminhos completos, urls, etc. ao editar a linha de comando. Eu vejo da saída de bind -l que existe um par vim-forward-word/vim-forward-bigword e o equivalente atrasado.

Olhando para a página man do Bash, também vejo shell-forward-word e shell-backward-word . Estas são "palavras" delimitadas por "metacaracteres de shell", que são caracteres "que, quando palavras não citadas, separadas"

Não posso dizer que tenho muita experiência usando bind diretamente, mas eu apenas tentei bind '"\C-x": shell-backward-word' e agora Ctrl + x no modo de edição faz retrocede mais do que caracteres alfanuméricos ... até o próximo espaço em branco para ser específico.

    
por 07.10.2017 / 06:24

Tags