É possível converter guias em espaços, mantendo o alinhamento do texto?
Simplesmente substituir apenas funciona de maneira útil quando não há caracteres iniciais.
indentation
tab-characters
ideasman42
fonte
fonte
:h vim-faq
e pesquisar/tab characters
. A tag difícil de memorizar é:h faq-14.16
.Respostas:
Você pode usar o
:retab
comando De:help :retab
Observe que o comando aceita um intervalo, para que você possa fazer uma seleção visual e, em seguida, apenas
:retab
as linhas selecionadas.fonte
Você pode usar
:retab
, como indicado, no entanto, isso mudará todas as guias para espaços, não apenas as guias no início da linhaPortanto, este (onde
⇥
está um caractere de tabulação):é alterado para (onde
␣
está um caractere de espaço):Isso pode produzir efeitos colaterais inesperados em alguns cenários, e é ainda mais um problema ao alterar espaços para guias!
Então, escrevi uma pequena função para alterar apenas tabulações / espaços no início da linha:
Com esta versão, você deve especificar manualmente
expandtab
na chamada de função (ou seja,:call Retab(1)
alterar guias para espaços), mas também pode modificá-la para obter o valor atual de&expandtab
(como já acontece com&tabstop
) da mesma forma que:retab
faz. (Eu prefiro especificá-lo manualmente).fonte
a
emif a:expandtab
média?set expandtab
no .vimrc e noautocmd BufWritePre * :call Retab(&expandtab)
- o recuo será alterado para tabulações, em vez de espaços.O Vim fornece um
!retab
comando que substituirá todas as seqüências<Tab>
por novas strings de espaço em branco usando o novo valor tabstop (por exemplo:set tabstop=2
) fornecido, mas todas as guias dentro das strings podem ser modificadas (por exemplo, em um programa C, você deve usar\t
para evitar isso)!Portanto, como alternativa, você pode alterar todas as guias em espaços usando o seguinte comando:
ou como sugerido por @Shahbaz :
Portanto, apenas as guias usadas no recuo são convertidas.
Explicação:
%
representa todo o buffer / arquivo (:help :%
)s
significa substituto (:help sub-replace-special
)\t
, ou^I
significa guia- use quantos espaços você precisar por uma guia
g
- significa global e converterá várias ocorrências de guias na mesma linhaEm seguida, para corrigir o recuo de todo o arquivo, você pode tentar: gg=G. Verificação: Re-recuando código mal recuado para obter mais detalhes.
Para usar espaços por padrão, em vez de guias, você precisa adicionar as seguintes configurações ao seu
.vimrc
arquivo:Solução alternativa é usar
tidy
Relacionado:
fonte
%s/^\t\+/ g
para que apenas as guias usadas no recuo sejam convertidas. Além disso,gg=G
pode ser catastrófico com linguagens como python.Tente usar:
expand
é uma ferramenta de linha de comando para converter guias em espaços, que você pode executar a partir de um shell ou com:!expand
.Está no POSIX, portanto deve estar disponível na maioria dos sistemas.
unexpand
fará o inverso, a propósito.fonte
expand
?:%!expand -t 4
dentro do vim. Melhor ainda, você também pode usar a opção de largura atual mudança::exe '%!expand -t ' . &shiftwidth
Para completar,
=
também pode ser usado para corrigir recuos, depois de especificar que as guias são substituídas por espaços. No modo normal, você pode fazer isso digitando:set expandtab
. Então=
poderia ser usado de duas maneiras:=
corrigia recuos dos blocos de código selecionados.gg=G
consertaria o arquivo inteiro, ondegg
move o cursor para o início do arquivo, depois=
é aplicado eG
move o cursor para o final do arquivo.Referência: link
fonte