
欢迎大家留言或者邮件 [email protected] 分享你喜欢的效率工具或者效率技巧。
在 macOS 效率系i列 01: 窗口管理 | 枫言枫语 我们简单介绍过 Hammerspoon 这个 App,它可以用来做窗口管理,且已经有许多人编写了自己的窗口管理脚本,只需下载使用即可。
当时我们亦提过,这个东西是一个自动化工具,它能做的事情非常多,不仅仅用于窗口管理。
本系列此前的文章已经介绍过,使用 Alfred 之类的效率工具可以节省大量重复的机械劳动,但是每个工具的设计都是有针对性的。Alfred 也有它不太擅长的场景,比如说它的 UI 完全集中在输入框内,并不适合比较复杂的交互和内容展示。虽然它也有 iTunes Mini Player 这样的 UI:

但是我觉得并不好用。本着“能用机器做的事情就不要自己动手”的想法,今天我们来聊聊如何利用 macOS 上的自动化工具帮助我们自动完成一些相对复杂的工作。

和我们在 macOS 效率系列 03: 全键盘操作的快捷入口 提到的 Spotlight Feature 一样,同在 2004 年的 WWDC 上由乔布斯首次介绍了 Automator 这个 App(
从 1:24:23 开始)。我接触 macOS(OS X) 比较晚,第一次使用的是 OS X 10.6 Snow Leopard。Automator 已经存在好几年了,我第一次使用 Automator 是用来压缩设计师给我的视觉稿。当时 iPhone 4 发布大约一年左右,大家第一次接触 Retina Display,图片资源也需要用 @2x 来区分高清版本。
设计师给我的视觉稿是 2x 大小,我嫌自己把每一张图都缩小太麻烦,即便全程使用快捷键也依然是大量的重复工作。所以用上 Automator 写了一个 Workflow,作为一个Service(现在叫做 Quick Actions 了) 存在 Finder 的 Services 菜单里。以后设计师给我发图我只要全选然后跑一遍 Service 就可以把 2x 图缩成 1x 图并且自带后缀重命名了。
年代久远已经找不到当年写的自动化 Service 了,大概是类似这样的感觉:

可视化编程是 Automator 最大的特点,无需写代码背景,只要使用鼠标拖拽点击就可以操作 Finder, Photos 等多个系统 App。这个来自 Apple Script 团队的作品,把自 1993 年以来随 System 7 发布的 Apple Script 又向前推了一步。
创建好的 Service 和 Workflow 都可以用文件的形式进行分享。不过,还有比 Automator 更好用的可视化编程 App。

官网: https://www.keyboardmaestro.com/main/
最早于 2002 年由开发者 Michael Kamprath 发布的一款可视化编程的自动化工具,比 Automator 出现还要早。2004 年被位于西澳珀斯(Perth)的软件公司 Stairways Software 收购了,并在此基础上不断优化和改进。目前最新的版本是 2018 年 8 月发布的 8.2.4,相信今年 macOS Catalina 发布后这款 App 还有不少辅助功能限制授权的 API 要进行更新。

相比 Automator,Keyboard Maestro 支持更多的系统事件通知,比如通过 WiFi SSID 变更可以驱动一个 Marcro 自动执行。
Keyboard Maestro 也支持把操作入口挂到 Menubar 上自己 icon 的下拉菜单里。

我曾经玩过一阵子 Auto Window Tiling 的 Serivce,叫做 KWM,这是它的项目地址: koekeishiya/kwm: Tiling window manager with focus follows mouse for OSX。因为这个东西是完全命令行操作的,所以当时我在 Keyboard Maestro 的菜单上挂了 KWM 的重启/启动/关闭的快速入口。

它的做法简单粗暴,就是自动把桌面上所有的窗口强行布局成配置文件里选中的 layout。支持通过鼠标加上快捷键来交换窗口位置。但是后来觉得这种强制的做法不太适合我就没再使用了。
如果你没有任何编程基础,也完全不想动脑思考逻辑,那么你还可以使用 Keyboard Maestro 的录制功能。通过你的 UI 动作自动帮你生成对应的 Macro。
创建一个新的 Macro,点击右下角的 Record 按钮即可开始录制:

Keyboard Maestro 支持的触发器(Triggers)和动作(Actions)很多,利用好这些工具可以组合出非常有意思的东西来。
你甚至可以用触发器自动收集完所需信息之后,打开一个浮窗加载网页,把信息通过网页 UI 的方式展示出来:

我们还可以把 Alfred 和 Keyboard Maestro 结合起来用,就看你的想象力了。

官网: http://www.hammerspoon.org/
从官网的记录来看,Hammerspoon 最早的版本是 2014 年发布的 0.9.4,自那以后 Hammerspoon 一直是 0.9.x 的状态在更新。这个开源项目在 Github 上有超过 5k 个 star,发布了五年依然没有宣布 1.0。
项目的主力开发者之一 @cmsj 今年 5 月也在 issue 中讨论这个 App 差不多该发布 1.0 然后往 2.0 前进了。
和上文介绍的可视化编程 App 不同,Hammerspoon 是硬核的真·编程。你需要在用户侧编写 Lua 脚本,这个脚本将跑在 Hammerspoon 提供的 Lua 虚拟机上,通过项目提供的 luaskin 接口,和应用层进行通信,从而只用 Lua 脚本就能使用系统提供的各种能力,包括公开的和私有的 API。
假如读者朋友已经有一定的编程经验但是不熟悉 lua 语言,这里推荐使用 Learn X in Y minutes 来快速上手(亦有中文版: X分钟速成Y)。Lua 相比于其他特性丰富的语言来说要简单得多,很容易学,而且我们在 Hammerspoon 最主要的目的也只是实现自动化替代机械劳动而已,并不需要多么高深的 Lua 功力。

Hammerspoon 的 UI 非常简单,只有一个显示 Log 和可以进行全局设置的窗口,其他所有的配置都放在 ~/.hammerspoon 目录下。
➜ .hammerspoon git:(dev) ls
README.md Spoons hs init.lua
init.lua 是 App 启动后会读取的初始化脚本,也是我们的主战场。通过 require 关键字我们可以引入官方提供的能力或者自己下载的第三方库:
local tiling = require "hs.tiling"
local hotkey = require "hs.hotkey"
local mash = {"ctrl", "alt"}
hotkey.bind(mash, "h", function() tiling.cycleLayout() end)
tiling.set('layouts', {
'gp-vertical', 'columns'
})
上述代码实现了通过快捷键 ctrl+alt+h 对当前 Workspace 下所有窗口进行重排布局,用到的 hs.tiling 来自 https://github.com/dsanson/hs.tiling, hs.hotkey 则是 Hammerspoon 自带的能力。
Hammerspoon 官方文档有所有 API 的说明。基本上 macOS 自带的能力 Hammerspoon 都有覆盖,包括 WiFi 触发器,蓝牙触发器,自带 SQLite,控制 Spotify,控制 iTunes,自定义弹窗,alert,notification 等等。
如果官方提供的能力不能满足你的需求,你还可以自己把 Github 上的代码 clone 下来,自己实现需要的 API。
这里还有个用户贡献的参考配置列表:https://github.com/Hammerspoon/hammerspoon/wiki/Sample-Configurations。下载覆盖后即插即用。
首先是用于窗口管理, ctrl+alt+left/right来实现水平三分屏(大屏幕用),ctrl+cmd+left/right 实现两分屏(MacBook 用)。ctrl+alt+h 实现多列自动布局。
然后是 WiFi Watcher,发现我连上了公司的 WiFi 就自动帮我把 MacBook 静音。
加了一个快捷键自动 Reload Config 方便调试。
当切换到 Finder App 的时候自动激活属于 Finder 的所有窗口,不然默认情况下只会激活最后一个,如果开很多就比较难找到我要的那一个。
目前我只用了这一些,但是 Hammerspoon 的可扩展性非常强,基于它可以实现很多有意思的东西。如果读者朋友具备写代码的能力的话,用脚本实现是比可视化编程更灵活更高效的做法。

欢迎大家留言或者邮件 [email protected] 分享你喜欢的效率工具或者效率技巧。
不管使用哪一个 App 或者操作系统,掌握快捷键永远提高效率最简单的方法。就像它的名字"shortcuts"一样,它的设计就是为了让你节省时间的捷径。
macOS 系统自带许多有用的快捷键,有全局的也有各个 App 自己的。Mac App 的特色是 Menubar 上的菜单如果是重要操作一般都会带有匹配的快捷键,而且实现起来非常简单。所以 macOS 生态里的快捷键非常统一。用户只需要学习一套快捷键操作,就可以复制到其他 App 里面。
大部分使用 macOS 的读者朋友应该都习惯了相当一部的快捷键,但可能还有些有用的快捷键没有用到。我在写作此文的时候也发现有些快捷键之前都不知道,整理的过程也是我学习的过程。
本文整理 macOS 几个大类的快捷键,希望能对读者朋友们有所帮助。更多主流 App 快捷键大家随时可以通过 Google 关键字: App Name + Shortcuts 或者是 App Name + Cheatsheat 来找到。
系统自带的快捷键有一部分可以从 System Preferences -> Keyboard -> Shortcuts 里面直接找到:

