Bash: posso definir Ctrl-Backspace para excluir a palavra para trás?

13

When in shell (bash) - Eu quero que o Ctrl-Backspace seja vinculado a "delete word backward". É possível?

Editar :

Estou usando konsole - terminal no KDE.

    
por Adobe 17.03.2012 / 18:13

8 respostas

7

Por que não usar apenas Alt + Backspace ou Ctrl + W que já estão mapeados na maioria dos terminais. Não tenho certeza sobre o Console. Xmodmap (man xmodmap) pode ser usado para remapear outras chaves personalizadas também. (Paradoxalmente, o xmodmap não pode remapear muito bem o Backspace porque o terminal substitui os mapeamentos, mas funciona bem com a maioria das chaves ...).

    
por 17.03.2012 / 19:32
9

Eu encontrei esta discussão via google, mas a resposta não foi o que eu queria ouvir. Então eu brinquei:

No meu terminal, o backspace normal envia ^H , enquanto o ctrl + backspace envia ^? . Portanto, deve ser um caso simples de religar ^? para excluir uma palavra, que por padrão está disponível por meio de Ctrl + W.

Primeiro (tentativa malsucedida):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

Portanto, isso deve funcionar:

$ bind '"\C-?":unix-word-rubout'

No entanto, não ... alguém capaz de explicar?

Segunda tentativa (com êxito):

$ bind '"\C-?":"^W"'

Em que ^W é um literal / raw ^W (pressione ctrl + V e ctrl + W para exibi-lo).

    
por 09.11.2014 / 07:50
4

Basta editar seu ~/.inputrc (talvez seja necessário criar um ou copiar o em /etc/inputrc ) para que ele contenha:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

Isto irá mapear também Ctrl + Apagar para apagar a palavra ao lado do cursor.

    
por 03.05.2016 / 16:23
4

Há algumas boas respostas aqui, mas resolvi no Konsole com Configurações- > Editar perfil atual- > Teclado- > Editar, adicionando um mapeamento de Backspace+Control a \x17 . (Eu encontrei o código ASCII para Ctrl-w usando showkey --ascii .)

    
por 30.10.2015 / 17:33
3

Isso depende do que o bash vê. Na interação terminal regular, o bash não vê quais modificadores de tecla você pressionou, apenas o caractere resultante. Backspace já é o mesmo que o controle-H, por exemplo. Manter o deslocamento ou o controle não faz diferença.

No entanto, o aplicativo do terminal (xterm? cmd? Terminal? Putty? depende do seu sistema operacional) pode ver seus pressionamentos de tecla e pode mapear a combinação de teclas de controle de retrocesso para algo que o bash pode distinguir do backspace. / p>     
por 17.03.2012 / 18:18
1

Tente isto:

bind '"\C-_":backward-kill-word'

Opcionalmente, adicione o seguinte a ~ / .inputrc para torná-lo permanente:

"\C-_": backward-kill-word

Funciona no bash 4.3.11 no Kubuntu 14.04

    
por 20.12.2015 / 15:13
0

Na maioria dos terminais, o CTRL + W já deve excluir uma palavra para trás. Isso funciona com o xterm e acho que funciona com o konsole. CTRL + W é uma ligação de chave padrão no programa baseado em texto que funcionará com o vim no modo de inserção, emacs e todos os shells.

    
por 17.03.2012 / 19:25
0

No Konsole:

  • clique em Settings -> Edit current profile
  • clique na guia "Teclado" - > [Edit...]
  • clique no botão [Add] e na coluna Key Combination digite Backspace+Ctrl . Na coluna Output , digite 0x08 (que é convencionalmente o caractere de retrocesso)

Agora você deve poder mapear essa chave para backward-kill-word via

# ~/.bashrc

bind '"\x08":backward-kill-word'
    
por 06.02.2018 / 11:11

Tags