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

30

Para esclarecer: não estou perguntando como alterar o cursor ao usar o vim dentro de um terminal . Quero que o cursor mude ao alternar entre os modos de entrada e comando no modo vi do Bash:

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

Encontrei um script que possibilita a alteração da cor do cursor no modo zsh , mas não quero alterar shells apenas para esse recurso.

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

joecan
fonte
A mesma pergunta no SO para Putty, sem resposta tho :( - stackoverflow.com/questions/2393383/…
studgeek

Respostas:

5

adicione estas duas linhas ao ~ / .inputrc :

set vi-ins-mode-string \1\e[5 q\2
set vi-cmd-mode-string \1\e[2 q\2
calças sagradas
fonte
4
Essa resposta seria muito mais útil se você explicar o que eles fazem e fornecer algum contexto, por exemplo, as configurações exigem que o usuário tenha uma versão específica do Readline.
Anthony G - justice para Monica
:) aqui está a entrada manual: gnu.org/software/bash/manual/html_node/…
holytrousers
11
Isso funcionará apenas em terminais e emuladores de terminal que entendem DECSCUSR.
JdeBP
Eu tive que adicionar set show-mode-in-prompt onem ~/.inputrctambém para fazer este trabalho.
ronakg 29/07
4

Copiado daqui - estilo de vim de edição de linha de comando

Deve estar disponível em bash4.3 - veja 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.

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

Graeme
fonte
Observe que: o prompt não será atualizado se você usar um PS1 personalizado que contenha um caractere de nova linha. encontrado aqui
pgericson
@pgericson Parece funcionar com um PS1 personalizado contendo uma nova linha para mim no bash 4.4.12.
DuBistKomisch
2

Não encontrei uma solução real, mas talvez isso possa ajudar você (ou outra pessoa) a encontrar uma 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 "\033]12;Green\007"
else
   echo -ne "\033]12;Red\007"
fi

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

export PS1="\u@\h \$(kmtest.sh)> "

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

gb

gogolb
fonte
Isso realmente funcionou para você? Não funcionou para mim; apenas deixou o cursor vermelho. Não acho que o kmtest.sh seja executado toda vez que alterno entre os modos de inserção e comando. Parece que só seria executado na criação do prompt.
11449 JoJoan
1

Parece que pode haver uma maneira de fazê-lo através da linha de leitura de hackers. Talvez pudéssemos pressionar para que ele se integrasse?

Aqui está minha resposta no SO https://stackoverflow.com/a/12201092/255961, que atualizarei se receber mais informações.

studgeek
fonte
1

Embora não seja exatamente o que você deseja (alterando dinamicamente o cursor), o bash 4.4 / readline 7.0 adicionará suporte para alterar dinamicamente o prompt . Você poderá especificar indicadores de modo personalizado para os modos de inserção / comando (isso é diferente da show-mode-in-promptopção atual codificada permanentemente para uso +e :).

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

Enquanto isso, publiquei versões corrigidas do bash 4.3 / readline 6.3 no github com essa funcionalidade.

Dylan Cali
fonte
0

Eu fiz a mesma pergunta há algum tempo no AskUbuntu quando estava passando do Gvim para o Console Vim.

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

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

Jeromy Anglim
fonte
3
Só para esclarecer, sua pergunta não é a mesma que a minha. Você perguntou como alterar o cursor no Vim no console. Isso está bem documentado no wiki do Vim . Quero saber como fazer isso no modo vi do Bash .
joecan