Вкладки для отступа, пробелы для выравнивания

17

Я пытаюсь сделать vim автоматическим отступом для вкладок и выровнять по пробелам, но на самом деле vim сделать отступ для вкладок и заполнить выравнивание табуляцией + пробелами.

Vim делает это:

введите описание изображения здесь

(каждый блок является вкладкой)

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

Может сделать это:

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

Итак, я думаю, что есть много вопросов по поводу вкладок и пробелов, но ни один из них не дает решения Just Works:

На самом деле я использую:

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

Я попробовал плагин Smart Tab , который, кажется, работает хорошо, но когда я пытаюсь, gg=Gя получаю некоторые странные ошибки:

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

Эта дискуссия кажется довольно старой, так что теперь, 2015 год, существует официальное решение для ее решения?

tjbrn
источник
У меня нет сопоставления для этого, просто идея ... но что, если вы установите Vim для вставки вкладок (любой ширины, которая вам нравится), когда вы нажимаете клавишу Tab, но фактически расширяете вкладку до пробелов, если вы нажимаете Shift -Tab? Не сделает ли это такое выравнивание простым?
Wildcard
(PS: Там хорошая дискуссия на «Табуляция или пробелы» в «религиозные войны» форум из XKCD комиксов Наслаждайтесь;)
Джокер

Ответы:

3

Делать это действительно автоматически сложно. Вим не знает, что такое «отступ» и «выравнивание»; и некоторые люди могут не согласиться с тем, что именно представляет собой отступ и выравнивание.

Тем не менее, плагин Smart Tabs разработан, чтобы делать то, что вы хотите; Я обнаружил, что он работает достаточно хорошо для файлов C, но имеет ряд предостережений; например, он разбивает файлы Python и иногда делает неожиданные (для меня, в любом случае) вещи для файлов C.
Глядя на источник, я не могу понять, как он работает за 5 минут, и в сочетании с тем, что он ломает некоторые вещи, должен сказать вам, чтобы действовать осторожно ...

Мартин Турной
источник
3

Плагин Smart Tabs, о котором вы упомянули, почти не уступает. Сначала я столкнулся с той же ошибкой, что и вы, и сдался, но в конце концов потратил несколько минут, чтобы ее исправить. Попробуйте применить следующий патч:

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

Позже я обнаружил, что кто-то предложил подобное исправление в вики-разделе Smart Tabs . Увы, нового выпуска не было.

MartinR
источник
0

Отступ в vim выполняется просто используя следующий скрипт

Скрипт для выполнения отступа одного файла

#!/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
Это не ответ на вопрос
Мартин Турной