Como mostrar o modo Vi atual ao usar as combinações de teclas Vi no shell?

15

Eu uso o vi keybindings no meu shell tcsh.

Agora, não sei em qual modo vi estou ( insert mode ou command mode), o que leva a muita frustração.

Alguém sabe de uma maneira de mostrar o modo vi atual no shell? (incluindo no prompt ou algo assim)

    
por sundar 05.08.2009 / 19:27

7 respostas

4

Eu não acredito que haja alguma maneira de determinar visualmente em qual modo você está, mas se você modificar um pouco seu comportamento, não importa.

Se você quiser estar no modo de comando, pressione ESC antes de digitar um comando.

Se você deseja estar no modo de inserção, pressione ESC ei antes de digitar o conteúdo.

Você vai acabar pressionando muito o ESC, mas todo usuário vi que eu conheço faz isso de qualquer maneira.

    
por 12.08.2009 / 01:20
3

Eu dei uma olhada na documentação, e eu tenho que dizer que não consegui encontrar nenhuma maneira de detectar e exibir o modo vi atual. Eu espero que você tenha uma agradável surpresa e alguém encontre uma solução, mas eu certamente não consigo ver uma maneira de fazer o que você pede.

Eu acho que há uma maneira de fazer isso, mas é um exagero enorme para um pequeno aborrecimento, e eu não acho que é isso que você tinha em mente quando você fez essa pergunta. Se isso for verdade, pare de ler agora e aproveite sua vida.

OTOH, se esta é realmente sua implicância, e isso está deixando você louco, e você realmente quer desesperadamente bater no problema, aqui está minha ideia de como fazer isso:

  1. Obtenha uma cópia da Programação avançada no ambiente UNIX® , de W. Richard Stevens.
  2. Leia os capítulos sobre Fluxos e o Terminal I / O.
  3. Faça o download do código-fonte no livro acima, que inclui um exemplo de fluxo que pode ser colocado em camadas um terminal.
  4. Implemente sua manipulação para a combinação de teclas Esc (ou ambas as teclas de mudança de modo) e indique-a por meio de uma campainha ou manipulação de plano de fundo da linha atual.
Em suma, o Unix implementa o terminal I / O como um fluxo de E / S full-duplex entre o driver do dispositivo e o processo do usuário, no qual os módulos podem ser inseridos. Ele é organizado como uma pilha, para que você possa colocar quantos fluxos desejar. A soma dos fluxos injetados cria seu comportamento de E / S terminal.

Quando um caractere é inserido, o primeiro módulo consegue inspecioná-lo e transmiti-lo (se quiser). Quando a resposta chega na direção oposta, ela recebe novamente a chance de inspecioná-la e transmiti-la. É assim que um Ctrl-C é manipulado em um nível mais alto para uma chave de caractere normal.

Você pode criar um binário implementando um módulo de fluxo, que, quando chamado, é executado silenciosamente no primeiro plano, inspecionando e transmitindo todas as teclas digitadas, realizando sua ação preferida nas teclas que lhe interessam. Para todos os efeitos, vai parecer que você está trabalhando no shell. Oooh Você pode invocar este binário na última (ou primeira, ou qualquer outra) linha do seu .tcshrc e nem saberia que está lá.

Há um bom manual de instruções aqui , mas não consegui encontrar muita coisa sobre este assunto, provavelmente porque já passou do seu auge.

    
por 11.08.2009 / 18:45
2

Esta página tem um script bastante detalhado que configura o que você quer (e mais) em zsh . Talvez ele possa ser adaptado para funcionar com o tcsh (não estou muito familiarizado com esse shell).

    
por 13.08.2009 / 03:27
0

Edição de linha de comando com tcsh

There are two main modes for editing the command line,
based on the two most commonly used text editors, Emacs and vi.

With the vi bindings, you must switch between insert and command modes;
different commands are useful in each mode.

vi mode has two submodes, insert and command mode.

  • Default mode is insert.
  • You can toggle between the modes by pressing Esc.
  • Alternatively, in command mode,
    typing 'a' (append) or 'i' (insert) will return you to insert mode
    .

Mais notas na tcsh personalização página já vinculada acima.

    
por 11.08.2009 / 14:58
0

Eu tive o mesmo problema exato e por acaso encontrei a solução. Embora este segmento seja antigo, não consegui encontrar nenhum outro site que oferecesse uma solução, por isso suponho que a postagem neste tópico esteja correta.

Basta redefinir as configurações do seu programa de terminal ou shell. No momento, estou usando o PuTTY e acabei de excluir minhas configurações salvas da conexão salva e recriou uma sessão salva. Trabalhou como um encanto.

Espero que isso ajude!

    
por 15.02.2013 / 19:15
0

Por favor, veja minha resposta em SO . Bash 4.4 / Readline 7.0 irá adicionar suporte para esta funcionalidade, e nesse ínterim eu publiquei versões corrigidas do Bash 4.3 / Readline 6.3 para o github .

    
por 26.10.2015 / 06:38
0

Para qualquer pessoa com esse problema exato (como eu): encontrei uma solução em stackoverflow . Aparentemente, há suporte nativo para isso em readline, então você pode simplesmente adicionar o seguinte ao seu ~/.inputrc :

set show-mode-in-prompt on

E para personalizar o uso real do personagem:

set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"
    
por 20.03.2017 / 23:29