Inserir um único caractere no Vim?

17

No Vim (7.2), existe um comando de modo normal r para substituir um único caractere por outro. Por exemplo, digitar rX substituirá o caractere sob o cursor por X e, em seguida, retornará ao modo normal.

Existe um comando de modo normal para inserir um único caractere e retornar ao modo normal?

    
por John Dibling 11.04.2013 / 20:40

3 respostas

6

MelBurslan está certo de que esse recurso não existe nativamente, mas a criação de um comando definido pelo usuário não é realmente o melhor caminho para criá-lo. Eu mexi por alguns minutos e descobri isso:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

Que usa alguns truques do Vim envolvendo "colocar" texto de um registrador, neste caso o registro "expressão". A expressão que está sendo conectada ao registrador é " nr2char(getchar()) ", que retornará uma única cadeia de caracteres.

A razão pela qual construí o mapeamento dessa maneira é que obter entrada do usuário "no meio do caminho" de um mapeamento é complicado e pode se comportar de maneira imprevisível; até mesmo este mapeamento deixará o cursor na área de status enquanto espera que o usuário digite um caractere.

    
por 12.04.2013 / 00:08
4

Tanto quanto sei, não existe tal função em qualquer encarnação amplamente distribuída do editor vi, mas o vim tem uma facilidade para criar comandos personalizados. Anteriormente foi discutido aqui: neste thread

Você pode criar seu comando personalizado fazendo o que deseja fazer.

    
por 11.04.2013 / 20:47
4

Obrigado ao Johnny por nos dar essa ótima resposta nos comentários abaixo:

":nmap <C-i> i_<Esc>r"

Isso mapeia Control + i para inserir um único caractere, e faz isso de forma muito concisa.

No seu arquivo vimrc, isso será parecido com:

nnoremap <C-i> i_<Esc>r

Alterei meu mapeamento para usar o espaço, e você pode alterar o seu para sua (s) chave (s) preferida (s):

nnoremap <Space> i_<Esc>r
    
por 11.09.2017 / 22:39

Tags