Tabulatoren zum Einrücken, Leerzeichen zum Ausrichten

17

Ich versuche, vim mit Tabulatoren automatisch einzurücken und mit Leerzeichen auszurichten, aber tatsächlich, vim mit Tabulatoren einzurücken und die Ausrichtung mit Tabulatoren + Leerzeichen zu füllen.

Vim macht es:

Bildbeschreibung hier eingeben

(Jeder Block ist ein Tab)

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

Darf es tun:

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

Ich denke, es gibt viele Fragen zum Thema Tabulatoren und Leerzeichen, aber keine bietet eine Lösung für Just Works:

Eigentlich benutze ich:

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

Ich habe das Smart Tab Plugin ausprobiert , was anscheinend gut funktioniert, aber wenn ich es versuche, gg=Gerhalte ich einige seltsame Fehler:

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

Diese Diskussion scheint ziemlich alt zu sein, also gibt es jetzt, 2015, eine offizielle Lösung, um damit umzugehen?

tjbrn
quelle
Ich habe kein Mapping dafür, nur eine Idee ... aber was ist, wenn Sie Vim so einstellen, dass beim Drücken der Tabulatortaste Tabulatoren (mit beliebiger Breite) eingefügt werden, aber wenn Sie die Umschalttaste drücken, wird die Tabulatortaste tatsächlich auf Leerzeichen erweitert -Tab? Wäre das nicht eine einfache Ausrichtung?
Wildcard
(PS: Es gibt eine nette Diskussion über "Tabs vs. Spaces" im "Religious Wars" -Forum des xkcd-Comics . Viel Spaß;)
Wildcard

Antworten:

3

Dies wirklich automatisch zu tun ist schwierig. Vim weiß nicht, was "Einrückung" und was "Ausrichtung" ist. und manche Menschen sind sich vielleicht nicht einig, was genau Einrückung und Ausrichtung ausmacht.

Davon abgesehen ist das Smart Tabs-Plugin so konzipiert, dass es genau das tut, was Sie wollen. Ich fand, dass es für C-Dateien einigermaßen gut funktioniert, aber eine Reihe von Vorbehalten hat; Es bricht beispielsweise Python-Dateien und führt manchmal (für mich jedenfalls) unerwartete Aktionen für C-Dateien aus.
Wenn ich mir die Quelle anschaue, kann ich nicht wirklich herausfinden, wie es in 5 Minuten funktioniert, und in Kombination mit der Tatsache, dass es einige Dinge kaputt macht, sollte ich Ihnen raten, vorsichtig vorzugehen ...

Martin Tournoij
quelle
3

Das von Ihnen erwähnte Smart Tabs-Plug-In ist in etwa so gut wie es nur geht. Ich bin anfangs auf denselben Fehler gestoßen, den Sie gemacht und aufgegeben haben, habe aber schließlich ein paar Minuten damit verbracht, ihn zu beheben. Wenden Sie den folgenden Patch an:

--- 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

Ich habe später herausgefunden, dass jemand eine ähnliche Lösung im Wiki-Abschnitt "Smart Tabs" vorgeschlagen hat . Leider gab es keine Neuerscheinung.

MartinR
quelle
0

Das Einrücken in vim erfolgt einfach mithilfe des folgenden Skripts

Skript zum Einrücken einer einzelnen Datei

#!/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 
Ankit Shah
quelle
2
Dies ist keine Antwort auf die Frage
Martin Tournoij