Pestañas para sangría, espacios para alineación

17

Estoy tratando de hacer una sangría automática de vim con pestañas y alinearlas con espacios en blanco, pero en realidad, sangrar vim con pestañas y llenar la alineación con pestañas + espacios en blanco.

Vim lo hace:

ingrese la descripción de la imagen aquí

(cada bloque es una pestaña)

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

Puede hacerlo:

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

Entonces, creo que hay muchas preguntas sobre el tema de las pestañas y los espacios, pero ninguna de ellas proporciona alguna solución de Just Works:

En realidad estoy usando:

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

Probé el inteligente Tab plugin, que parece funcionar bien, pero cuando intento gg=Gconsigo algunos errores extraños:

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

Esta discusión parece ser bastante antigua, así que ahora, 2015, ¿hay una solución oficial para lidiar con eso?

tjbrn
fuente
No tengo una asignación para esto, solo una idea ... pero ¿qué pasa si configura Vim para insertar pestañas (del ancho que desee) cuando presiona la tecla de tabulación, pero en realidad expande una pestaña a espacios si escribe Mayús? -¿Lengüeta? ¿No haría que este tipo de alineación sea simple?
Comodín el
(PD: Hay una buena discusión sobre "Tabs vs. Spaces" en el foro "Religious Wars" del cómic xkcd . Enjoy;)
Comodín

Respuestas:

3

Hacer esto realmente automáticamente es difícil. Vim no sabe qué es "sangría" y qué es "alineación"; y algunas personas pueden estar en desacuerdo sobre lo que constituye exactamente la sangría y la alineación.

Dicho esto, el complemento Smart Tabs está diseñado para hacer lo que quieras; Descubrí que funciona razonablemente bien para archivos C, pero tiene varias advertencias; que rompe los archivos de Python, por ejemplo, y hace algo inesperado (para mí, de todos modos) cosas para archivos de C a veces.
Mirando la fuente, realmente no puedo entender cómo funciona en 5 minutos, y combinado con el hecho de que rompe algunas cosas, debería decirle que proceda con cuidado ...

Martin Tournoij
fuente
3

El complemento Smart Tabs que mencionó es tan bueno como parece. Inicialmente me encontré con el mismo error que tuviste y me di por vencido, pero finalmente pasé unos minutos para solucionarlo. Intente aplicar el siguiente parche:

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

Más tarde descubrí que alguien sugirió una solución similar en la sección wiki Smart Tabs . Por desgracia, no ha habido un nuevo lanzamiento.

MartinR
fuente
0

La sangría en vim se realiza simplemente usando el siguiente script

Script para realizar sangría de un solo archivo

#!/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
fuente
2
Esta no es una respuesta a la pregunta
Martin Tournoij