Pergunta

Como evito que o vim substitua espaços por tabulações quando o recuo automático está ativado?

Um exemplo:se eu tiver duas tabulações e 7 espaços no início da linha, e tabstop=3, e pressiono Enter, a próxima linha tem quatro tabulações e 1 espaço no início, mas não quero isso...

Foi útil?

Solução

Talvez seja uma boa ideia não usar abas.

:set expandtab

Se você quiser substituir todas as tabulações do seu arquivo por 3 espaços (que será muito semelhante a tabstop=3):

:%s/^I/   /

(onde ^I é o ABA personagem)

Na ajuda on-line do VIM:

'tabstop' 'ts'      number  (default 8)
        local to buffer
Number of spaces that a <Tab> in the file counts for.  Also see
|:retab| command, and 'softtabstop' option.

Note: Setting 'tabstop' to any other value than 8 can make your file
appear wrong in many places (e.g., when printing it).

There are four main ways to use tabs in Vim:
1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
   behave like a tab appears every 4 (or 3) characters.
2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
   'expandtab'.  This way you will always insert spaces.  The
   formatting will never be messed up when 'tabstop' is changed.
3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
   |modeline| to set these values when editing the file again.  Only
   works when using Vim to edit the file.
4. Always set 'tabstop' and 'shiftwidth' to the same value, and
   'noexpandtab'.  This should then work (for initial indents only)
   for any tabstop setting that people use.  It might be nice to have
   tabs after the first non-blank inserted as spaces if you do this
   though.  Otherwise aligned comments will be wrong when 'tabstop' is
   changed.

Outras dicas

tudo que eu quero é que a linha com recuo automático tenha exatamente os mesmos caracteres de recuo da linha anterior.

:help copyindent

'copyindent' 'ci' boleano (padrão desativado);local para buffer;{não em Vi}

Copie a estrutura do recuo de linhas existentes ao recuar automaticamente um nova linha.Normalmente, o novo travessão é reconstruído por uma série de guias seguidas de espaços conforme necessário (a menos que 'expandir aba' está habilitado, nesse caso, apenas espaços são usados).Habilitar essa opção faz com que o nova linha copie quaisquer caracteres que foram usados para recuar no linha existente.Se o novo travessão for maior do que o existente linha, o espaço restante é preenchido da maneira normal.

OBSERVAÇÃO: 'copyindent' é redefinido quando 'compatível' está definido.
Veja também 'preservar recuo'.

:help preserveindent

'preservar recuo' 'pi' boleano (padrão desativado);local para buffer;{não em Vi}

Ao alterar o recuo da linha atual, preserve o máximo possível da estrutura do recuo.Normalmente, o recuo é substituído por uma série de guias seguidas de espaços conforme necessário (a menos que 'expandir aba' está ativado, nesse caso, apenas os espaços são usados).Ativando esta opção significa que o recuo preservará o maior número possível de caracteres existentes para recuo e adicione apenas guias ou espaços adicionais conforme necessário.

OBSERVAÇÃO:Ao usar ">>" várias vezes, o recuo resultante é uma mistura de guias e espaços.Você pode não gostar disso.
OBSERVAÇÃO: 'preservar recuo' é redefinido quando 'compatível' está definido.
Veja também 'copyindent'.
Use :retab para limpar espaços em branco.

Você pode converter tudo TAB para SPACE

:set et
:ret!

ou converter tudo SPACE para TAB

:set et!
:ret!

Aqui está parte do meu .vimrc:

set autoindent
set expandtab
set softtabstop=4
set shiftwidth=4

Isso funciona bem para mim porque eu absolutamente não quero guias no meu código-fonte.Pela sua pergunta, parece que você deseja manter duas tabulações e sete espaços na próxima linha, e não tenho certeza se há uma maneira de ensinar o vim a acomodar esse estilo.

Talvez o fundo disso possa ajudá-lo?

O vi padrão interpreta a tecla tab literalmente, mas existem alternativas populares derivadas do vi que são mais inteligentes, como o vim.Para fazer com que o vim interprete tab como um comando ``indent'' em vez de um comando insert-a-tab, faça o seguinte:

set softtabstop=2

Se quiser substituir todas as tabulações por espaços com base na configuração de 'ts', você pode usar :retab.Também pode fazer o inverso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top