Conseguindo <ctrl> + <backspace> para excluir palavras no modo gnome-terminal e vim insert

10

Parece que ctrl+ Wexclui para trás uma palavra de cada vez. Isso é ótimo, mas eu realmente gostaria que isso funcionasse com ctrl+ backspacecomo a maioria dos outros aplicativos.

Qual é a melhor forma de fazer isso? Eu precisaria da alteração para afetar os comandos do gnome-terminal, a linha de comando vim e a GUI vim.

Costa
fonte
11
No vim, você pode pressionar D e B e fará a mesma coisa. No entanto, eu também sinto falta desse recurso no terminal, porque você precisa escutá-lo e ele não funciona ao operar no modo Inserir. Dica impressionante para CTRL + W.
mchid

Respostas:

7

Observe que isso funcionará no terminal e no modo emacs padrão (que você está usando se Ctrl+ Wexcluir a palavra anterior para você). Ele não funcionará no modo vi do bash e não afetará o vi / vim. Portanto, essa é apenas uma resposta parcial, mas a melhor opção para esse usuário do emacs.


Esse tipo de coisa é gerenciada pela readlinebiblioteca cujo comportamento pode ser controlado via ~/.inputrc. Edite (ou crie, se não existir) ~/.inputrce adicione esta linha:

"\C-H":"\C-W"

Agora, abra um novo terminal e ele deve funcionar.

Explicação

O \C-Hé realmente Control+ BackSpace. Você pode ver os códigos de teclas pressionando Ctrl+ Ve a tecla que você procura. Você verá que BackSpaceretorna ^H.

Agora, deve ser possível vincular Control+ BackSpaceà função bash que exclui a palavra anterior ( backward-kill-wordou unix-word-rubout) usando "\C-H": backward-kill-word. No entanto, não consigo fazer isso funcionar. Funciona perfeitamente bem com teclas diferentes ( "\C-E": backward-kill-wordpor exemplo, faz Ctrl+ Eexcluir a palavra anterior), mas por algum motivo, não consigo fazê-lo funcionar BackSpace.

Portanto, como solução alternativa, basta mapear Ctrl+ Backspacepara Ctrl+ Wque já está mapeado backward-kill-word. Portanto, quando você pressiona Ctrl+ Backspace, isso será traduzido para Ctrl+ Wque, por sua vez, será enviado backward-kill-word. Eu tive a idéia para esta solução alternativa neste post da SU .

Terdon
fonte
4

Até muito recentemente, o gnome-terminal emitia o mesmo código em + Backspacee , portanto, você não pode distinguir os dois em seu aplicativo.CtrlBackspace

Isso foi corrigido no vte-0.42, que faz parte do Gnome 3.18 lançado neste outono.

Se você estiver usando o Wily, poderá encontrar pacotes atualizados no Gnome3 Staging .

Egmont
fonte
posso fazer isso funcionar com confiança sem adicionar esse PPA enorme?
Ciprian Tomoiagă
Não sem fazer o download, aplicar patches, compilar e instalar o pacote libvte 2.90 que corresponde ao confiável. O patch está em bugzilla.gnome.org/show_bug.cgi?id=733246 .
Egmont
3

Use Alt+ Backspace: funciona como Ctrl+ Backspacee não requer nenhuma configuração.

Marco Lackovic
fonte
1

Funciona na minha máquina. Apenas certifique-se de usar o tmux do master e o nvim do linuxbrew e o control + backspace também funciona no bash e no vim!

(Obtenha o bash do linuxbrew também)

Fábio Santos
fonte