37

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

col1\tcol2\tcol3
very long column1\tcol2\tcol3

显示为

col1               col2  col3
very long column1  col2  col3

? (也许有一些颜色衬里分隔符)

4

4 回答 4

15

也许您可以告诉我们您已经找到并拒绝了什么?

如果您一直在搜索,那么您一定看过http://emacswiki.org/emacs/CsvMode吗?但是,您没有提及它,也没有说明为什么它不好。

SES(简单 Emacs 电子表格)可能是一种有用的方法:

C-hig (ses) RET

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

不过,这可能比你之前更麻烦,而且我不确定它对“巨大”文件的执行情况如何。

于 2012-05-16T11:34:06.683 回答
13

Try csv-mode,它至少在 Emacs 24 中有效。

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

请参阅Emacs 维基

于 2012-05-16T11:38:32.447 回答
2

正如@choroba 提到的,使用csv-mode. 具体回答你的问题:

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

    (setq csv-separators '("," "    "))
    
  • 使用csv-align-fields(default keybinding 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))
                )
              )
            )
          )
于 2019-05-03T14:48:32.940 回答
2

有一个 pretty-column.el,我多年前在 Group gnu.emacs.sources 中找到了它(它是在 1999 年添加的)。该组现在已被 Google 屏蔽。我刚刚在 Org 模式阻塞的 ~5000 行制表符分隔的文本文件上使用了 pretty-column.el (Org 模式在转换这样的文件时有 999 行的限制——出于这个原因)。在编辑中添加:这似乎现在称为 delim-col.el (请参阅此 Emacs Wiki 条目);作者是同一个人。

于 2021-02-03T13:41:08.510 回答