提升文档编辑效率:列编辑技巧优化文档内容排版体验

4 min


一个混蛋给你发了一封用伪 Markdown 语法写的文档,里面有一个有序列表,但是英文句号和列表项目之间没有空格,导致这团玩意儿没法被正常渲染。现在请用最快的速度把遗漏空格的文本变成正确的 Markdown 格式。

遗漏空格的 Markdown 列表无法正常渲染

方法有很多,包括写一段正则表达式、使用通配符、打开 Vim 或者求助于万能的 Excel,但可能还有更简单、更干脆的方法:

列编辑,也称列选择(Column Selection)

提升文档编辑效率:列编辑技巧优化文档内容排版体验
在列编辑模式下批量添加空格

什么是列编辑

在事实上,列编辑属于程序员的私货,因而关于它的讨论,一般都是从某个具体编辑器谈起,比如 Sublime Text、Vim 或 VSCode,这一下子把不相关的用户拦在门外;即便是这些编辑器的用户,恐怕也只会在遇到某个非常细致的操作时才遇上列编辑,并且是作为一种 hack,而不是常用方法。我虽然不得不从代码编辑开始,但最终尝试将列编辑提升为通用方法。

Sublime Text 对列编辑(选择)的定义比较准确:选中一个矩形区域内的文本,并编辑它们。来看一个直观的对比:

  1. 普通模式下,选择文本是逐行进行;
  2. 列编辑中,则是按住 ‌⌥Option 键〔macOS〕,然后用光标拉出一个矩形选框,选中框内的文本。

几乎每个编辑器都支持列编辑(只是程度不同),包括 macOS 的自带文本编辑器,你可以现在将往里面丢一段文本,然后按住 ‌⌥Option 去选一下试试。

普通人的第一反应可能是绝对挺好玩,但稍微多几次就甩手不管:这又有什么用呢?答案是,凡举排列整齐的文本,就可以用列编辑降低操作量。

下面是几个简单的例子:

例子一:批量删除多余空格。
网上很多文章,都是用多个空格来代替缩进,导致你复制到本地后会在每一段开头都看见一串儿空行。也许你可以写一段通配符来移除它们,但简单的方法是在列编辑模式下选中开头的空行,然后一次性将其删除。

例子一:批量删除空格

例子二:删除文本前缀。
有时候,需要移除的文本并不在段落开头,而是夹在中间,此时正则表达式和通配符可能更难写,但列编辑仍然值得一试。从表格复制文字时,经常会有几列用不上的,有时候偏偏就是夹在中间那一列,此时就可以试试列编辑,把它们圈出来并删掉。

例子二:删除文本前缀

可见,虽然名为「列编辑」,其实这一操作的精髓实为跨行编辑,一次性在多行文本的固定位置执行操作。

以上的例子均为删除多余文本,因为不同编辑器对列编辑的支持程度参差不齐,删除是最简单而通用的。

下面,我们来看更高级的操作——很幸运。它们全部可以在编辑器的找到。

不同编辑器中的列编辑

根据选中文本之后的行为,列编辑下涉及的操作可以分为删除文本输入文本组合文本,而多数编辑器——包括我正在用于撰写本文的 iA Writer——只支持批量删除。如果你试着在一般的编辑器中打字或粘贴文本,通常也只能改动第一行,无法实现跨行、多行编辑的效果。

好在多数涉及代码的编辑器,都对列编辑青睐有加,有进一步的支持。下面的例子以 BBEdit 为主,这款有几十年的开发历史,核心功能均免费,而且比起 IDE(Integrated Development Environment,整合开发环境)来不那么 Geek,不懂代码的人也可以上手。

相比系统自带的文本编辑器,BBEdit 首先支持跨行输入

一般的编辑器,即便进入列编辑模式,也只能在第一行输入文本,而 BBEdit 则可以同时在每一行中插入文本——只可惜,暂时不能用中文输入法,不过列编辑本来就常用于插入数字或符号,问题估计不大。

比如,有几行文本,如果想把它们变成 Markdown 格式的无序列表,最简单的方法就是在 BBEdit 列编辑模式中批量添加符号:
先按住 ‌⌥Option,选中文本开头的位置,然后输入 ,BBEdit 即可在选中的行前面加上项目符号和空格,将其变为 Markdown 列表。

例子三:批量插入文本

除了跨行输入文本,BBEdit 还可以跨行组合文本。例言之,如果你选中了三行,而剪贴板里的文本也有三行,那么在列编辑模式下粘贴时,剪贴板中的每一行就会和选中文本中的每一行一一组合,就像在使用 Excel 表格一样。

