如何在 Emacs csv 模式中设置字段分隔符?

如何在 Emacs csv 模式中设置字段分隔符?

我可以在 Emacs 23 中为当前缓冲区设置字段分隔符吗?

答案1

当然可以——尽管默认情况下,您只能全局执行此操作。为此,请自定义变量csv-separatorsM-x customize-variable RET csv-separators RET)并将您选择的分隔符添加到列表中。(请参阅C-h v csv-separators RET/M-x describe-variable RET csv-separators RET以获取有关变量的文档,包括一些值得了解的注意事项,如果您要更改其值。)

如果您确实需要将更改仅应用于给定缓冲区,则可以尝试通过make-local-variable(例如M-: (make-local-variable 'csv-separators) RET)使变量成为缓冲区局部变量,然后直接设置当前缓冲区的值(例如M-: (setq csv-separators (append '(":") csv-separators)))。但请注意:我还没有尝试过这个,不知道它是否会起作用。

答案2

这扩展了已接受的答案。我本来会在那里发表评论,但需要超过 50 个代表才能做到这一点。我刚刚发现了这个,但这种make-local-variable方法对我来说不起作用。我找到了变量csv-separator-chars,它的文档说

Set by customizing ‘csv-separators’ -- do not set directly!

因此,使用customize-variableoncsv-separators对我来说是有效的,因为这也设置了,csv-separator-chars这似乎是对齐 CSV 时真正使用的。

答案3

接受的答案对我来说也不起作用:虽然检查csv-separators表明它的值是局部的,但似乎没有效果。

但是由于2022 年 5 月(我认为对应于 csv-mode-1.20)有一个专用函数:

Add CSV separator guessing functionality

Add two new commands: `csv-guess-set-separator' that automatically
guesses and sets the CSV separator of the current buffer, and
`csv-set-separator' for setting it manually.

`csv-guess-set-separator' can be useful to add to the mode hook to
have CSV mode guess and set the separator automatically when visiting
a buffer:

  (add-hook 'csv-mode-hook 'csv-guess-set-separator)

相关内容