edição de linha de comando bash (atalhos do Emacs)

2

Ao escrever um comando na linha de comando bash, eu posso usar CTRL + w para deletar uma palavra para trás, ou ALT + d para deletar a palavra para frente.

O problema é que esses dois atalhos não são exatamente complementares: CTRL + w exclui tudo até um espaço, enquanto ALT + d exclui apenas até qualquer não caractere alfabético (ou seja, pára em / )

Existe um atalho que atua como ALT + d , mas ao contrário?

Para que, quando eu estiver no final de /etc/hostname e pressionar o atalho, acabe com /etc/ .

    
por Martin Vegter 08.03.2014 / 20:53

1 resposta

6

bind -p fornece as ligações atuais. Você verá que Ctrl + W está vinculado a unix-word-rubout e Alt + D a kill-word :

"\C-w": unix-word-rubout
"\ed": kill-word

Se você fizer um bind -p | grep kill-word , você encontrará:

"\e\C-h": backward-kill-word
"\e\C-?": backward-kill-word

Alguns terminais enviam ^H em Backspace e outros ^? , e é por isso que existem duas ligações. Isso faz com que Alt + Backspace seja o que mata uma palavra pelo menos nos terminais onde Alt + X envia o caractere ESC seguido por X . / p>

Existem alguns terminais que enviam X com o 8º bit definido (0xD8) em cima de Alt + X (embora eles estejam se tornando cada vez mais raros, já que isso não faz muito sentido novo mundo UTF-8). Nesses, você terá que pressionar Esc e depois Backspace , ou você pode definir convert-meta para on na configuração readline (por exemplo, com bind 'set convert-meta on' ), mas você não poderá inserir caracteres não ascii.

    
por 08.03.2014 / 21:47