O shell vi mode imprime (arg: repetição): Como removê-lo?

2

Sempre que você estiver no modo de comando do VI no shell e pressionar um número, como 8, "(arg: 8)" será exibido no início da linha. Alguém sabe como fazer isso não? O movimento da linha que estou digitando distrai.

Em vez de:

(arg: 8) somecmd --itslong --reallylong

Isto:

somecmd --itslong --reallylong
    
por Justin Thomas 15.04.2014 / 22:24

3 respostas

3

Quando você está no modo de comando em vi (o editor real ou o modo de Bash), pressionar os dígitos insere um argumento (daí "arg") que é normalmente usado para definir o número de repetições para executar o seguinte comando. Para evitar isso, você deve estar no modo de entrada (pressionando i por exemplo) antes de pressionar os dígitos.

Demonstração:

Se você não estiver no modo vi, poderá inseri-lo usando:

set -o vi

(Você pode sair do modo vi inserindo o modo emacs: set -o emacs )

Agora, no modo de entrada vi, digite um comando como este:

echo abcdefghijk4

Você perceberá que você recebe um dígito "4" no final, como mostrado acima.

Agora pressione Esc . O cursor moverá um caractere para a esquerda e você estará no modo de comando.

Pressione um dígito, digamos "3". Agora você verá isso:

(arg: 3) echo abcdefghijk4

Agora pressione X. Você verá:

echo abcdefgh4

Três caracteres ("ijk") foram excluídos porque você disse ao Readline (editor de entrada de linha de comando do Bash) para "eliminar" 3 caracteres.

Agora pressione i e qualquer dígito. O dígito foi inserido na linha de comando no ponto em que o cursor estava.

    
por 16.04.2014 / 03:59
1

O código incorreto está em: lib/readline/misc.c

A remoção das linhas 109 e 241 removerá a mensagem.

    
por 16.04.2014 / 22:05
-1

Você pode religar as teclas numéricas do modo vi para que elas não acionem a arg: N de repetição.

Tente inserir o seguinte no seu ~/.bashrc (ou você pode testá-lo em um terminal ativo primeiro):

bind -m vi 3:self-insert

Em seguida, tente acessar Escape e digitar 3 . Você deve obter o número 3 impresso. No entanto, isso provavelmente não é um bom comportamento, pois você provavelmente não deseja que o número seja impresso quando não estiver no modo de inserção. Para desativar completamente as teclas numéricas quando não estiver no modo de inserção, faça o seguinte para todos os números:

bind -m vi N:

(para N = {0..9}).

No seu ~/.bashrc , você pode adicionar:

for N in {0..9};
do
    bind -m vi $N:
done
    
por 17.04.2014 / 00:39

Tags