系统配置优化

大小写键和 Ctrl 键交换

首先说两个我的主观看法,当然读者可以选择不接受,那样就不用浪费时间读下去了。如果你表示认可,并且希望解决这个问题,相信本文会帮到你。

  1. 用 Caps Lock(也就是大小写切换键)来切换大小写是非常低效的。以输入文字 aBc 为例,我们需要按下 Caps Lock 键进入大写模式,输入 B,再按一次键回到小写模式,输入 c。正确的做法是使用 shift 键,我们按住 shift 键输入 b 就会得到大写的字母,再松开就回到了小写模式。和 Caps Lock 键相比,少了一次按键
  2. 键盘上的 Ctrl 键位置很差,如果你是用标准的打字手势,你会发现这个键刚好在左手的手心,无论哪个手指都不方便去按它。而 Caps Lock 键则占据了左手小拇指左侧的黄金位置。更重要的是,Ctrl 键的用途非常广,无论是作为 Vim 或者 Emacs 的功能键,还是各种快捷键的修饰键,都是一个非常常用的按键,比如在下一章中就会介绍 Ctrl 键的妙用。

简单总结一下就是:

  1. Caps Lock 键效率低,自身毫无用处
  2. Caps Lock 键占据了黄金的位置
  3. Ctrl 键用处多,使用频率高
  4. Ctrl 键位置差,很不方便按

当这四个理由合在一起时,你很难否认,最好的做法就是:交换 Caps Lock 键和 Ctrl 键。实际上系统的键盘设置里面已经支持了这个操作,但本文会从命令行的角度来聊聊,这样可以方便我们快速搭建 Mac 的工作环境

踩了无数坑以后,终于发现了一个可用的脚本,原理啥的就不说了,因为基本上没有别的用途:

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x7000000E0},{"HIDKeyboardModifierMappingSrc":0x7000000E0,"HIDKeyboardModifierMappingDst":0x700000039}]}'

不过这个脚本有一个大坑,就是虽然立刻就会生效,但是重启后就失效了,所以我们需要在每次启动时都执行一次这个命令。

添加开机任务

很多程序的设置中都可以选择是否开机自动启动,其实除了启动 App,我们可以编写自己的 shell 脚本,并将它设置为启动时自动执行,这样就获得了更大的灵活性,可以完成任何自己想做的操作。

首先我们需要一个配置文件,先给它随便去个名字,比如叫做 com.bestswifter.onlogin.plist。内容如下所示,虽然很多,但绝大多数地方都是模板,我们只需要修改其中一处即可:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>LaunchOnlyOnce</key>
    <true/>
    <key>Label</key>
    <string>com.bestswifter.onlogin</string>
    <key>ProgramArguments</key>
    <array>
        <string>zsh</string>
        <string>-c</string>
        <string>"$HOME/.macbootstrap/onlogin.sh"</string>
    </array>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

注意这里的几个键,LaunchOnlyOnce表示脚本只会执行一次,否则可能会每隔 10s 就执行一次。Label是自定义的名字,理论上来说随便写,不过我建议和文件名保持一致即可,一定不会出错。

array标签里面就是自己要执行的命令了,前两行zsh -c不要动,表示用 zsh 来执行脚本,然后后面写脚本的路径。比如在这个例子里面我就把入口收敛到了自己的onlogin.sh里面,然后再执行任何事情就很方便了。

对于普通用户来说,上述 plist 文件唯一需要修改的就是执行脚本的位置了。修改后后把这个文件拷贝到 ~/Library/LaunchAgents目录下,表示仅对当前用户生效,然后执行:

sudo launchctl load ~/Library/LaunchAgents/com.bestswifter.onlogin.plist

将这个文件注册到系统中。

触摸板优化

首先可以开启轻按点击功能,这样只要轻轻的触碰触摸板,不用真的按下去,就可以点击了,这样真的很轻松:

defaults write com.apple.AppleMultitouchTrackpad Clicking -int 1
defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1

除此以外我们还可以开启三指拖拽功能,这样想移动窗口位置时,只要用三个手指即可拖拽,而不用先点击选中窗口,再拖拽:

defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true
defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerDrag -bool true

用好 F1-F12

默认情况下,键盘最上面一排的 F1- F12 都有各自的作用,从图标上就能看出。比如 F1 和 F2 用来调节屏幕亮度,F5 和 F6 调节键盘灯亮度灯。此时他们可以被理解为特殊按键,更偏向与娱乐,而不是普通的 F1 - F12

对于工作重心在编程的码农来说,这些特殊按键有些浪费,而很多 IDE 提供的快捷键都需要 F1 - F12,尤其在断点调试时格外有用,以 Xcode 为例说明下:

  1. F6:执行下一行代码
  2. F7:跳到代码内部执行,比如当前停在一个函数上,F6 会直接执行这个函数,F7 会跳到函数内部的第一行去执行
  3. F8:跳出当前代码块,和 F7 的作用恰好相反

这里的 F6 是标准按键,需要我们同时按下键盘左下角的 fn 键和顶部的 F6 键才能触发,效率极其低下。然而,作为程序员,我们并不太需要那些花哨的娱乐功能,因此我建议在设置中把 F1 - F12 改为标准按键,如下图所示:

将 F1、F2 等设置为标准功能按键

或者更高效的做法是使用命令行:

defaults write -globalDomain com.apple.keyboard.fnState -int 1

关闭第三方程序验证

有时候,或许是囊中羞涩,或许是国外厂商定价不合理,我们或多或少会下载某些破解版的应用,此时直接打开很可能被系统拒绝,或者报错:无法打开已损坏的安装包。我们可以通过命令行关闭这一保(限)护(制):

sudo spctl --master-disable
defaults write com.apple.LaunchServices LSQuarantine -bool false

关闭镜像验证

在打开 .dmg 格式的安装文件时,默认会先验证镜像,如果文件本身很大,验证的时间会很长,可以输入一下命令关闭验证:

defaults write com.apple.frameworks.diskimages skip-verify -bool true
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true

完全键盘控制

很多操作都会弹出系统的对话框,要求我们确认或者取消

系统弹出对话框

如果没有开启完全键盘控制,我们只能按回车键确认,或者移动鼠标选择取消。如果开启了完全键盘控制,只要按下空格键,就相当于选中蓝色边框的按钮,也就是这里的取消键。按下 Tab 键可以在多个按钮之间切换。

完全键盘控制可以在系统的设置界面开启,也可以直接通过命令行开启:

defaults write NSGlobalDomain AppleKeyboardUIMode -int 3

results matching ""

    No results matching ""