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


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 рік, існує офіційне рішення для вирішення цього питання?



У мене немає для цього відображення, просто ідея ... але що робити, якщо ви встановите Vim для вставки вкладок (будь-якої ширини, що вам подобається), коли натискаєте клавішу вкладки, але насправді розгортаєте вкладку на пробіли, якщо набираєте Shift -Tab? Хіба це не зробить таке вирівнювання простим?
Wildcard

(PS: На форумі "Релігійних воєн" коміксу xkcd "Приємне обговорення" на "Вкладках проти просторів" приємного обговорення . Насолоджуйтесь;)
Wildcard

Відповіді:


3

Робити це справді автоматично автоматично важко. Vim не знає, що таке "відступ" і що таке "вирівнювання"; а деякі люди можуть не погодитися з приводу того, що саме являє собою відступ та вирівнювання.

При цьому, плагін 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 . На жаль, ще не було нового випуску.


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
Це не відповідь на запитання
Мартін Турноїй
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.