É possível configurar o modo vi do shell Z para que backspace possa excluir caracteresantesa posição onde a ação de inserção foi iniciada?
Basicamente, o comportamento do vim que pode ser alcançado adicionando a seguinte linha ao~/.vimrc
set backspace=start
– é possível ter isso no modo Z shell vi?
Responder1
Você pode adicionar isto à sua configuração zsh:
bindkey -M viins '^?' backward-delete-char
bindkey -M viins '^H' backward-delete-char
Explicação:
Modo Vié apenas um conjunto de mapas de teclado pré-configurados (viins,vítima,viopp,visual) que vinculam determinadas chaves a determinados widgets. Alguns desses widgets são projetados especificamente para se comportarem de maneira semelhante à forma como ovieditor faz.
No seu caso, este é o vi-backward-delete-char
widget que está vinculado por padrão Backspacenoviinsmodo, que possui o recurso específico de não excluir além da posição onde o modo de inserção foi inserido.
Muitas vezes existem versões ligeiramente diferentes desses widgets, que se comportam mais de acordo com oemacseditor. Neste caso seria o backward-delete-char
widget, que não está limitado à sessão de inserção atual. Embora seja por padrão vinculado emmodo emacs, não há restrições rígidas sobre qual widget pode ser usado e em qual modo. Você pode usar backward-delete-char
dentromodo visimplesmente religando Backspacepara chamar o widget backward-delete-char
.
A razão de haver duas ligações - ^?
e ^H
- é que depende do terminal, qual dessas duas sequências de teclas é enviada ao pressionar Backspace. Por padrão, ambos estão vinculados ao mesmo widget emmodo viassim comomodo emacs.