ti-enxame.com

Guias e espaços no vim

Como evito que o vim substitua espaços por guias quando o autoindent está ativado?

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

71
RQ

Talvez seja uma boa idéia não usar guias.

:set expandtab

Se você deseja substituir todas as guias do seu arquivo por três espaços (que serão bem parecidos com tabstop=3):

:%s/^I/   /

(Onde ^I é o TAB personagem)

Na ajuda on-line 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.
78
user11211

Você pode converter todos os TAB em SPACE

:set et
:ret!

ou converter todos SPACE em TAB

:set et!
:ret!
42
kev

tudo o que eu quero é que a linha autoindentada tenha exatamente os mesmos caracteres de indentação da linha anterior.

:help copyindent

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

Copie a estrutura do recuo das linhas existentes ao inserir automaticamente uma nova linha. Normalmente, o novo recuo é reconstruído por uma série de guias seguidas por espaços, conforme necessário (a menos que 'expandtab' esteja ativado, nesse caso, apenas espaços são usados). A ativação dessa opção faz com que a nova linha copie os caracteres usados ​​para recuar na linha existente. Se o novo recuo for maior que na linha existente, o espaço restante será preenchido da maneira normal.

NOTA: 'copyindent' é redefinido quando 'compatível' é definido.
Veja também 'preserveindent' .

:help preserveindent

'preserveindent''pi'booleano (desativado por padrão); local para buffer; {não no Vi}

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

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

41
Aristotle Pagaltzis

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. Parece da sua pergunta que você deseja manter duas guias e sete espaços na próxima linha, e não tenho certeza de que haja uma maneira de ensinar o vim a acomodar esse estilo.

25
Greg Hewgill

Talvez a parte inferior 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 que o vim interprete tab como um comando `` indent '' em vez de um comando insert-a-tab, faça o seguinte:

set softtabstop=2
1
svrist

Se você deseja substituir todas as guias por espaços com base na configuração de 'ts', você pode usar: retab. Também pode fazer o contrário.

1
graywh