Rainbow CSV插件可替代Excel

哈Ha! 本文是关于我为5个文本编辑器编写的Rainbow CSV插件的:


VS CodeVimSublime Text 3原子Gedit


我认为本文的许多读者会定期遇到CSV(逗号分隔),TSV(制表符分隔)和类似文件。 如果您尝试在文本编辑器中打开它们(但是还有其他方法来查找其中的内容呢?),则完全开放的图片将像图片的左侧一样打开。 看着它,很难说表中有多少列。 图片的右侧是打开了RainbowCSV的同一文件,由于语法突出显示,因此可读性得到了显着提高。


图片


奇怪的是,仅使用一个(尽管很长)正则表达式行来设置此类突出显示的语法:


((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))?((?:"(?:[^"]*"")*[^"]*"(?:,|$))|(?:[^,]*(?:,|$)))? 

突出显示规则可以完全找到,例如, 在这里 (VS Code的版本),但是除了正则表达式本身之外,绝对没有其他内容可看。


相比之下,语法文件是针对通用语言的,例如Python,JS,C ++等。 通常占用几百行非常深奥的代码。


为了不向读者详细介绍文章,猜测它由哪些基本组成部分以及该正则表达式的工作原理提供给读者。


提示:这是一个简单的表达式([^,]*,)?([^,]*,)? -用2种不同的交替颜色突出显示CSV文件,但在用引号引起来的字段内的逗号中无法正常使用。


顺便说一句,在下文中描述了Visual Studio Code的Rainbow CSV版本,因为 这是目前技术上最先进,最受欢迎的插件版本(下载量超过50万)。


因此,除了Rainbow CSV突出显示列的事实外,它还可以:


  • 告诉光标当前指向哪一列:列号+第一个标题行的名称。 如果文件开头没有标题行(数据立即消失),则用户可以设置其“虚拟”标题。
  • 自动检查文件中每行的条目数是否不同或是否正确使用了转义符-“ CSV Lint”。
  • 使用内置的RBQL解释器运行类似SQL的查询,该查询允许您将非常广泛的文本转换类应用于输入表。
    RBQL支持几乎所有的SQL语句(SELECT,UPDATE,WHERE,ORDER BY,TOP / LIMIT,JOIN,GROUP BY)以及JavaScript和Python的所有标准函数和语句。
    RBQL是一项单独的技术,但与Rainbow CSV的概念非常吻合,因此此集成具有许多优势。

Rainbow CSV插件的最重要功能之一是根据其内容自动检测CSV文件。 此功能至关重要,因为 CSV(或TSV)文件通常具有.csv(.tsv)以外的文件扩展名。 您还可以找到扩展名为.csv的文件,其中实际上使用分号作为分隔符; 。 通过内容确定表文件的算法非常简单-只需检查此分隔符的split'e时每行中的单元格数是否恒定> 1。


Rainbow CSV与图形对齐方式的比较


通常,查看CSV数据的传统方式是将其导入图形编辑器(如Excel)。
与这种方法相比,Rainbow CSV具有优点和缺点:


优点:


  • 所见即所得-您可以确定屏幕上可见的是文件的实际内容。
  • 您最喜欢的文本编辑器的熟悉环境
  • 零成本抽象:与图形对齐方式相比,从计算的角度来看,语法高亮非常“便宜”。
  • 更高的信息密度:更多的数据可容纳在一个屏幕上-图形对齐方式由于对齐空间而“占用”了大量空间。
  • 从不同的窗口直观地链接一列(以相同颜色突出显示)的能力

缺点:


  • 标准实现使用10种不同的颜色,因此,当列数大于10时,颜色开始重复,并且列的颜色编码效率降低。
  • 不支持将行包装在用双引号转义的单元格中。 在这里您可以阅读此问题的详细信息。 但是,我认为在单元格内带有换行符的CSV是一种极为不切实际的格式。

与文字对齐方式比较


增加CSV文件可读性的另一种方法是将它们与空格对齐,但是此方法修改了文件的内容,因此其适用性非常有限。


而且,在我看来,句法彩虹突出显示后的文件的可读性比已与空格对齐的文件的可读性更好。


关于项目的一点


Rainbow CSV的第一版是5年前为Vim编写的,它基于Rainbow_parentheses插件。如您所见,我从这个项目中不仅借用了部分代码,还借用了一半的名称=)
一年前出现了VSCode,Atom和Sublime Text 3的版本。


插件的用户已经提出了许多关键功能和改进。


比较不同编辑者的插件开发过程


总之,我可以对流行的文本编辑器的API进行一些比较。
VSCode,Atom和Sublime Text 3插件的API非常相似,主要区别在于VS Code和Atom的扩展名是用JavaScript编写的,而Sublime Text 3的扩展名是用Python编写的。


所有3个编辑器都使用相同的正则表达式引擎来突出显示语法,因此在这些编辑器之间移动Rainbow CSV只需对常规进行最小的调整即可。


总的来说,我可以说VS Code提供了最愉快,最方便的插件开发过程。 另一方面,由于某种原因,它最初缺少Rainbow CSV的全部操作所必需的某些功能,但是VS Code团队欣然接受并改进了我的PR,这增加了我需要的方法。


为Vim编写插件与这3个较新的编辑器有很大不同。 Vim使用自己的VimScript语言以及各种命令来处理打开的文件的内容。 Vim用于突出显示的语法模型也与VSCode,Atom和Sublime提供的语法模型完全不同。


参考文献:


Source: https://habr.com/ru/post/zh-CN429548/


All Articles