这里我们介绍几个比较常用到的全局快捷键:
| Key | Action |
|---|---|
| cmd + tab | 在已经打开的 App 之间进行切换,按住 shift 可以反向选择 |
| ctrl + left/right | 左右切换 Workspace |
| ctrl + up | 显示 Mission Control |
| ctrl + down | 显示当前 App 所有 Windows |
| option + cmd + l | 在 Finder 打开 Downloads 目录 |
| option + cmd + d | 显示/隐藏 Dock |
| option + cmd + esc | 打开 Force Quit App 列表 |
| shift + option + cmd + esc | 直接 Force Quit 当前 App |
即使有上一篇文章介绍的 Alfred我也经常使用这些快捷键,比键入关键字搜索要快。当我同时需要打开多个应用或者多个窗口时也配合第一篇关于窗口管理的工具进行多窗口排布,可以大大提高工作效率。
| Key | Action |
|---|---|
| cmd + ` | 在当前 App 的多个窗口直接切换 |
| cmd + m | 最小化当前窗口 |
| cmd + h | 隐藏当前 App |
| cmd + opt + h | 隐藏除了当前 App 以外的所有窗口 |
| cmd + ctrl + f | 进入/退出最大化 |
| cmd + w | 关掉当前窗口或者当前 Tab |
| cmd + opt + w | 关掉当前 App 的所有窗口 |
对于开发者或者文字工作者,每天都在敲键盘打开,能够不用鼠标就完成选择文本、替换文本之类的操作是最好的。以下是文本编辑常用的快捷键:
| Key | Action |
|---|---|
| ctrl + a | 跳到当前行的最前面 |
| ctrl + e | 跳到当前行的最后面 |
| cmd + left/right | 跳转到当前行的开头/结尾 |
| cmd + up/down | 跳转到当前文档的最顶部或最底部 |
| cmd + del | 删掉当前光标到行首之间的所有文本 |
| shift + up/down/left/right | 按住 shift 和上下左右可以选中文本 |
| 鼠标点击某处,再按住 shift 点击另外一处 | 可以直接选中两次点击之间的所有文本 |
| alt + left/right | 向左/右跳一个单词 |
| 双击鼠标 | 选中最靠近的一个单词 |
| 三击鼠标 | 选中当前行 |
当我们按下 shift 之后我们就可以通过上下左右方向键来选择文本。这时候按住 cmd + 方向键的效果就带上了选择效果。比如 cmd + left 本来是跳转到光标所在行的最前面,加上了 shift 就自带了选中效果。
所以如果你想选择当前光标所在的位置到文本最底部,按住 shift + cmd + down 就可以了,非常方便。
这里的文本编辑快捷键是针对通用的文本编辑器而言的,喜欢 Vim/Emacs 的朋友也可以安装对应的插件,实现更加高效的操作。
比如在 Vim 里面,跳转到文档最顶部只需键入 gg 即可。选中当前光标到最顶部则只需 vgg,理论上是要更加省时间的做法。只是学习曲线要高得多,如非码农,一般也用不上。
| Key | Action |
|---|---|
| shift + cmd + 3 | 截当前全屏并存文件到桌面 |
| ctrl + shift + cmd + 3 | 截当前全屏并保存到剪贴板 |
| shift + cmd + 4 | 按下后拖拽鼠标选择截图区域,或者按下 space 直接截取当前窗口并保存到文件 |
| ctrl + shift + cmd + 4 | 按下后拖拽鼠标选择截图区域,或者按下 space 直接截取当前窗口并保存到剪贴板 |
系统自带的截图已经非常之好用,但是藏得比较深。绝大多数人都使用第三方 App 来截图我觉得也无可厚非。
我自己一般只用系统截图,只有需要对图片进行标注时会使用第三方 App。一般用: Annotate - Capture and Share on the Mac App Store
![]()
它的快捷键和系统的一致,我无需再学一套快捷键,截图后会弹出主窗口用于编辑。
| Key | Action |
|---|---|
| cmd + , | 打开当前 App 的 Preferences 窗口 |
| cmd + w | 关闭当前窗口 |
| cmd + 1/2/3 | 选中当前第 n 个窗口 |
| ctrl + tab | 切换到下一个窗口 |
| shift + ctrl + tab | 切换到上一个窗口 |
| cmd + l | 在 Safari/Chrome 中直接选中地址栏 |
| cmd + r | 在 Safari/Chrome 中刷新当前页 |
| cmd + f | 大部分支持搜索的 App 的搜索快捷键 |
| cmd + opt + f | VSCode/Sublime 之类的 App 可以支持完整 Workspace 搜索 |
| cmd + t | 大部分多 Tab 应用支持以此创建新 Tab |
| cmd + shift + [ | 大部分多 Tab 应用支持以此往左切换 tab |
| cmd + shift + [ | 大部分多 Tab 应用支持以此往右切换 tab |
| cmd + shift + n | 在 Finder 中创建新文件夹 |
Apple 官方有一份非常详尽的快捷键列表,有兴趣的朋友可以到这里查看: Mac keyboard shortcuts - Apple Support
开发一个带 UI 的 Mac App 一般都会有一个 MainMenu 的 Storyboard,这个东西在创建工程的时候由 Xcode 生成,自带大量官方的操作和快捷键。开发者开发 Mac App 的时候只需往菜单上增加快捷键和对应的 Action 就能实现 App 内快捷键了,非常方便。有一个叫做 CheatSheet 的 App 就是遍历当前 App 的所有 menu 然后把得到的快捷键列出来给你。

我们即使不用这个 App,自己点一下菜单也能知道大部分的快捷键。对于常用的 App 和操作,我觉得花几秒钟时间学习一下是非常划算的投资。
至于主流 App,通常只需 Google App Name + Shortcuts 或者是 App Name + Cheatsheat 就可以得到别人整理好的列表。
有些比较重的 Web App 比如 Trello 也是自带了大量快捷键。但是大家的快捷键都不是瞎定的,比如 Trello 的许多操作都和 Vim 相仿(通过按下 ? 可以看到 Trello 的全部快捷键)。所以只要学会了一套快捷键逻辑,基本上在多数 App 都是可以复刻的,这也是 Mac 生态非常优秀的地方。

欢迎大家留言或者邮件 [email protected] 分享你喜欢的效率工具或者效率技巧。
macOS 系统提供了 Dock, LaunchPad 这样的工具让用户可以方便地打开各种 App。

同时 macOS 系统还带了一个叫做 Spotlight 的工具,大概长这个样子:

在
上乔帮主第一次介绍了 Spotlight 搜索,入口在 Finder 的右上角,主打是超快的全局文件、邮件、通讯录等数据的搜索。并随着第二年(2005)的 OS X Tiger(10.4) 发布。
如果读者朋友正在使用最近版本的 macOS(比如 macOS Mojave 10.14),那么 Spotlight 已经足够好用了,可以作为快捷计算器,可以快速搜索整台 Mac 上的任意文件。也可以直接用于 Google Search,只需在 Spotlight 上输入需要搜索的词:

然后按下 cmd+B,就会直接在你的默认浏览器里打开 Google 并进行搜索。
l
对于每日工作需要双手打字的开发者或文字工作者来说,让其中一只手离开键盘去抓住鼠标,找到指针在哪里,然后定位到目标位置按下左键,最后在回到键盘上。这个过程是非常浪费时间的,做一次两次无所谓,但是当我的主要工作都是双手打字的时候,鼠标就成了一种分心和累赘。
即使是更多依赖鼠标的设计师们,常用的 Photoshop,Sketch 等多个主流设计 App,也是尽量让快捷键能够被一手完成,不需要让另一只手离开鼠标过来辅助。
所以让双手尽量保持在应有的位置是高效的秘诀。不管是文字工作者还是开发者,Google 是每天都要进行不下数百次的操作。能够双手不离开键盘完成无疑是效率的保证。
Spotlight 在最近几次 macOS 的更新中已经变得越来越好用,那么还有没有比他更好用的全键盘操作工具呢?
Spotlight 从 OS X 10.4 发布到今天的变化明显受到来自 macOS 生态中许多优秀 App 的影响。
Quicksilver 就是比较早做快捷入口的 App 之一。
默认使用 ctrl+space 呼出,输入任意关键字即可进行全局搜索:

同时它还支持多种系统事件 Triggers,支持 Plugins:

同时它也在 Github 上开源。不过该项目已经远不如当年活跃,目前最主流的全键盘输入/输入工具是——Alfred。

Alfred App 本身免费,如果想用它的 Powerpack 则需要额外购买 License。免费版的 Alfred 已经支持许多实用的功能。首先全局搜索应用、文件、日历等信息是基本功能无需赘述。这里介绍几个非常实用的功能。

系统剪贴板 cmd+c/cmd+v 的操作现在已经成为所有用户的基础技能。但是默认情况下剪贴板只会保留最后一次复制的结果,当我需要复制多个数据,或者记得好像五分钟前复制了一个东西但是已经没了的时候,剪贴板历史记录非常有用。
按下默认快捷键 option+cmd+c,Alfred 会显示你的剪贴板历史记录。支持图片,文本,和文件列表。你可以在设置里面选择保留时长,也可以主动清理缓存结果。
对于经常需要回过头去重新复制一遍的情况,有一个完整的列表帮助我们节省了大量的时间,可以说是不可或缺的一个能力。
如果你不使用 Alfred,有些其他的 App 也实现了同样的功能。比如: Paste - The new way to copy and paste on Mac and iOS

除了保留历史记录之外 Paste 还自带一个 Universal Clipboard,可以在 iOS 上同步 Mac 上复制的东西。不过我个人连系统自带的 Universal Clipboard 都不怎么用,所以只用 Alfred 就足够了。

Alfred 支持快速使用系统命令,比如关机、重启、清空回收站、启动屏保。
我个人最常用的是输入 em 两个字母之后自动匹配第一个选择,清空垃圾桶。

这里介绍一个小技巧,对于在开放式办公室工作的读者朋友可能有点用。平时我们用着自己的 Mac 工作时很多内容是相对敏感的,如果这时候想起身去个洗手间,有的人可能会选择 Lock 一下屏幕,回来后再密码或者指纹解锁,继续工作。
我一般选择打开屏幕保护程序,用的是 IG 网红壁纸 fliqlo。

那密码保护怎么办?在 System Preferences -> Security & Privacy 里面我们是可以设置屏保和 Sleep 之后多久要求输入密码的。这里我设置为 immediately。

Alfred 可以进行非常快速的 Google 搜索。Alfred 的绝大部分操作都是进行命令匹配,类似我们在终端命令行的使用体验。但是通常情况下我们要放进 Google 搜索的内容都不会 Match 到命令,这时候就会触发 Alfred 的默认行为:Search。

你可以在 Preferences 中设置默认的搜索引擎,或者进行添加、删除、修改等操作。如果真遇到我的搜索关键词和命令重复了,我才会在前面加上关键字,比如:
google shutdown
我们每天都要进行成百上千次的 Google 搜索,能够把这个过程的时间节省一点,累积起来还是比较客观的。
Alfred 还支持计算器,也是非常有用的功能,简单计算直接快捷键呼出然后就得到结果了。

Alfred 也支持查词典,用的是系统的词典 App。

不过词典这个东西好不好用得看词典本身,我比较常用的而是欧陆词典

词库比较全,支持结果的网络 wiki 搜搜,支持在 Menubar 上使用全局快捷键快速查找,非常方便。
以上 Alfred 自带的 Features 已经让这个工具足够应付许多场景了,但是它真正好用的地方还在于丰富的插件库——Workflows。
我比较常用的 workflow 是:

直接在 Alfred 里搜索并杀死某个进程,比起 option+cmd+esc,我比较喜欢这种方式。
只是把屏幕关闭,但是不进入 Sleep 状态,保持网络连接和各种 App 的后台活动。通过快捷键触发,在我不想屏保的时候我会选择用这个。
输入 fi 或者 if 可以在 iTerm 中打开 Finder 当前文件夹,或者在 Finder 中打开 iTerm 当前文件夹。
Alfred 的生态很好,搜索 Alfred Workflows 你可以找到许多非常有用的东西。
Powerpack 分为 Single 和 Mega 两种(以前还有 Family),如果你用得多的话我建议买 Mega,只要升级两次就赚回来了。
Alfred 是目前最流行好用的效率工具之一,但总有一天会有比它更好用的东西出现。这也是很多人鄙视写工具介绍类的文章的原因。
“macOS 效率系列”也不打算作为一个“介绍”来写,而是希望之前没有想过抛弃“重复机械劳动”这件事情的朋友们如果看到可以有一些思维方式的启发。
工具是为人服务的,人不会因为用了什么工具而变得更加高级或者更加优越。所以如今到处存在的各种“鄙视链”我们当做段子看看就好,拿它当真就非常可笑了。
介绍 Alfred 和其他的效率工具是有意义的。以前公司有一段时间实行内外网分离,所有的员工每天都需要进行多次内外网切换的操作来实现无阻碍查资料和拉取、提交代码这些事情。
我们当然可以通过鼠标点击右上角 WiFi 按钮,从列表中找到需要的 SSID,单击,等待网络连接成功,然后再去做自己该做的事情。
但是这样的事情做多几次之后就应该要有一种思维:我不想做重复机械劳动。
当时有一小部分同事(当然也包括我自己)使用 Alfred 或者直接用 Apple Script 来完成这件事情,只需要非常简单的快捷键触发,网络就切换好了。
但是从绝对人数来看,这样的人还是占了非常非常少的比例。这是非常正常的,但是我也相信这 90% 手动切换网络的人里面也有相当一部分人不知道有更快捷的方式。一旦他们知道他们也会使用更高效的方法。
所以科普类的文章,介绍效率工具的文章我一直觉得是非常有用的,并不是每一个人都可以只看接口和文档就知道如何使用一个足够复杂的工具,更不用说连这个工具都没听说过的人了。
macOS 生态中有非常多实用的效率工具,也非常容易通过搜索找到。本文只是总结一二,也并不一定适合所有人,但是依然希望能对读者朋友们有一点点的帮助,那么这个系列的目的就达到了。

欢迎大家留言或者邮件 [email protected] 分享你喜欢的效率工具或者效率技巧。
光阴荏苒,日月如梭。
如何把有限的时间和精力用在有意义的事情上是人类无法逃避的问题。作为 macOS daily user,高效用好 macOS 系统及其生态中的各种工具可以让我们少浪费一些生命在无意义的重复劳动中。
关于 macOS 的效率工具网络上已经有非常多的文章可供参考,本系列不过总结一二,希望能对读者有所帮助。

终端(computer terminal)是一个历史遗留下来的名词,早期的终端机大概长这样。这个不是个人电脑,只是一台显示器,接了一个键盘(DEC VT100)。背后有一台巨大的主机,对接很多台终端,这样每个终端就是一个输入输出设备。
今天大家都在用个人电脑(PC),普通用户基本不会遇到多终端共享同一个主机的情况。但也并不是完全没有终端,比如车站的刷卡机就是一台终端机。

所以现在各种类 Unix 系统——比如 Linux 的各种发行版,和基于 FreeBSD 的 macOS——都在 UI 层虚拟了一个终端。
当你打开虚拟终端的时候,和古老的物理终端一样,会运行一个最基本的人机交互程序,称为 Shell。
在 Shell 中输入一行命令,它就解释执行这一行,然后显示结果。另外 Shell 也支持批量处理命令,需要写一个 Shell 脚本,然后执行它。历史上有多种不同的 Shell:
sh: Bourne Shell,由 Steve Bourne 开发,绝大多数 UNIX 系统标配csh: Bill Joy 开发,BSD UNIX 系统标配ksh: David Korn 开发,兼容 sh,并支持 csh 的新功能tcsh: csh 的加强版bash: Bourne Again Shell,GNU 开发的,基本上是所有 Linux 系统默认的 shell 了想要知道你的系统自带了什么 shell,你可以在终端运行:
cat /etc/shells
macOS 自带的是这些:
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
除开 Windows 的 cmd.exe,我最早接触终端是在 Linux 系统上,当时用的是 Ubuntu 桌面版。现在大多数人接触 PC 都是从桌面版带 GUI 的操作系统开始,所以相比之下命令行要显得稍微难操作一点。如果有读者朋友觉得命令行操作起来相对困难的话,可以参考著名的《鸟哥的Linux私房菜》这本书。作为入门读物还是非常容易上手的。
接下来我们假定读者朋友们都已经比较熟悉 Shell 操作了。目前多数类 Unix 系统的默认 Shell 都是 Bash,它已经足够用了,但是还不够好用。
目前比较流行的 Shell 是 zsh 和 fish。二者各有优劣,我个人使用的而是 zsh。
ZSH 称为 Z shell,是基于 sh(Bourne shell)的扩展,包括了 ksh, Bash和 tcsh等多种 shell 的特性。今年 WWDC 2019 上苹果亦宣布将用 zsh 取代 bash 称为 macOS Catalina 的默认 shell。
zsh 的自动拼写纠错,大小写不敏感的自动补全,自带的 where 命令等都非常实用。在 macOS 上用 Bash 试图 cd down[Tab] 的人都应该有所体会。
zsh 还支持各种插件和扩展,开发者可以基于 zsh 实现各种酷炫的命令行体验。Oh My Zsh就是一个开源的项目,也是大多数 zsh 用户的选择。
超过 1350+ 的贡献者为这个项目贡献了 250+ 的插件和 125+ 的主题。
安装起来非常简单,通过 curl 或者按照官网指示安装即可:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
oh my zsh 自带的 git 插件简直是开发者的福音。

还有多款主题任君选择: Themes · robbyrussell/oh-my-zsh Wiki
在 shell 里进行文件夹路径变换我们用的是 cd 命令(change directory)。假如我们有一个层级比较深的路径: ~/Documents/ADir/BDir/CDir/DDir。一般我们需要
cd ~ #或者 cd
cd Documents
cd ADir
cd BDir
cd CDir
cd DDir
这还是我能记得这个路径的前提下。一般情况下我只记得它大概在哪里,所以还得多次 ls 看看是不是在当前目录。
这时候你需要一个无论身处哪个路径都可以轻松跳转过去的 jump 操作。
j DDir
这就是 autojump 干的事情。只要 j keyword 就可以到达关键词所在的地方,都不需要记得完整的名字。
autojump 会对你曾经到达过的路径做一个缓存,然后自己计算一个优先级。如果有多个同名文件夹,它会优先匹配最高优先级的那个。如果你觉得这个优先级不对,你可以使用 j -i 或者 j -d 来增加/减少当前目录的权重。
oh my zsh 也提供一个类似效果的插件,叫做 z。github 地址在这里: oh-my-zsh/plugins/z at master · robbyrussell/oh-my-zsh
oh my zsh 除了直接把当前 git 仓库的信息展示在终端之外,还自带许多方便的 git 命令的 aliases,比如:
| Alias | Command |
|---|---|
| gaa | git add --all |
| ggp | git push origin $(current_branch) |
这些 git 命令我们每天都需要打无数次,能用 alias 还是非常方便省事的。
完整的 aliases cheatsheet 可以参考这里: Cheatsheet · robbyrussell/oh-my-zsh Wiki
如果我们不做任何修改,登录 shell 之后的所有配置就是默认的。但是我们通常都需要安装各种工具,这些工具需要前置配置,比如环境变量 PATH。这些东西都保存在 .profile 文件里。类 Unix 系统在登录 shell 的时候一般都会读取 .profile 文件。
如果你在自己的 Home 目录(~) ls -a 一下一般可以看到这几个文件:
.profile
.bash_profile
# 如果装了 zsh 的话
.zshrc
这几个文件的作用是类似的,但是读取顺序不同,其中 .zshrc 只会被 zsh 读取。关于这几个配置文件的顺序大家感兴趣的可以参考这里: .bash_profile vs .bashrc - Abhinav korpal - Medium
一般情况下我会在 Dropbox 里放一个 .bash_profile 文件,然后在多台 Mac 之间共享这个文件,只需使用 ln -s 在 Home 目录创建一个软链。
.bash_profile -> /Users/xxx/Dropbox/bash_profile
这个文件里面我们可以配置 shell 的 locale 信息,比如:
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
或者是 Go 的配置:
# Go
export GOPATH=$HOME
export GOPATH=$HOME/go
export GOBIN=$HOME/go/bin
或者是一些常用的但是比较长的命令的 alias:
alias jcs="codesign -dvvv --entitlements :-"
甚至可以写一个 shell 函数进来:
unproxy() {
unset http_proxy
unset https_proxy
echo "Proxy Unset."
}
这些写进 .profile 文件的东西在登录后,在任意路径下直接使用。把常用命令放进来是一个不错的选择。
通常情况下修改完 .profile 之后我们都需要 source 一下让它生效:
source ~/.profile
那么 source 命令和直接执行它有什么区别呢?感兴趣的读者朋友可以看看这一篇文章:Linux下source命令详解 - 在努力! - CSDN博客
简单来说就是使用 sh filename 与 ./filename 来执行脚本的时候,shell 本身会创建一个子 shell 来执行这个脚本。所以在子 shell 里的变量并不会影响到当前的这个父 shell。而 source 执行的时候,并不会创建子 shell 而是直接就在当前 shell 执行了,所以这里面什么 export, alias之类的东西就直接在当前 shell 生效了。

macOS 自带的 Terminal.app 已经足够好用,虽然默认是白色底的,字体也比较小,但是你可以在 Preferences 里面修改 Profiles 和字体。在 macOS Mojave 以上你还可以使用 Dark Mode 来让它变成黑色的。
不过还有比他更好用的终端 App — iTerm2。
iTerm2 有很多非常实用的 Feature,我最常用的有几个:

iTerm2 可自定义的外观项比 Terminal 的多,而且还挺酷炫的。最近更新的版本还可以在顶部加入 Status Bar 显示 CPU/Mem 以及当前路径的信息。虽然我不怎么用但是可以看到 iTerm2 的进化速度比 Terminal 快多了。一旦习惯了 iTerm2 的 UI 就回不去了。
实用的分屏功能
Terminal 虽然也自带分屏和 Tab,但是 iTerm2 可以通过 cmd+d 和 cmd+w 来新建/关闭当前分屏,通过 cmd+[ 和 cmd+] 来左右切换分屏。当我需要多任务操作的时候非常有用。比如我在左边看着本地的目录,右边通过 ssh 登录服务器对着服务器的目录,两边做数据交换。

随时用全局快捷键呼出的 Hotkey Window

在 Preferences 里面选择 Keys -> HotKey -> Create a Dedicated Hotkey Window… 之后可以创建一个专门对应全局快捷键的终端窗口。按下自定义快捷键之后就会 slide in。虽然我自己用的不多但这是 iTerm2 挺受欢迎的一个特性。

实用的小细节
cmd 使用鼠标打开链接iTerm2 还有许多有用的小细节,在日常使用的时候不会觉得有什么了不起,但是当你到别人的机器上用什么都没改过的 Terminal 的时候忽然就发现:我擦,怎么这么难用?这就是好的设计应该有的感觉。
大部分终端 App 都会支持一些非常实用的快捷键操作。我们无论使用哪一个 App,只要是经常用的 App,经常用的动作,都应该学习使用快捷键。
在终端中我比较常用的几个快捷键有:
| Key | Action |
|---|---|
| alt+left | 往左跳一个单词 |
| alt+right | 往右跳一个单词 |
| ctrl+w | 向左删掉一个单词 |
| ctrl+u | 删掉一整行 |
| ctrl+l | clear 整个终端的输出 |
| cmd+enter | iTerm2 的全屏/取消全屏快捷键 |
不同的终端 App 设置的快捷键可能不一样但都大同小异,完整的 iTerm2 Cheat Sheet 在这里大家可以参考一下: iTerm2 Cheat Sheet - Kapeli
有一个叫做 CheatSheet 的 App 可以长按 ⌘ 来查看当前 App 的所有快捷键,不过体验并不是很好。一般我会选择 Google: App + Cheat Sheet 来获得该 App 的 Cheat Sheet 列表。
比如 Tower 就整理了一份不错的 Xcode Cheat Sheet 在这里: Xcode Cheat Sheet。对于 iOS 开发者来说,每天面对 Xcode 的时间贼多,不掌握点快捷键怎么可以呢?


欢迎大家留言或者邮件 [email protected] 分享你喜欢的效率工具或者效率技巧。
最近做了一次关于效率工具的小分享,工具类的东西,文章简介外加实际上手的效果要大于现场演讲,遂动此念以记之。
光阴荏苒,日月如梭。有限的时间与精力是每个人每天都要面对的问题。不同的人有不同的选择,绝大多数人在找到一个能用的方法之后就不会再费心思去寻找更加高效的途径。这大概是人类设计的缺陷,为了节能而紧闭窗户。
这个缺陷带来的后果就是本来就稀缺的时间与精力由于不采用更加高效的方法去解决问题而变得更加稀缺。
“macOS 效率系列”将介绍在 macOS 系统上实用的工具来帮助读者朋友们提高解决问题的效率。
工具只是表象,其背后是对高效的追求,是对重复机械劳动的不屑,是使用工具来进行自我增强。

1968 年斯坦利·库布里克执导的电影《2001太空漫遊》(2001: A Space Odyssey)是名留影史的佳作。其中有一幕是两拨原始的人猿部落为了争抢有限的水和食物等资源经常互相斗殴。这种情况下身体强壮的人猿就比较容易取胜。某天,一只身体瘦弱的人猿在巨兽的尸骨旁边捡到一根骨头。他尝试着敲击巨兽的头骨,发现坚硬的头骨居然能被打破——他发现了使用工具来自我增强的方法。于是他把这个想法分享给了部落的其他人猿。在下一次部落冲突的时候,手持巨兽骨头的人猿把对方打得屁滚尿流。这就是工具的力量。
我们在生活与工作中经常会遇到重复的机械劳动,有的人习惯了一直重复,有的人则选择使用工具或者制作工具,让工具和机器替自己去重复。
我想很多人其实并不是不想提升效率,只是不知如何下手,让我们通过"macOS 效率系列"抛砖引玉,希望能帮到想要高效工作的读者朋友们。
Windows 操作系统自带的窗口管理做得不错,支持鼠标拖拽吸附左右以及 Win + left,Win + right等快捷键。我们经常需要一边开着文本编辑器或者其他工具,另一边开着浏览器查资料。这种时候左右窗口布局就是非常好的辅助。
macOS 系统原生并未支持此项功能,但是有不少优秀的 App 可以实现“窗口管理”(Window Managment)。
![]()
官网: Magnet – Window manager for Mac
Magnet for Mac 可以实现像 Windows 操作系统一样的体验,把窗口拖拽到左右边缘即可吸附并放大填满半个屏幕。同时也支持多个快捷键和多种布局,比如上下布局和四格布局。
Magnet 是我曾经常用的窗口管理工具,但是向上拖动把窗口放大的时候经常触发 macOS 自己的多 workspace 预览功能,有点烦,后来改用 Hammerspoon 就没再使用这个 App 了。
可以在 Mac App Store 购买
![]()
Many Tricks 出品的窗口管理工具。
特色是当鼠标在窗口左上角红绿灯那里悬停的时候可以选择左右上下的自动贴边布局。

同时也支持快捷键操作,也支持自定义布局。

价格 $10,可以在官网购买和下载体验版本。

Slate 是一个开源项目,GitHub 地址: jigish/slate: A window management application (replacement for Divvy/SizeUp/ShiftIt)
Slate 基本上没什么 UI,所有的自定义通过配置文件来实现,默认的配置文件在GitHub这里。
可以在 GitHub Page 上直接下载 .dmg或者下载 .tar.gz文件。
配置文件的格式大概是这样的:
# Push Bindings
bind right:ctrl;cmd push right bar-resize:screenSizeX/3
bind left:ctrl;cmd push left bar-resize:screenSizeX/3
bind up:ctrl;cmd push up bar-resize:screenSizeY/2
bind down:ctrl;cmd push down bar-resize:screenSizeY/2
同时 Slate 还支持用 JS 文件来实现更加动态和复杂的配置,只需创建 ~/.slate.js 即可。
JS 配置文件的语法与文档可以参考这里。

官网: http://www.hammerspoon.org/
GitHub 地址: https://github.com/Hammerspoon/hammerspoon
Hammerspoon 是我目前在使用的工具,它其实是一个自动化工具,可以做的事情非常多,窗口管理只是其中的一个。
Hammerspoon 本身是跑在 macOS 上的一个 App,通过 Lua 虚拟机可以运行 Lua 脚本。用户通过 Lua 脚本和 Hammerspoon App 之间进行通信。Hammerspoon 提供了许多系统能力,以 Lua API 的形式暴露给用户脚本层。
Hammerspoon 本身是开源的的,现在也有许多基于 Hammerspoon API 实现的开源组件可供调用,所以我们只需短短几行代码,就可以实现非常酷炫的窗口布局。
local tiling = require "hs.tiling" local hotkey = require "hs.hotkey"
hotkey.bind({"ctrl", "alt"}, "h", function() tiling.cycleLayout() end) tiling.set('layouts', { 'gp-vertical', 'columns' })
可以通过官网下载安装,然后创建初始化脚本 ~/.hammerspoon/init.lua。参考一下官网的Getting Started文档和Hammerspoon Docs,就可以愉快地实现自动化了。
工具只是表象,最重要的其实是寻找高效方法的思维方式。现在有不少社区或者自媒体会分享各种效率工具,想要找到这些东西并不难,本系列不过总结一二,希望能对读者有所帮助。

主播: 徐涛
嘉宾: 钟颖 | 枫影 Justin Yan
Apple WWDC 2019 于美国时间 6 月 3 日在 San Jose 举办。今年我有幸以 Developer 的身份到 WWDC 现场参加。2016 年我曾经参加过一次不过那时候只是在这边出差顺便去看了一眼。
今年苹果诚意满满,不仅在硬件上给出了性能怪兽,价格突破天际的 Mac Pro,还带来了 UIKit for Mac 以及跨(Apple)平台的 SwiftUI 等多项让开发者非常惊喜的技术。
这次在湾区我见了几位老朋友也认识了一些新朋友。朋友 Louis 跟我说想介绍我给《声东击西》的主播,我可是《声东击西》的听众啊😂。于是非常荣幸地做客播客《硅谷早知道》节目,和同来参加 WWDC 的国内知名 iOS 开发者钟颖一起录制了一期节目,从开发者的角度谈谈今年 WWDC 的一些看法。

今天早上(2019-04-16)各大社交平台都在发巴黎圣母院大火的事情。很多人在微信朋友圈发自己以前去巴黎圣母院时拍下的照片,微博也有 #我和巴黎圣母院# 这样的话题供大家发自拍。
我刚看到第一个发照片时有些不明所以,但是看到多个人都在发巴黎圣母院的时候,我第一时间 Google 了一下相关新闻,才知道圣母院大火的事情。这让我想起去年 9 月巴西国家博物馆的火灾。
巴西国家博物馆的主体建筑有 200 年的历史,曾是葡萄牙王室的行宫。1889 年新成立的共和政府将其改造成博物馆,并向普通民众开放。馆藏据说有 2000 万件,包括有上万年历史的南美最早人骨化石“卢西亚”和世界上最大的陨石——渥拉斯顿环形山陨石等非常珍贵的藏品。播客“博物志”也对这场灾难做了一期节目:#121. 「这块陨石以后就是巴西国宝了。」 — 博物志。我就是从这期节目知道这场灾难的。
但是显然去年的这场灾难和今天发生的巴黎圣母院相比,热度完全不可同日而语。今天我在做纸笔书写的 FWP 思维练习时(参见此文)自然地写到了相关的思考。我是通过微信朋友圈、Twitter、微博等社交平台知道这件事情的,这是社交平台最大的特点:对于有一定规模的大事件,传播速度极快。但是除此之外呢?Social Media 几乎给不出多少有效的信息。像是火势多大,造成的损失几何,火灾的原因等等。这些专业的分析是需要专家来做,由权威来发布的。而社交平台上极少有个体有能力可以到这点。这是理所当然的事情,毕竟绝大多数人都只是普通人,这也是我们分工合作的社会的基础。
充斥在社交平台上的“我和圣母院”的自拍让我颇感兴趣,他们发自拍的意义是什么?我觉得可以从几个角度来看:
经济学的基础是“稀缺”,上述三点事实上归根结底都是在表达一个“稀缺性”,是一种对自己拥有“稀缺资源的炫耀”。怎么说?
虽然今天中国出境游的人数在逐年递增。在 2018 年中国出境游达到 1.4 亿人次,其中去法国的大约是 230 万人次。(注意:单位是“人次”而不是“人数”,数据参考文章底部链接。)假设这个单位是人数吧,也就是 230 万人没有重复的,那就是大约一千个人里面有一个人去了法国(而且不一定去了巴黎)。这里只讨论 2018 年一年的,假设十年内去法国的人完全不重复,并且过去十年每年都是 230 万人去(实际上越早时间人次越低),那么撑死也就是每一百个人里有一个人在过去十年去过法国。
这样的人数放在中国的总人口来说依然是少数。所以“去巴黎旅行”这件事情在中国依然是一种“稀缺性资源”,而当时留下的照片就是自己“拥有稀缺资源”的证据。今天正好有这么一件事情,确实是一个好时机对自己的社交圈进行一次广播,提升一下社交印象分。
有爱人设的塑造
如果只是普通的旅行照片,那炫耀出来的仅仅是“此时此刻我在哪里”的稀缺性,但在今天发出来却可以配上三两句话表达一下“惋惜”之情。而这种“惋惜”是建立在“我知道巴黎圣母院有多厉害”的基础之上的。
这就比“我去过巴黎圣母院”要更进一步了。毕竟了解一座古老建筑物的历史,馆藏,在人类社会的地位等等这些额外信息,都是需要付出成本的。虽然普通人没法像高晓松一样对着摄像头一侃就是俩小时,但是发两句简单的漂亮话还是可以做到的。这其实是一种成本极低的人设塑造,而人设塑造为什么重要呢?就在于“有爱”、“有文化”也是一种“稀缺资源”。
事实上发一条朋友圈或者微博,对远在地球另一端的一场灾难表达一下爱心,可能就是一个人能做到的最大的“有爱”了。法国总统马克龙现在表示要对全世界筹款重建圣母院,在朋友圈里表示痛心疾首的人群中,又会有多少人会主动去捐款呢?
这正好是我最近所读的《薛兆丰的经济学讲义》一书中讨论过的一个例子,即人的爱心是非常有限的,这是一个客观事实。而人类社会又是紧密联系互相依赖的,那么这时候如果让人类社会跨域有限的爱心来互相帮助呢?答案是“市场”。所以很难说马克龙的纯粹“慈善募捐”能取得多大成效。假如这场“筹款”并不是一种募捐而是一种市场行为,做个不恰当的比喻:募捐最多的企业可以获得圣母院塔尖大 LOGO 的品牌露出之类的,那么也许会有更好的募捐效果也不一定。
蹭热点蹭热度
对于微信公众号、微博大 V 之类的靠流量卖钱的人或者机构来说,流量即收入。现在有个天降热点,那当然不可暴殄天物,不仅要蹭,而且要蹭得精彩,蹭得高明,毕竟互联网时代群众的注意力极易被转移,热点就是一种时间上的稀缺性资源。况且像“圣母院大火”这样的热点,就是个非常容易往正面形象走的一个命题作文,只要中规中矩,就不会制造出负面文章。而自媒体如果想从这么多批量制造的文章中脱颖而出,可能就得写一些与众不同的观点出来。制造与众不同的过程,也是在制造自己文章的稀缺性。
以前我们在聊郑也夫的《后物欲时代的来临》一书时曾经说过消费主义社会通过堆砌物质,或曰资源来彰显自己的能力。其实拥有大量优质的物质也是一种“稀缺性”,毕竟优质即稀缺,能够拥有大量优质物品的人当然是稀缺的。
所以上面写了这么多关于发自拍,蹭热度之类的观点,好像我是在说这些东西不好,这些东西没有价值。其实不是。如果大家发朋友圈发微博没有任何好处,无论这个好处是炫耀也好,自我满足也好,人设塑造也好,只要没有适当的激励那就不会有人去发,我也就看不到这条消息,也就不知道原来发生了这么大一件事情。所以从信息触达的角度来看,当然是一件好事,但是对于信息传播过中信噪比来说就不一定了,毕竟从这么多人的自拍中想要找到有效信息的成本还是挺高的。所以从信息接收者来说,大量的自拍显然不是一种“优质信息”。
对于大多数发图的人来说,有机会发一发陈年自拍,接受一些赞和围观,满足了这些心理需求就已经挺好了。但是如果发表的人能够发出“对接收者来说更有价值”的信息,是否会更好呢?根据我对薛兆丰的经济学科普的理解,我觉得绝大部分发表者是不会发出比现在这些“更有价值”的东西的,那些更有价值的东西会由专家来发布。这是一个客观的常态,因为“有价值的东西”本身就是一种“稀缺的东西”。
对我来说,我通过朋友圈知道这件事情,那就已经足够了,剩下的信息我会通过其他渠道来获取,比如专业的新闻稿,比如博物志播客的评论等等。
前几天写完上述文字之后我没有立刻发布,因为我并不知道是否要提及“做到更好”。首先我得定义什么是“更好”,而一旦我去定义这个词,我就发现这实际上就是一种“稀缺”资源。而“稀缺”本身就是一种大众所不具备的东西,所以似乎并没有必要去“做到更好”。
但其实这个逻辑是错误的,是因果倒置的。我们不应该因为“稀缺”而不去做,反而是很难做到所以才“稀缺”。
未来的社会应当是会随着人们的认知水平,教育水平的普遍提升而逐步改善的。“发表无用信息”来满足自己的炫耀心理需求的行为会随着时间的推移而逐渐减少,就好像蛇精的照片会随着大众越来越不买账而逐步减少一样。不过根据我的观察,现在是美颜水平变高了,让修图后的人更加接近自然人,但是加上极重美颜的照片已经充斥各大社交平台,说明重美颜依然有其市场,目前无法识别重美颜或者不关心是否美颜的人还是居多。
今天我看到网络上有关于“如何看待朋友圈发圣母院合照的行为”之类的讨论,有人在批判发照片的行为,也有人在为发照片的行为正名。双方的措辞都稍显激烈。
我想起《薛兆丰的经济学讲义》的前言,作者说:
它助你变得更理性、悦纳和进取。你将学会把愿望和结果分开来评判(理性);你将学会先去探究现象背后的原因,而不是动不动就抱怨和指责(悦纳);你将忘记经济学家们津津乐道的均衡世界,而着迷于由创新精神牵引的非均衡的开放社会(进取)。
我在看到朋友圈里充斥这些照片的时候是有感到不舒服的,但由于最近一直在读这本经济学的科普,我很自然地就想要去分析这种“不舒服”背后的原因。
做事从容应对是一个表象而不是一个人的品质或特性,而是由于此人有足够的能力解决他需要面对的问题。同样的,能够宽容待人也不是一个人的品质或特性,而是因为此人足够理解他所面对的不符合预期的事情背后的原因。
读《薛兆丰的经济学讲义》并不能让我成为一名经济学专家,但是我非常喜欢作者笔下的经济学那种反直觉的思维方式。能够采用不同的角度来看待同一件事情,我们就可以用不同的结论来反思同一件事情,也就能够理解不同的人,能够审视不同的结论。
我们在生活中会遇到很多不如意的事情,不符合预期的事情。遇到这些事情会让我们产生负面情绪。如果仅仅停留在负面情绪里我们是得不到进步和解脱的,追求表面的“宽容”也是没有意义的。惟有采用多元的思考,理解事物背后的原因,才有可能辨别真伪,寻找问题的解决之道。这件事情说起来容易做起来难,但是一个人如果不做难的事情,那他就会一直在原地踏步,我想喜欢原地踏步的人应该不会很多。
2019.04.16 - 04.18
于自居

推荐使用泛用型播客客户端搜索“枫言枫语”来订阅收听本节目。我们也在国内的荔枝FM和喜马拉雅有同步音源。

这个世界缺乏诗意。
这个表述不够精确,应该是我自己和我观测范围内的我眼中的世界,看上去缺乏诗意。不过一旦我犹豫表述是否精确时,我便已失去诗意。
最近读起诗人廖伟棠的诗集《春盏》。我先是听了他在《看理想》上的电台节目——《诗意:关于新诗的三十种注脚》(截至本文写作之时,节目尚未连载结束)。我听了前九集,颇有感慨。到底是什么时候开始,我的世界,和我观测范围内的,我眼中的世界,开始缺乏诗意了呢?
2008 年以前我写诗,那时候我在上学。
学校是压抑苦闷的地方,囚禁着无数涌动炽烈的青春。那时的月亮大到从十五的窗前逃逸,吴刚的斧子在诗句间清晰可辨;现在的月亮被吞没在城市的夜晚,如晨间的白雾四散,霓虹荡漾的高塔取代斜阳的浪漫。
每个人手上都有一部手机,每个人的眼神迷离,不同的 AI 在远端推送不同的内容给不同的大脑,吸引我们不停地看下去。我想起曾经被妖魔化的电视机,如今已成为一个时代的缩影。
为什么我忘记了曾经的我写诗,为什么我停在十字路口,一袭白裙踏雨而来可我却无法穿越车窗,握住冰冷的伞柄?斑马线上匆匆的脚步声像迁徙的野牛群,我坐在车里悼念不知所踪的诗意。
吾乡
黄昏中她微倦。
吾乡在珠江以西
像一个小农妇,为傍晚莫名伤感,
说着一些别人无从意会的语言。
她那些清丽,已经难以分辨
是九十年代的新兴,还是二十年代的旧情。
可是我的名字就叫做新兴呵,她的蓝花小襟,
她的晚云揉碎了荡漾。
她准备晚饭,已经做不出更多新奇口味,
而水未沸腾前她尤独倚门,
向隆隆的未来索一把小葱。
吾乡吾乡,那些鸟铳倭刀我全卖掉,
梦中涨涌的大雾如酒,吃光了我的马头。
我是牵牛人还是蕉红花耶?
借月光抱住了她白细的肩头。2011.1.14 返乡(广东新兴县)途中
诗人廖伟棠的故乡在广东,在《看理想》的节目中他用粤语念诗一下就吸引了我。我作为一个潮汕人,虽然粤语说得不标准但是听着格外亲切,像儿时在外婆家吹着夏风听着 TVB 电视般亲切。相比起现代国语来说,粤语和潮汕话与古汉语的关系要更加紧密,许多古诗词的韵脚非得用古汉语来读才能押韵。比如这首刘禹锡的《竹枝词》:
杨柳青青江水平,
闻郎江上踏歌声。
东边日出西边雨,
道是无晴却有晴。
“平”字和“声”字在粤语中是同一个韵母,但在现代汉语里面已经不是了。最早的诗歌是能歌的,韵律对诗来说是十分重要的。于是听诗人用更靠近古汉语的语言读诗,仿佛一下穿越了几个世纪,那种恍惚的隔离感,要比现实与诗意的差异来得更加强烈。据说诗人廖伟棠很早就在北大旁的万圣书园用粤语念诗了。
他现在与家人住在香港,摄影与写诗。
《春盏》是廖伟棠 1996 - 2015 的诗选。有一些诗歌很有趣,有一些诗歌很有距离。但是总得来说非常好读也非常动人,我很喜欢诗人成熟的写作技巧,也很喜欢那种沉稳中带着悲凉的意味,比如《一九八三年夏天》最后一节:
一九八三年夏天,寂静的村庄神色黯然
在黑暗中仿佛有雨水滴落我的双手
我,一个夜了还站在门外的男孩
凝望着黑暗,突然听见了远方山神的歌唱
有的诗我很欣赏其中的一句:
而我,我怀抱着写给你的信,在人群中走过,
像一个被抛弃的女子,不知道有雨点落在自己头上。
这句来自《乡间来信》组诗的《第四封》。当然诗歌不可断章取义,诗歌不可只读金句。可以说这些片段是诗歌的亮点,做个不恰当的比喻,像流行歌的副歌部分。但是即使是流行歌,也不会只有副歌,一定要整首歌听才会完整。诗也是一样的。比如北岛的两句诗:
卑鄙是卑鄙者的通行证,
高尚是高尚者的墓志铭。
是非常有名了。但是只知道这两句诗是不完整的,一定要读一下《回答》全诗,才能体会到“我——不——相——信!”四个字的战斗意味。
本诗选的作品多写爱情主题,很多是写给妻子诗人曹疏影的,也有写给孩子的诗。另外也有乡土的诗歌,也有旅行时异国风情的诗歌。毕竟时间跨度较大,整部诗集收录的作品里,主题和写作手法多样,有些我很喜欢,比如《乡间来信》这组诗,有些我不太感冒,比如西藏主题的几首。每个人的主观喜好不同,但应该都会在这部诗集里找到喜欢的。
写到这里我在想:今天看起来好像非常高雅非常文艺的写作这个职业,在以前也许曾经是非常普通的赚钱养家的工作。这两天我读《对撼法律》这本书,里面xxx提到担心唱片业未来会和电影业一样,变成商业片当道的境况,再也没有人去做出好音乐了。似乎“商业”成了一切美好事物的罪恶的尽头。电影从艺术,从实验,变成商业变成流量骗钱,唱片从创作从音乐,变成搞笑变成口水歌赚钱。钱是这个时代的无法绕过的一个东西。在过去的人类历史上,钱一直都很重要,但是像今天这样以流水线生产为主流的社会结构里,钱的结果使越来越多的人们被送进工厂拧螺丝,工作赚钱和生活体验的分歧越来越大。
工业革命以后,人类整体的社会生产力大发展,但是个体的重要性却越来越低。具体到互联网这个行业里,能够通过流水线工业化整个生产过程的公司,才能在目前的市场中占据有利地位。而流水线意味着抹平差异,流水线意味着头部的脑袋下达决策,底层的搬砖工只负责搬砖。在这样的过程里,甚至要刻意消除搬砖工与头部决策的差异,以达到整体效率的最大化。显然,这是一种对“个性”非常不友好的流程。
而诗意,是需要进入个人的世界,和个人的内心交换柔软的部分,互相抚慰伤痕,舔舐新生的鹿角,走进黑夜的柔波的。当生活从“做自己喜欢的事情顺便养活自己”变成了“去大工厂流水线搬砖养活自己然后再好好休息体验生活的美好”时,生活可能就不那么容易美好了。
想要看到天堂,先得扎根地狱。
昨天看到 YouTube 上的一个纪录短片,主角是一位住在日本的 B 站 UP 主。她白天在日本公司上班,我脑中浮现的是我对日本公司的刻板印象:十分压抑,极度准时,等级森严。主角下班后脸上的表情当然也不可能是非常阳光的,但是当她谈起在 B 站拍视频的时候却是眉飞色舞的。有一个日本的讽刺漫画是把人比作一个电池,塞进名为公司的电池盒子里,为公司发电,用完即扔,题为“社畜电池”。在日本,公司的汉字是“会社”,“社畜”就是对“上班族”的一种比较极端的调侃。

在这样的一个社会主流大背景下,每天被自己不乐意做的“赚钱养家”的事情掏空了身体后的社畜们,下班后自然也不会望月生情,把盏吟诗了。
这位 B 站 UP 主愿意凌晨 4 点半起床录视频然后再去上班并不是她“非常强大”可以强迫自己做普通人不愿意做的事情,而是因为她扎根于“上班”的现实,录视频这件事情是“快乐的事情”。如果早上起来录视频很快乐,那么当然会有足够的动力克服睡觉的吸引力了。
人类是需要目标的,人类是害怕孤独的,人类不是纯粹理性的,人类是有七情六欲的。
人类是复杂的。
我们之所以讨论理性大概是因为理性是可讨论的。但是人类并不是纯粹理性的。廖伟棠将本作名为“情诗集”,“不只是标明此选本以爱情诗为主,而是我突然想明白了:所有的好诗都是情诗。”人类的情感的部分是温软而美好的,是不应该被工业化的冰冷而冻结的。
今天早上我在手机上浏览 Instagram 和 YouTube 的时候突然意识到这些内容提供商的“服务”与微信、抖音并无二致——它们都在利用我的弱点,吸引我在上面消耗大量的时间,而这些时间换来的却往往是虚无。内容服务产品可以利用每个使用者的使用习惯来建立适合不同用户的内容推荐,只要抓住你的兴趣点,你很难不陷进去。社交产品则利用的是人类的共同弱点:人类害怕孤独。从这个层面上,能够让人类不孤独的产品是具有积极意义的,但是利用人类喜欢群居害怕独处的弱点让用户沉沦则无疑是个陷阱。
这个世界有很多陷阱。我想起电影《Wall-E》中,乘坐飞船的胖人类们,出行全靠飞行躺椅,沟通使用电子屏幕,整个社会由机器人来负责生产、清洁、服务、甚至决策的场景。AI 毫无疑问在今天越来越重要,但就像链式反应能力一样,既可以用于原子反应堆发电服务人类,也可以用于原子弹毁灭地球。技术是中立的,全看用的人而已。
作为一个身在功利主义、实用主义、理性主义盛行的世界里的渺小人类,诗意是我仰望夜空时得以用想象穿越城市的灯火,穿越十字路口溅落的雨滴,穿越迁徙的匆匆脚步,拥抱黑暗与希望的火炬。
2019.04.06/下午
于自居

我看书的习惯不是很好,遇到有趣的书放不下,但是感到无聊的书又会很快放弃。这种感觉全凭主观,于是错过了不少佳作。好在有趣的书不少,即便穷尽一生也无法尽读,倒不怕没书可读。刘慈欣的《三体》是我挺喜欢的科幻作品,读第二部也是数度放弃,时隔数年才终于读完,至于《冰与火之歌》的第二卷,则至今还没能耐下性子读下去。
今天要给大家介绍的这部作品,我最早是在 2006 年前后第一次读到,距离今天(2019年)也有十几年的光景。当时我对西方历史(尤指西欧)所知深浅。此番再读,颇有焕然一新之感。这部作品是挪威作家乔斯坦·贾德于 1991 年出版的哲学史小说——《苏菲的世界》。虽是“小说”,但叙事技巧平平,毕竟在本作中小说只是信息载体,不是作者的重点。
贾德毕业于挪威奥斯陆大学,念的是斯堪的纳维亚语言和神学,毕业后在芬兰教授高中哲学课达 10 年之久。《苏菲的世界》是贾德写过的做种最畅销的一本,甫一出版即成为挪威 Best Seller,1994 年拿到“德国青少年文学奖”(Deutscher Jugendliteraturpreis),1995 年英文版出版后更是享誉全球。截止到 2011 年,这部小说已被翻译成 59 种语言,售出超过 4000 万本。
小说的主角是一位年仅十四岁的挪威少女苏菲。有天她在自家的信箱里收到了一封神秘来信,上面只有一句话:
你是谁?
写信的人是一个神秘的哲学老师艾伯特 (Alberto Knox),以此开始他们的神奇哲学史课程。从古希腊哲学家一路到中世纪,文艺复兴,巴洛克,浪漫主义,存在主义,唯物主义,达尔文主义,最后回到宇宙大爆炸。作者以这两个人物之间的哲学课程,用十四岁女孩能听懂的语言,向读者科普了整个西方哲学史。
“哲学”在大众普遍的印象里一直是深奥枯燥,晦涩难懂的,但作者在高中授课的经验却使他得以用浅显易懂的语言和生动形象的例子让读者一点就通。小说开头的神秘来信点出了人类的终极问题:
我是谁?我从哪儿来?要往哪儿去?
刚出生的婴儿对一切都充满好奇,但是在他有自己的意识之前他就已经习惯了这个世界,慢慢变得不那么好奇了。这个世界上绝大多数的人就像始发站到终点站的有轨列车,每天来来去去,一成不变,连车上乘客的数目也能猜个八九不离十。但是真正的哲学家却一直保有好奇心,愿意去探寻司空见惯的日常背后的原因。
多数读者应该都听说过 Big Bang 大爆炸理论,即我们的宇宙最初是从一个密度极大质量极大的奇点爆炸开的,从无到有,就像魔术师从帽子里突然抓出来一只兔子一样。但是和兔子不同的是,人类会思考是谁把我们拉出来的,我们是什么。习惯了这个世界的人就呆在兔毛的底端,没兴趣了解兔子以外是什么,而哲学家就是呆在兔毛尖端的人,试图通过思考去理解我们所在的世界。
如果现在在客厅里有一只猫,它面前有颗球滚过去,那只猫多半会直接扑向那颗球。但如果是个人坐在客厅里,那他大概会先看看球滚过来的方向,试图搞明白球滚过来的原因是什么。
尽管生活的平淡抹去了大多数人的好奇,但人与动物的区别不会消失,只是习惯了世界的人不想爬到兔毛尖端,只想留在兔毛底部安逸地度过而已。
在古希腊时期,苏格拉底,柏拉图和亚里士多德都是公民,也即是“不用干活的人”。当时的社会,劳力工作都由奴隶做了,如此公民才有闲暇余裕可以讨论哲学,思考人生。在现代,工业革命带来社会生产力的极大发展,到今天(2019 年)人类已经基本告别温饱困扰,虽谈不上富裕,但不至于饿死。于是才会有越来越多人的像古希腊的哲学家一样对人生发出思考。
人终有一死,相较于宇宙洪荒,人类的寿命可谓弹指一瞬。在这一瞬之间,我们该如何生活?人生的意义是什么?人生的价值是什么?这些问题非常重要也非常基础,但显然是我们的教育体系里所缺失的。于是在解决了温饱问题的现代社会,越来越多的人陷入空虚与迷茫。娱乐和商业成为社会的主流,借助感官的刺激来暂时忘却人生之困惑似乎是比较简单可行的一条道路。于是“精神刺激成瘾品”在我们这个时代空前的繁荣起来。这些东西包括合法的咖啡、茶、烟、酒,以及不合法的海洛因、大麻之类(参考《上瘾五百年》)。通过生物药剂的刺激来改变大脑的思考方式可以说是非常简单粗暴的做法,但从另一个侧面也可以看出在一个温饱的社会里,人类是多么无助和孤独。
在我们所处的社会环境中,学生时代我们被周遭的环境(包括家长、学校等)赋予的意义和目的是考试的分数。在学校里只要考试就好了,只要分数高就行了。这其实是非常单一的衡量标准,从某种程度上来说,就是一个极简版的社会。多数人毕业以后开始工作,这时候要面对的却是一个高度复杂的社会。于是很多人开始产生不适,因为从来没有人跟他说生活在这个社会里,你的价值,你的意义,你的目标应该是什么。而现在社会的主流无疑是赚取足够的财富,或者更多的财富。这在保持了几十年高速经济发展的我国更甚。由于大家习惯了高速增长,一旦有一天增长没那么快了(而这一天是必然会到来或者已经到来了),就感觉自己好像落后了一样。这就是为什么最近这两年会出现鸡汤文,贩卖焦虑文,这些东西一下子热火朝天,一下又人人喊打。相信未来取代贩卖焦虑的东西又会被制造出来,反对这些东西的舆论又会随之而来。这些只是一种现象,产生这些现象背后的原因我个人觉得和人生意义的迷失有密不可分的关系。
达尔文发表了《物种起源论》之后颠覆了整个人类自认为与众不同的认知,同时也让“适者生存”这个冷酷的法则为大众所知。我们从学生时代就已经知道竞争的残酷性,无法适应学校和考试制度的人就会被分数淘汰。工作亦如此,在这个社会生存亦如此。人会随着所处的环境的不同而不断调整自己来适应环境,这也是人类文明能够进化到今天的重要基础能力。
世界一直在变,唯一不变的就是变。如果一个人安于现状,很容易就被时代的潮流淘汰,在高速发展的社会中尤为明显。相较之下,隔壁经济发展相对停滞的日本则可谓生活一眼望到头,不太会产生巨大的动荡。但那也会产生别的问题,过于压抑的社会氛围会让人窒息。贩卖焦虑文能够流行自然也是利用了环境高速发展的特点,“你的同龄人正在甩开你”。这固然是非常不道德的行为,但也反映了在这个社会环境里,一切都在变,如果你不变,很快你就无法适应这个环境了。
而变的核心在于“好奇心”,在于探寻事物的本质。这是人类的天性,只是多数人在习惯了世界之后就遗忘了。在柏拉图设想的世界里,真实的世界分为两种,一种是我们所看到的世界的形式,另一种则是所有事物的“理型”。比如我们看到的每一匹白马黑马斑马,都是事物的形式,而它们背后有一种“理想的马”存在。前者是我们的感官能够接触到的世界,后者则是不变的本体世界。柏拉图用一个有名的“洞穴寓言”来解释他的理型世界:
假设有一个地下洞穴,里面有有一条很长的通道通往地面。里面住着几个终生被关在那里的囚犯。他们被绑起来面向墙壁,所以他们看不到背后和出口。远方高处有燃烧的火炬照进来,他们只能看到照射在墙上的影子。有人在洞口搬东西的时候他们就看到墙上的影子在动,有人在外面说话时洞里的回声听来就像影子在讲话。于是他们认为这个世界上所有的东西都是影子。对于他们来说,墙上的影子都是真实的,他们甚至从影子的形象和出场频率中找出规律,研发出一套学问,预告接下来将会发生的事情。
如果这个时候其中一个人被松绑了,可以转身看看洞口的影子的原型,他会怎么样?他可能会面对强光觉得眼睛不适,有点晕,会觉得看到的都不是真的,更想回到自己熟悉的位置,相信墙上的影子才是真的。
这时候如果强行把它押到洞口,让他看看外面的世界,看到水里的倒影,有了阳光就有影子,亲眼看到这些东西,他终于相信他看到的是真的。而有了这样的经历之后,他应该不会再愿意回到洞里去讨论影子的学问了。如果他真的回去了的话,洞里的其他人可能会认为他被洞外的人弄坏了眼镜,会嘲笑他,甚至杀掉他。
柏拉图的这个寓言非常深刻。虽然他是用来解释世界上是可能存在理型世界这种东西的。但是寓言所展现的新旧思想的冲突却是普适的,布鲁诺就因为声称太阳才是宇宙的中心而被烧死,达尔文则发表了《物种起源论》之后被认为是全英国最危险的人。
但历史告诉我们,只有正确的才会留下来,或者只有留下来的才是正确的。当然这种“正确”也是在流动中变化的,真理是变化的,真理就是变化的这个过程。在高速发展的中国,在仍然发展中的互联网行业里,这种感受会更加明显。作为一个程序员,技术的发展和更迭尤其迅速,前端的技术更是有半年就过气的说法。处于这样的环境中,如果不能保持不断地学习,很快就被在一个又一个的半年中过气了。而保持学习的动力则来自人类的天性:好奇。
李笑来有一句话叫做“学习学习再学习”,意思是先学习学习的方法,然后再去学习。虽然有点讨巧但是道理非常朴实。很多人不是不愿意去学习,而是他根本就不知道该怎么学习。就好像我在马路上开车,经常碰到变道不打灯直接整辆车怼过来的人,也经常遇到晚上开车不开灯的人,还有直接往窗外扔垃圾的人等等。这些人真的有这么坏吗?或者说做出这些行为的人,他们本身都很坏吗?
其实不然。很多人只是并不知道这样做不好,他们不知道,于是也就没有意识。在他们的想法里,这样做是正确的,非常正常的,非常应该的。而他们既然没有“正确”的概念,当然也就做不出正确的行为。这也就是我们的教育系统非常重要的原因。为什么受教育程度越高的人外在表现越文明?因为受教育程度越高的人就越善良吗?并不是的,而是他们有了这样的经验,知道什么是对的什么是错的而已。
学习也是同理。很多人停滞不前不是因为他不愿意去学习,而是因为他不知道应该怎么去学习。当然这里面还有一个非常重要的内在原因,即:好奇心。很多人在生活中已经磨灭了自己的好奇心,没有了好奇心也就没有了动力。遇到事情得过且过,能够应付过眼前的问题就好了。这样的心态非常容易造成固步自封,停滞不前。而按照我们现在的社会环境的要求,这样的人很容易就无法满足日益增长的变化需求了。网络上常有所谓“青春饭”、“大龄程序员”之类的调侃的段子。但事实却是,被淘汰的或者说不符合需求的人并不是因为他年龄变大了,而是他不再学习和变化了。如果他处于一个基本不变的社会环境,这种劣势并不会特别突出,但是在瞬息万变的中国互联网行业,这样的人将非常容易上知乎热榜。
这样的说法有点像“你的同龄人正在抛弃你了”的调调。但其实我只是想表达人应该在不断的变化中成长。世界上唯一不变的就是变。但是怎么去变则是你自己的选择。
“改变不了环境就改变自己”这句话可以说非常俗了。但是我自己其实不喜欢这种含糊其辞模棱两可的短句,它可以被解读的角度越多就越容易成为万金油。但是我认可的一点是“人要学会适应环境”,前提是这个环境是我选择并且接受的。这个世界有非常多的可能性,并不只有当下的无奈。真的不想要这个环境你可以换一个,即使是选择了当下,你也有无数种方式去适应它,并不只有一种。而会因为这句话而陷入烦恼和矛盾的人,往往只看到了其中的一种。就像洞穴寓言里的穴居人一样,只看到眼前的影子,不知道洞外的世界。
所以并不是说改变自己就是不好的,并不是换一个环境就是糟糕的。这个世界有很多种可能性,你现在所处的只是其中一种。一个真正的哲学家不会轻易地想当然,不会觉得“就应该是这样”,“就只能是这样”,在他还没看到白色的乌鸦之前,他只能说可能没有白色的乌鸦,而不是断言根本不存在白色的乌鸦。
绝对的好与坏亦不存在。留在自己熟悉的位置看着影子做学问是一种生活方式,安逸而舒适。但如果要我来选的话,我可能更愿意在变化中学习和成长。
学习“学习的方法”也需要练习。其中一个途径是增强自己的见识和眼界。就像穴居人一样,走出洞穴看看外面的世界。在我们还未有实际经验之前,我们是未有意识的。就像我不曾去滑雪之前,我看再多的 YouTube 视频我也无法体会滑雪的感觉。就像我去过潜水之后再读《Artemis》,读到主角穿着宇航服在太空行走时我才有了一种感同身受的体验。作为一个程序员也是同理,未曾见过优秀的代码之前,只会觉得自己的代码就是最优秀的。
保持好奇心,多去探究问题背后的本质,这是一种练习,也在练习中积累,积累增长见识,在见多识广中找到“学习的方法”。
作为一部简明西方哲学史,作者必须在漫长的历史中挑选出具有代表性的哲学家和主要思想。即使作者尽力去做到面面俱到和辩证思考,也难免有他本人的选择倾向。比如书中对于基督教的阐述就不够深入,逻辑学一笔带过之类的。作为一个具有怀疑精神的读者,相信你在读完这本书之后也会抱持一种怀疑态度来看待它。这本书其实是作者的主观选择,带有作者自身的立场和倾向,所以读者朋友们大可不必将它当做一部权威哲学史。从另一个角度讲,如果这本书能够让读者朋友对哲学,对人生终极问题的思考有一定的启发,从而让更多的人开始对哲学感兴趣,开始去学习哲学,那已经非常不错了。
哲学史上不同的学派对于人生有不同的观点,企图通过一本简单的哲学科普来寻找到自己人生的意义是不可能的。我认为人生的意义也不是留在某个地方等着我们的去挖掘的,而是由自己在流动中,在变化中,在对永远的真,永远的善,永远的美的追求中,伴随着自己的成长而形成,而成熟,而完善的。
人和动物不太一样,人生是需要有目标的。我希望自己可以在吸收和输出的过程中慢慢去构建和完善自己的人生意义和目标。
与读者共勉。
2019.03.24/夜
于自居