Altera a forma do cursor (ou cor) para indicar o modo vi no bash

29

Para esclarecer: Eu não estou perguntando como alterar o cursor ao usar o vim dentro de um terminal . Eu quero o cursor para mudar quando alternar entre o modo de entrada e comando no modo de vi do Bash:

set -o vi <CR> type some text <ESC> (the cursor changes shape/color)
i (cursor change back) etc... 

Eu encontrei um script que torna possível alterar a cor do cursor em alterações de modo em zsh , mas não quero alterar os shells apenas para esse recurso.

Existe uma maneira de fazer com que o cursor mude de forma, como em gvim, (ou mesmo apenas cor) ao alternar entre os modos de comando e inserção na linha de comando do Bash?

    
por joecan 13.10.2011 / 03:27

6 respostas

5

adicione estas duas linhas a ~ / .inputrc :

set vi-ins-mode-string \e[5 q
set vi-cmd-mode-string \e[2 q
    
por 07.12.2017 / 22:45
4

Copiado daqui - Edição de linha de comando do estilo vim

Deve estar disponível em bash 4.3 - consulte o changelog -

j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

bash 4.3 está atualmente no estágio rc , você deve conseguir pacotes para a maioria das distribuições sem compilar a partir do código-fonte, mas não nos repositórios principais. Por exemplo. Ubuntu (amd64) aqui e Debian (repositório experimental) aqui .

    
por 23.02.2014 / 19:57
2

Não encontrei uma solução real, mas talvez isso possa ajudar você (ou outra pessoa) a encontrar uma solução melhor.

Você precisa criar um script (por exemplo, kmtest.sh)

#!/bin/bash
# Script "kmtest.sh"

TEST='bind -v | awk '/keymap/ {print $NF}''
if [ "$TEST" = 'vi-insert' ]; then
   echo -ne "3]12;Green
export PS1="\u@\h \$(kmtest.sh)> "
7" else echo -ne "3]12;Red
#!/bin/bash
# Script "kmtest.sh"

TEST='bind -v | awk '/keymap/ {print $NF}''
if [ "$TEST" = 'vi-insert' ]; then
   echo -ne "3]12;Green
export PS1="\u@\h \$(kmtest.sh)> "
7" else echo -ne "3]12;Red%pre%7" fi
7" fi

e depois de adicioná-lo ao seu PS1, algo como:

%pre%

mas como eu disse, não é o que você quer, porque muda a cor do cursor somente depois de um cr. Boa sorte

gb

    
por 30.10.2011 / 23:09
1

Parece que pode haver uma maneira de fazer isso por meio de hacking readline. Talvez pudéssemos pressionar para que isso se generalizasse?

Aqui está minha resposta no link SO que atualizarei se obtiver mais informações.

    
por 30.08.2012 / 18:04
1

Embora não seja exatamente o que você quer (mudando dinamicamente o cursor), bash 4.4 / readline 7.0 adicionará suporte para alterar dinamicamente o prompt . Você poderá especificar indicadores de modo personalizados para os modos de inserção / comando (Isso é diferente da opção show-mode-in-prompt atual, que é codificada para usar + e : ).

Infelizmente, essas versões estão atualmente em versão beta e não parecem ter todos os bugs corrigidos ainda. Eles também estão perdendo a capacidade de especificar onde no prompt você deseja que o indicador de modo ocorra.

Nesse ínterim, publiquei versões corrigidas do bash 4.3 / readline 6.3 no github com essa funcionalidade.

    
por 26.10.2015 / 06:34
0

Eu fiz a mesma pergunta há algum tempo em AskUbuntu quando eu estava em transição do Gvim para o Console Vim.

Eu recebi uma resposta mas envolvia alternar as configurações do terminal do gnome, e essas configurações eram aplicadas nos terminais. Assim, era possível que o cursor do terminal gnome fosse preso no estado errado às vezes.

Ainda estou interessado em saber se você obtém uma solução satisfatória, mas, com o tempo, ajustei a falta de informações de estado do modo no cursor. Talvez eu apenas pressione escape com mais frequência (por exemplo, esc para garantir que estou no modo de comando; esc i para garantir que estou no modo de inserção); talvez eu olhe para o estado exibido na parte inferior da tela; talvez eu tenha acabado de internalizar o modo.

    
por 13.10.2011 / 09:34