用于缩进的选项卡,用于对齐的空格


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年,有一个正式的解决方案可以解决?



我没有为此的映射,只是一个主意...但是如果您在按Tab键时将Vim设置为插入制表符(您喜欢的任意宽度)会怎样,但是如果您按Shift键,实际上会将制表符扩展为空格-标签?这样会不会简化这种对齐方式?
通配符

(PS:有一个很好的讨论“选项卡与空间”中的的“宗教战争”论坛XKCD漫画享受。)
通配符

Answers:


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 Wiki部分中提出了类似的修复建议。las,还没有新版本。


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
这不是问题的答案
Martin Tournoij '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.