2

我有一些包含数据(如 cvs)并使用制表符格式化的文本文件,但列的大小并不完全相同。

vim 中的默认格式为:

int1    longvalue1       string1
int2    anotherlongvalue2       string2

vim 可以对不同的列使用不同的制表位吗?显示将是

int1  longvalue1         string1
int2  anotherlongvalue2  string2
4

2 回答 2

4

此功能(由编辑器自动完成)通常称为Elastic tabstop。此类补丁已被提出包含在 Vim 中(例如,请参见此处),但它们还远未包含在 Vim 中(并且几乎没有进展)。

作为解决方法,您可以:set ts设置一个较大的值(尽管会导致巨大的差距),或者使用像Align 这样的插件 - 帮助人们对齐文本、eqns、声明、表格等Tabular - 用于文本过滤和对齐转换的 Vim 脚本将制表符转换为适当数量的空白(可能是暂时的;重新转换为:write)。

于 2013-03-12T09:35:17.763 回答
1

谢谢 Ingo,插件 Align 是我需要的。我想替换<tab>符号并且插件不替换这些边界(典型的边界是=并且不应该被替换)。

因此,我创建了一个函数来替换它们:

" :DoAlign command to format the text as an array by replacing the <tabs>.
" Requires the Align-plugin
fun! DoAlignFunction()
 %s#\t#==motiv==#g
 %Align
 %s#==motiv==##g
endfunction

command! DoAlign call DoAlignFunction()

所以我可以(不选择任何文本)用:DoAlign

于 2013-03-13T10:21:35.820 回答