Vim 有简洁的表格插件,可让您快速对齐某些文本。我经常使用它来沿着某个字符对齐代码块(主要是像=
和 这样的=>
)。但它在临时表格方面也做得很好。给定类似
|Name|Rank|No.|
|Stan Ridgway|Private First Class|8797|
|John Rambo|Private|889897|
|George S. Patton|General|0879797|
很容易得到这样的结果:
| Name | Rank | No. |
| Stan Ridgway | Private First Class | 8797 |
| John Rambo | Private | 889897 |
| George S. Patton | General | 0879797 |
选择它(或者简单地将光标放在第一行),然后执行:Tabularize /|
。
由于我目前正在尝试将 Emacs 和 Vi 进行交叉融合,从双方那里窃取经验,寻找匹配的插件等,因此我想在 Emacs 中做同样的事情。现在,对于前面提到的=
/=>
内容,align
它运行良好,甚至可以自动完成大多数事情。
至于更复杂的东西,还有align-regexp
。我敢猜测,这可能只是获取正确的正则表达式来提供给它的问题(可能是在C-u
带前缀的扩展版本中)。
对这个方向或其他功能/包有什么建议吗?
答案1
输入M-x orgtbl-mode
,然后C-c C-c
| Name | Rank | No. |
| Stan Ridgway | Private First Class | 8797 |
| John Rambo | Private | 889897 |
| George S. Patton | General | 0879797 |
答案2
C-u M-x align-regexp \(\s-*\)| RET RET 0 RET y
关于正则表达式: \(\s-*\)
默认情况下存在,因此您只需输入|
关于0
:它意味着没有额外的尾随空格,即:|longest-field-in-column|
引自对齐命令
Repeating align-regexp
Arguably, for daily use, it’s better to define some adhoc align command, e.g.
(defun align-repeat (start end regexp)
"Repeat alignment with respect to
the given regular expression."
(interactive "r\nsAlign regexp: ")
(align-regexp start end
(concat "\\(\\s-*\\)" regexp) 1 1 t))