任何大纲、清单、列表软件——不管你叫它什么——都有一个让人直呼痛快的功能:移动行(line)。比如在 Taskpaper 里,按下 ⌃Control-⌘Command-上箭头
,就能把一行文本往上移,很适合用来写草稿,随时调整思路。因其轻快方便,甚至有人写任何东西都用大纲。
大纲软件毕竟以行为单位,上下移动并不奇怪1;但是同样的事情在普通文本编辑器中却不简单,如果我想把一段文本往上移一段,通常的选择就是全选它,剪切下来,然后在上一行上面空出一行,再把刚刚剪下来的文本粘上去。这一度导致我在大纲软件(先后是 Taskpaper、OmniOutliner 和 Bike)中写草稿,尤其是本来就分好几个板块的会员文章,通常都放在大纲软件中调整顺序。
不过,仔细考察选择和移动文本行的操作后,我用 Keyboard Maestro 中模拟了移动文本行的功能,再遇上只需微调行顺序的情况,就不必切换到专门的大纲软件。
>>Keyboard Maestro Macros 下载<<
使用简介
移动文本行的动作由一对 Macro 组成,一个负责往上移动,一个负责相反方向,使用方法非常简单,几乎任何能够输入文本的地方都可以用:
- 下载安装,启用(Enable)Macro 及其所在的 Group;
- 把光标移到任何一段想要移动的文字上,不用在意具体位置;
- 如果要上移一段,就按快捷键
⌃Control-⌘Command-上箭头
; - 如果要下移一段,则按快捷键
⌃Control-⌘Command-下箭头
,两个快捷键都直接取自 Taskpaper 等常见的大纲软件,以求操作统一。2
打草稿的时候,我们可能是先不管三七二十一先写下素材,稍后才调整顺序;一旦有了省力的文本行移动工具,调整素材顺序就像在桌面上摆弄积木,能够轻松不少。
注意,本文的 Macro 和自动补全功能不兼容。比如 Markdown 中的有序列表和 Word 中带序号的段落,由于软件本身会在换行后补全符号或序号,很可能打乱格式。说到底,Keyboard Maestro 只是模拟大纲,和真正的大纲仍有所差距。思路剖析
细看前面的动图,不难发现,Keyboard Maestro 并不能像真正的大纲软件那样无痕操作,它只是模拟了文章开头所提及的键鼠操作,如果我录下来的是视频而不是动图的话,相信您可以在慢动作中看出端倪。好在模拟键鼠操作也足够快,并不耽误使用。
乍听上去,模拟键鼠操作似乎没有什么技术含量,然而如何不多不少选中一整行文本,却是一个技术活。选中整行有三种思路:
- 借助软件本身,不过既然已经走到 Keyboard Maestro 这一步,就说明这条道走不通了;
- 模拟鼠标点击,和在 iOS 点三下段落一样,在 macOS 上点三下鼠标也能选中当前整段文本,但 Keyboard Maestro 暂时不能识别光标所在的位置,很难精确点击当前的段落;
- 最后一种方法则是全键盘操作。
接下来就要引出两个文本处理快捷键——程序员可能比较熟——正是它们,帮助 Keyboard Maestro 精确选中当前光标所处的整段文字。第一个快捷键是 ⌃Control-A
,它表示把光标移动到段落的开头;第二个则是 ⇧Shift-⌃Control-E
3,它表示从当前位置一直开始选中文本,一直选到段落末尾。配合起来,刚好就能选中一整段文字,一个不多、一点不少。
这两个快捷键都非常古老,可以追溯到鼠标尚不流行的年代,但至今仍然时常出现。常常写代码的人估计经常用到 ⌃Control-A
——及其姊妹快捷键 ⌃Control-E
,用于移动光标到一段的末尾;而配合自动化工具,这些古老的操作方式还可以再抽新芽。
打通关键一环之后,剩下的工作就是仔细观察手动操作的规律,再将其记录下来、固定成 Keyboard Maestro 中的动作。
🛍 我撰写的付费栏目《Keyboard Maestro 进阶指引》正在 UNTAG 售卖,详解 Keyboard Maestro Macro 高级设计思路,欢迎选购:付费内容链接
- Drafts 也可以做到,因为它自带了相关变量,可以按行处理文本;还有 iA Writer 也可以直接移动行。或许自带行移动功能,是优秀文本编辑器的一个指标。当然,有些人可能会提到 Vim,但不是所有人都在用 Vim,更不是所有人除了 Vim 什么都不用。 ↩
- 我用于显示快捷键的软件是 KeyCastr,它会把 Keyboard Maestro 模拟的按键操作也录进去,因此在下面的图片中用 KeyCastr 显示快捷键毫无意义,遂不录入。 ↩
- 在 macOS 中,
⇧Shift
常常和连续选择相关的操作联系在一起。如后文所述,⌃Control-E
表示移动光标到段末,加上⇧Shift
就变成了选中文本、直至段末。另外,在 Finder 中也可以按住⇧Shift
再点击两个文件,就可以选中它们之间的整串文件。 ↩