Guias para recuo, espaços para alinhamento


17

Estou tentando fazer recuo automático do vim com guias e alinhar com espaços em branco, mas, na verdade, recuo do vim com guias e preencher o alinhamento com guias + espaços em branco.

Vim faz isso:

insira a descrição da imagem aqui

(cada bloco é uma guia)

{
>--long a = 1,
>-->--..b = 2,
>-->--..c = 3;
}

Pode fazê-lo:

{
>--long a = 1,
>--.....b = 2,
>--.....c = 3;
}

Então, acho que há muitas perguntas sobre o assunto de guias e espaços, mas nenhuma delas fornece uma solução Just Works:

Na verdade eu estou usando:

set ai
set cindent
set cinoptions=(0,:0,u0,U0,g0)

Eu tentei o plug-in Smart Tab , que parece funcionar bem, mas quando tento gg=Grecebo alguns erros estranhos:

Error detected while processing function CtabRedoIndent..<SNR>12_CheckAlign:
line   11:
E108: No such variable: "b:ctab_lastalign"
Press ENTER or type command to continue
Error detected while processing function CtabRedoIndent:
line   10:
E170: Missing :endwhile

Essa discussão parece velha demais, então agora, 2015, existe uma solução oficial para lidar com isso?



Eu não tenho um mapeamento para isso, apenas uma idéia ... mas e se você configurar o Vim para inserir guias (da largura que desejar) quando pressionar a tecla tab, mas na verdade expandir uma guia para espaços se você digitar Shift -Aba? Isso não tornaria esse tipo de alinhamento simples?
Curinga

(PS: Há uma boa discussão sobre "Tabs vs. Spaces" no fórum "Guerras religiosas" da história em quadrinhos do xkcd . Aproveite;)
Wildcard

Respostas:


3

Fazer isso verdadeiramente automaticamente é difícil. Vim não sabe o que é "recuo" e o que é "alinhamento"; e algumas pessoas podem discordar sobre o que exatamente constitui recuo e alinhamento.

Dito isto, o plug - in Smart Tabs foi projetado para fazer o que você deseja; Eu descobri que ele funciona razoavelmente bem para arquivos C, mas tem várias advertências; ele quebra arquivos Python, por exemplo, e faz algumas inesperado (para mim, pelo menos) as coisas para arquivos C, às vezes.
Olhando a fonte, não consigo descobrir como funciona em 5 minutos e, combinado com o fato de que quebra algumas coisas, deve pedir para você prosseguir com cuidado ...


3

O plug-in Smart Tabs que você mencionou é o melhor possível. Inicialmente, encontrei o mesmo erro que você cometeu e desistiu, mas acabei gastando alguns minutos para corrigi-lo. Tente aplicar o seguinte patch:

--- ctab.vim.orig   2016-08-11 17:05:20.767275274 +0800
+++ ctab.vim    2016-08-11 17:15:20.039286525 +0800
@@ -221,7 +221,7 @@
       if a:line == line('.')
         let b:ctab_lastalign=a:line
       else
-        unlet b:ctab_lastalign
+        unlet! b:ctab_lastalign
       endif
       set ts=50
       set sw=50

Mais tarde, descobri que alguém sugeriu uma correção semelhante na seção wiki do Smart Tabs . Infelizmente, não houve um novo lançamento.


0

A indentação no vim é realizada simplesmente usando o seguinte script

Script para executar o recuo de um único arquivo

#!/bin/bash 
#Author: Ankit shah
#Enter file name to indent as argument
file=$1
vim $file -c "normal gg=G" -c "wq"
#Use expand command to turn tabs into spaces. Code uniform across different vim environment
expand -t 4 $file $file 

2
Esta não é uma resposta para a pergunta #
Martin Tournoij 31/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.