Inserir caractere único no Vim?

25

No Vim (7.2), existe um comando no modo normal rpara substituir um único caractere por outro. Por exemplo, a digitação rXsubstituirá o caractere sob o cursor Xe retornará ao modo normal.

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

John Dibling
fonte
1
Possível duplicada entre sites: stackoverflow.com/questions/1557893/…
Ciro Santilli
Consulte vim.wikia.com/wiki/Insert_a_single_character para obter uma solução abrangente.
Maxim Suslov

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 caminho a ser feito. Eu consertei por alguns minutos e cheguei a isso:

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

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

A razão pela qual construí o mapeamento dessa maneira é que obter informações do usuário "no meio do caminho" é complicado e pode se comportar de forma imprevisível; mesmo esse mapeamento derrubará o cursor na área de status enquanto aguarda o usuário digitar um caractere.

Heptite
fonte
8

Agradecemos a Johnny por nos dar esta resposta fantástica nos comentários abaixo:

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

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

No seu arquivo vimrc, será semelhante a:

nnoremap <C-i> i_<Esc>r

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

nnoremap <Space> i_<Esc>r
Matt C
fonte
1
Esta é a resposta mais concisa e simples.
Dylanthepiguy
4

Até onde eu sei, não existe essa função em nenhuma encarnação amplamente distribuída do editor vi, mas o vim tem um recurso para criar comandos personalizados. Já foi discutido aqui: neste tópico

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

MelBurslan
fonte
3
Aqui está o comando para mapear Ctrl-I para inserir um único caractere: ": nmap <Ci> i_ <esc> r"
Johnny
2

Uma maneira simples de fazer isso é usar os comandos Recortar xe Colocar p. Diga que *é o caractere que você deseja inserir. Insira-o usando i * Esc. Então aperte x. Isso cortará o personagem. Agora, você pode pressionar ppara colocar o único personagem. Se você precisa inserir esse personagem 300 vezes, você pode digitar: 300p.

Steve Bragg
fonte