有没有一个很好的emacs模式来显示和编辑巨大的分隔符分隔文件?

时间:2012-05-16 10:18:30

标签: emacs csv alignment

我一直在搜索没有找到一段时间的模式,这使得编辑巨大的制表符/逗号/冒号分隔文件很容易。我一直想要一种模式,确保列始终排列,就像组织模式表一样。我知道我可以轻松地将整个文件转换为组织模式表,然后在我完成后将其关闭,但是对于大文件来说这会变得非常慢,并且对于快速编辑很麻烦(还有发生的问题)如果一个字段包含一个垂直条)。那么有没有人知道我可以使用的模式或内置函数/变量,以便我可以得到像

这样的文件
col1\tcol2\tcol3
very long column1\tcol2\tcol3

显示为

col1               col2  col3
very long column1  col2  col3

? (可能在隔板上涂上一些颜色)

4 个答案:

答案 0 :(得分:10)

也许您可以告诉我们您已找到并拒绝了哪些内容?

如果您一直在搜索,那么您肯定已经看过http://emacswiki.org/emacs/CsvMode了吗?你没有提到它,或者说为什么它没有任何好处。

SES(Simple Emacs Spreadsheet)可能是一种有用的方法:

C-h i g (ses) RET

您可以创建一个ses-mode缓冲区并将制表符分隔的数据放入其中(这是导入机制)。

但是,这可能比你追求的更麻烦,而且我不确定它对“巨大”文件的表现会有多好。

答案 1 :(得分:10)

尝试csv-mode,它至少适用于Emacs 24。

如果您不使用默认值(逗号),则可以设置变量csv-separators以更改分隔符。

请参阅EmacsWiki

答案 2 :(得分:2)

有漂亮的column.el,我多年前在gnu.emacs.sources 组中发现的(它是在1999 年添加的)。该群组现已被谷歌屏蔽。我只是在 Org 模式阻塞的约 5000 行制表符分隔文本文件上使用了 pretty-column.el(出于这个原因,Org 模式在转换此类文件时有 999 行限制)。 在编辑中添加:这似乎现在被称为 delim-col.el(见 this Emacs Wiki entry);作者是同一个人。

答案 3 :(得分:0)

如@choroba所述,使用csv-mode。具体回答您的问题:

  • 确保您的分隔符位于csv-separators中,例如您可以使用

    进行设置
    (setq csv-separators '("," "    "))
    
  • 使用csv-align-fields(默认键绑定C-c C-a)将字段值排列为列。

@unhammer关于仅对齐可见线的评论很棒。他们的代码正确缩进了:

(add-hook 'csv-mode-hook
          (lambda ()
            (define-key csv-mode-map (kbd "C-c C-M-a")
              (defun csv-align-visible (&optional arg)
                "Align visible fields"
                (interactive "P")
                (csv-align-fields nil (window-start) (window-end))
                )
              )
            )
          )