Schede per il rientro, spazi per l'allineamento


17

Sto cercando di fare il rientro automatico di VIM con le schede e allinearlo con gli spazi bianchi, ma in realtà, il rientro di VIM con le schede e riempire l'allineamento con schede + spazi bianchi.

Vim lo fa:

inserisci qui la descrizione dell'immagine

(ogni blocco è una scheda)

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

Può farlo:

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

Quindi, penso che ci siano molte domande sull'argomento delle schede e degli spazi, ma nessuna di esse fornisce una soluzione Just Works:

In realtà sto usando:

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

Ho provato il plug-in Smart Tab , che sembra funzionare bene, ma quando provo gg=Gottengo alcuni strani errori:

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

Questa discussione sembra essere molto antica, quindi ora, 2015, c'è una soluzione ufficiale per affrontarla?



Non ho una mappatura per questo, solo un'idea ... ma cosa succede se imposti Vim per inserire le schede (di qualsiasi larghezza ti piaccia) quando premi il tasto tab, ma in realtà espandi una scheda negli spazi se digiti Maiusc -Tab? Ciò non semplificherebbe questo tipo di allineamento?
Wildcard il

(PS: C'è una bella discussione su "Tabs vs. Spaces" nel forum "Religious Wars" del fumetto di xkcd . Divertiti;)
Wildcard

Risposte:


3

Fare questo in modo veramente automatico è difficile. Vim non sa cos'è "rientro" e cos'è "allineamento"; e alcune persone potrebbero non essere d'accordo su ciò che costituisce esattamente rientro e allineamento.

Detto questo, il plug-in Smart Tabs è progettato per fare ciò che desideri; Ho scoperto che funziona abbastanza bene per i file C, ma ha un certo numero di avvertenze; si rompe i file Python, per esempio, e fa un po 'inaspettato (per me, comunque) le cose per i file C, a volte.
Guardando la fonte, non riesco davvero a capire come funziona in 5 minuti e, combinato con il fatto che rompe alcune cose, dovrebbe dirti di procedere con attenzione ...


3

Il plug-in di Smart Tab che hai citato è buono tanto quanto lo è. Inizialmente mi sono imbattuto nello stesso errore che hai fatto e hai rinunciato, ma alla fine ho impiegato alcuni minuti per risolverlo. Prova ad applicare la seguente 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

In seguito ho scoperto che qualcuno ha suggerito una soluzione simile nella sezione wiki di Smart Tabs . Purtroppo, non è stata rilasciata una nuova versione.


0

Il rientro in vim viene eseguito semplicemente usando il seguente script

Script per eseguire il rientro di un singolo file

#!/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
Questa non è una risposta alla domanda
Martin Tournoij,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.