在 vimming 方面,我通常是一个纯粹主义者。我不喜欢重新映射键,也不喜欢学习依赖一堆插件。我喜欢在外国机器上感觉和在自己的开发机器上一样强大。然而,我确实相信语法文件。即使解决方案可能不是语法文件(我使用的是 bindzone.vim),我还是想要它,无论做什么。
我经常查看或编辑制表符(或逗号,但这会是额外的好处)分隔数据。我讨厌将制表位设置为某个荒谬的数字,以便让所有内容对齐。示例:BIND 区域文件为 ~40+、6、2、5、15+。因此,即使我可以在单个屏幕上查看它们,但如果我设置 ts=40,我就无法查看。多年来,我一直在寻找“动态制表符大小”解决方案,但一直没有成功。
我讨厌编辑甚至可视化表格数据的唯一好方法是将其复制到我的工作站并在 Open Office 中打开。一定有更好的方法。
答案1
把制表符改为空格,然后只使用 R(而不是 i)进行编辑怎么样?这样,您就不必重新对齐任何内容(除了一开始重新调整所有内容的间距时)。
答案2
提交功能请求。VIM 需要一个选项来显示不同的制表位,就像每个文字处理器中常见的那样。很多人将 vim 用作文字处理器,我很惊讶它还没有。我建议修改 tabstop 以接受数组而不是整数。
答案3
有一个开发列表修补据说可以实现可变制表位的 Vim。表明的{1} 处于测试阶段。
显然,这将涉及为您想要使用的服务器编译 vim。
另外一个选择可以设置一个自定义文件类型,将制表符转换为由某些特殊字符分隔的空格。您可以设置自动命令,在读取时触发导入(即转换为分隔列)例程,在写入时触发导出例程(转换回制表符分隔),这样最终的工作方式或多或少是透明的。
例如,文件
Column 1 header\tColumn 2 header\tcolumn 3 header
first row, column 1\tfirst row, column 2\tfirst row, column 3
在 vim 中将被视为类似
Column 1 header» «Column 2 header» «Column 3 header
first row, column 1» «first row, column 2» «first row, column 3
这或多或少是我突然想到的;可能有一个 vimscript 包可以实现这一点。如果没有,写起来也不难。你只需要确保列分隔符(这里是“»”和“«”)实际上没有在文件中使用。对于绑定配置文件,我认为任何非 ASCII 字符都是安全的。为了提高稳健性,我想你可以给 vim 一些选项,让它扫描文件以查找文件中不存在的一组字符,或者只是转义任何存在的字符。
最好用看起来像空格的字符{2} 但不是,如 '\xa0' 或 '\u2002';同样,这只有在文件中没有填充字符,或者您让导入例程转义那些填充字符时才会正常工作。
此外,我假设您熟悉 c 风格的反引号:在示例的第一部分中,“\t”表示制表符;\x 和 \u 序列是十六进制和 unicode 字符表示。
如果您最终实施或发现类似的东西,请告诉我。
{1}:http...groups.google.com/group/vim_dev/web/vim-patches?pli=1
{2}:http...www.cs.tut.fi/~jkorpela/chars/spaces.html
NB:模糊的老式参考风格是因为我在这个网站上缺乏声誉。
答案4
您是否知道,通过定义自定义模式行,您可以自动设置文件的自定义属性?我知道这并不能解决您的问题,但可以让您不必在每次想要对齐文件时输入自定义属性。
- 在文件顶部添加“# vi:ts=40”
- 记得在你的 .vimrc 中设置 modeline
这在 vi 中也有效......