这一性质可以用于创建简单的表格,而不需要真的开启 Excel 等厚重的工具。我会在下一节介绍一个具体例子。

另外,包括 BBEdit 在内,部分编辑器——主要有 Sublime Text、VSCode 以及人见人爱的 Obsidian——还能正确处理换行,如果某一段比较长、超出了一行,那么从第二行开始都不会被选中。

当处理比较长的列表项时,这样的细节会让人会心一笑。

Obsidian 可以跨行进行列编辑

快速复制中的表格

比较敏感的读者可能,列编辑是基于位置的,似乎可以用来处理表格。事实正是如此。本节我以 BBEdit 为例,展示如何利用列编辑,快速把图片中表格复制为文本。

图片转表格本身是一个比较重要的功能,Office Lens 和白描都将其作为主打项,但先撇开这些更擅长扫描的软件不谈,眼下的问题是:已经有一张表格的图片,怎样将表格数据从中快速复制出来?

有人可能会搬出自己如数家珍的 工具,而熟悉 Live Text 的人可能会直接打开图片尝试复制文本。但效果往往和你想象得不同:多数 OCR 工具不会给你一份表格,而是每一格就换一行,导致文本都不在同一行,效果很差。

直接从图片中复制的文本存在换行问题

列编辑固然不是万金油,但面对数据格式整齐的表格——最重要的是,字符长度相当,这样才能正确识别「列」——它可以一试身手。

接着刚刚提取的文本,很容易发现,其实文本顺序没有被完全打乱,只需要将图中汉字部分的每一行和数字部分的对应行拼起来,就可以还原表格数据。会用 Excel 的朋友可能已经跃跃欲试了,但先别急:试一试列编辑。

  1. 复制汉字部分,确保汉字部分的行数和数字部分一样;
  2. 按住 ‌⌥Option 键,选中数字部分每一行的开头或结尾;
  3. 按下 ‌⌘Command-V 粘贴汉字部分,因为当前是列编辑模式,BBEdit 会把汉字的每一行和数字行组合起来。
在 BBEdit 中跨行组合文本

识别表格是一个比较偏的场景,短期内大概不会普及。不过,我们可以先用截图 OCR 功能准确按列识别数据,再跑到列编辑模式下将数据组合起来。本例子只涉及两列数据,实际上不限长度。

选择 局部的文字

列编辑的核心其实是「列选择」,因此不仅在编辑器中可以用,在多数阅读器乃至 Quick Look 里也有用处。

比如说,那些双栏或者满是豆腐块的 PDF,平时选择文字时很可能把边上的文字也选中,此时就可以试试在列编辑模式下选择文字,精确选中一个矩形内的文本,不会把附近的无关文字选上。

例子四:选择 PDF 局部文字

类似的也能够用于 Quick Look。最近几个版本的 macOS 默认启用 Live Text,可以自动 OCR 识别图中的文字,不过遇上双栏文本或表格时效果就不好,往往会把周边区域的文字识别成同一行;而列编辑也可以解决这个问题,和在 PDF 中一样,按住 ⌥Option 就可以选择一个矩形区域的文字,不用担心 OCR 识别不到位。

小结

列编辑本是代码编辑器的专属功能,常用于批量插入缩进符号等机械操作,而不同编辑器对其支持程度又不一,因此它很少被作为一种通用方法。但毕竟多数编辑器多多少少都有列编辑模式,而且最强大的那一批工具——BBEdit、VSCode 和 Obsidian 等等——通常又是免费的,因而在事实上,列编辑完全可以作为一项通用技能。

下次在你打算人工操作或者写一段正则表达式之前,不妨先按住 ‌⌥Option,看看列编辑能不能更快地解决问题。说不定就有惊喜。


  1. 难得的例外是输入空格,也就是说,文章开头给 Markdown 列表批量添加空格的操作,在绝大多数编辑器中都可以完成。
  2. 这还是比较乐观的情况,如果两列靠得比较近,多数 OCR 工具还会把两列当成一列。
  3. 据我所知,本来就有很多人用 VSCode 写 Markdown,或者用 BBEdit 写博客,因此无论这些编辑器最初是不是为写代码而设计,它们本身都被当作写作工具在使用了。

Like it? Share with your friends!

0
Anonymous

Choose A Format
Story
Formatted Text with Embeds and Visuals
List
The Classic Internet Listicles
Countdown
The Classic Internet Countdowns
Open List
Submit your own item and vote up for the best submission
Ranked List
Upvote or downvote to decide the best list item
Video
Youtube and Vimeo Embeds