您可以编写自己的 Emacs Lisp 函数,该函数将转换两个 sexp 之间的所有白字符(不仅是空格),并在当前活动区域中将它们替换为 ,。
(defun my/convert-region ()
(interactive)
(save-window-excursion
(narrow-to-region (region-beginning) (region-end))
(goto-char (point-min))
(forward-sexp)
(while (< (point) (buffer-end 1))
(let ((beg (point)))
(if (= (point) (line-end-position))
(forward-char)
(progn
(forward-sexp)
(backward-word)
(delete-region beg (point)))
(insert ",")))
(forward-sexp))
(goto-char (point-min))
(widen)))
我在这样的活动区域上检查了这个:
Items Quantity Amount
"Item A" 423 63
"Item B and C" 27 169
"Item D " 6 199
运行M-x my/convert-region后改为:
Items,Quantity,Amount
"Item A",423,63
"Item B and C",27,169
"Item D ",6,199
您可以将此功能添加到您的配置文件中并将其绑定到一些键。
如果您希望此函数将此区域转换为同一函数中的组织表,只需添加 org-table-convert-region 调用即可。
(defun my/convert-region-to-org-table ()
(interactive)
(save-window-excursion
(narrow-to-region (region-beginning) (region-end))
(goto-char (point-min))
(forward-sexp)
(while (< (point) (buffer-end 1))
(let ((beg (point)))
(if (= (point) (line-end-position))
(forward-char)
(progn
(forward-sexp)
(backward-word)
(delete-region beg (point)))
(insert ",")))
(forward-sexp))
(org-table-convert-region (point-min) (point-max) '(4))
(goto-char (point-min))
(widen)))
对于相同的输入:
Items Quantity Amount
"Item A" 423 63
"Item B and C" 27 169
"Item D " 6 199
我得到了以下结果:
| Items | Quantity | Amount |
| Item A | 423 | 63 |
| Item B and C | 27 | 169 |
| Item D | 6 | 199 |
不幸的是,在转换过程中,org-mode 正在删除引号。
(defun my/convert-region-to-org-table-with-header ()
(interactive)
(save-window-excursion
(narrow-to-region (region-beginning) (region-end))
(goto-char (point-min))
(forward-sexp)
(while (< (point) (buffer-end 1))
(let ((beg (point)))
(if (= (point) (line-end-position))
(forward-char)
(progn
(forward-sexp)
(backward-word)
(delete-region beg (point)))
(insert ",")))
(forward-sexp))
(org-table-convert-region (point-min) (point-max) '(4))
(goto-char (point-min))
(org-ctrl-c-minus)
(widen)))
那么输出将如下所示:
| Items | Quantity | Amount |
|--------------+----------+--------|
| Item A | 423 | 63 |
| Item B and C | 27 | 169 |
| Item D | 6 | 199 |
如果有人感兴趣,我可以解释代码的工作原理。这个答案已经很长了,所以当我不确定它是否对任何人有用时,我现在不会这样做。
希望对您有所帮助。