Como inserir um caractere de tabulação quando a opção expandtab está ativada no Vim

352

Quando estou no modo de inserção e tenho a expandtabopção ativada, pressionar Tab ↹resulta na inserção do número de espaços configurado.

Mas, ocasionalmente, quero inserir um caractere de tabulação real.

Você sabe como fazer isso?

devemouse
fonte

Respostas:

516

Você pode usar <CTRL-V><Tab>no "modo de inserção". No modo de inserção, <CTRL-V>insere uma cópia literal do seu próximo caractere.

Se você precisar fazer isso com frequência, o @ Dee`Kej sugeriu (nos comentários) a configuração Shift+ Tabpara inserir uma guia real com este mapeamento:

:inoremap <S-Tab> <C-V><Tab>

Além disso, conforme observado por @feedbackloop, no Windows, talvez seja necessário pressionar em <CTRL-Q>vez de <CTRL-V>.

Michael Anderson
fonte
33
E, em seguida, use .para repetir o último comando se desejar inserir várias guias.
Xavier T.
10
Tive alguns problemas ao usar essa combinação porque estava no modo de comando. Certifique-se de executar este comando no modo de edição.
mgfernan
11
INSERT, tecnicamente.
mkmurray
2
Nota: Se você estiver usando o gVim no Windows, provavelmente precisará usar CTRL+ Q- consulte stackoverflow.com/questions/6951672/…
feedbackloop
8
Eu tenho apenas um atalho simples para este caso e parece estar funcionando (sem quebrar mais nada): inoremap <S-Tab> <C-V><Tab>- Você pode colocá-lo em seu ~/.vimrcarquivo.
Dee'Kej
34

Você pode desativar a opção expandtab no Vim como abaixo:

:set expandtab!

ou

:set noet

PS: E restaure-o quando terminar de inserir a guia, com "set expandtab" ou "set et"

PS: Se você tiver um conjunto de guias equivalente a 4 espaços em .vimrc (softtabstop), convém também defini-lo como 8 espaços para poder inserir uma guia pressionando a tecla Tab uma vez em vez de duas vezes (configure softtabstop = 8 )

Jahanzeb Farooq
fonte
Em suma: set ete set noetpara mudar tabe spaceconforme a necessidade.
Eric Wang
Ctrl + V causou a colagem e não tive tempo de ajustar as combinações de teclas. Isso ajudou
Shirish Hirekodi 04/04
2

A partir da documentação em expandtab:

Para inserir uma guia real quando expandtabestiver ativada, use . Veja também e ins-expandtab . Esta opção é redefinida quando a opção é definida e restaurada quando a opção é redefinida.CTRL-V<Tab>:retab
pastepaste

Portanto, se você tiver um mapeamento para alternar a pasteopção, por exemplo,

set pastetoggle=<F2>

você também poderia fazer <F2>Tab<F2>.

Eugene Yarmash
fonte