Vim: mudando as abas para espaços

2

Eu sei que essa pergunta foi feita muitas vezes, mas não estou encontrando uma solução para o meu problema em particular, principalmente porque não consigo identificar o problema.

Veja a linha do tempo dos eventos:

  • abrir o arquivo python antigo (escrito com python2.7) - está tudo bem
  • altere as combinações de teclas para executar arquivos .py com python3 em vez de python2.7 - como esperado, lote de IndentError s, mas o arquivo ainda é a mesma estrutura / layout / número de espaços / guias
  • adicionou expandtab ao meu .vimrc - não mais IndentError s fazer a inconsistência mais, mas novo IndentError s em todo o lugar porque a estrutura do meu código-fonte está agora fora de sintonia.
  • Eu removo expandtab do meu .vimrc e ainda consigo o mesmo fora da fonte, mesmo se eu matar a sessão, bastante iTerm, puxe a fonte do github ... PORQUÊ!?
Só para ficar claro, há apenas duas coisas que foram alteradas no meu currículo como nos últimos meses e ambas as alterações foram feitas esta manhã. O primeiro foi remaping <F9> para emitir um comando shell para python3 ao invés de 2.7, o que NÃO afetou a estrutura do meu código-fonte. A segunda mudança foi adicionar expandtab , que estragou tudo ... remover expandtab não retorna minha experiência vim ao modo como era antes de adicioná-la.

As alterações estruturais na minha fonte são semi-uniformes, então deixe-me tentar explicar o que está realmente acontecendo.

O que costumava parecer:

class GUI():
    def __init__(self):
        suite of code

agora se parece com:

class GUI():
    def __init__(self):
    suite of code

e é assim em todo o quadro, para o que parece ser todo conjunto de código aninhado ... em outras palavras, a primeira expansão de guias em 4 espaços funciona bem, mas em vez de expandir as guias aninhadas na primeira guia, parece que apenas apaga a guia.

Há outras coisas estranhas acontecendo, mas não consigo ver um padrão.

Alguma idéia do que está acontecendo?

    
por aweeeezy 06.03.2015 / 22:21

1 resposta

4

Esta aparência, com todos os outros níveis de recuo, é geralmente (e parece ser o caso no seu código) um sintoma de olhar para o código que possui 4 espaços por recuo, mas abas de 8 espaços em cada linha ( por exemplo, 4s, 1t, 1t4s, 2t), com uma configuração tabstop de 4.

Para o código Python, você deve simplesmente substituir todas as guias no código por oito espaços, pois era assim que o interpretador tratava. Em geral, você poderia lidar com situações como essa usando o comando :retab após definindo tabstop para o valor com o qual o código-fonte foi originalmente escrito, por exemplo,

:set ts=8
:retab 4

Se expandtab estiver definido, a nova busca substituirá as guias por espaços.

    
por 06.03.2015 / 22:45