如何大幅度提高 Mac 开发效率
happy-boy
8年前
<p>关于 Mac 工作效率的文章一直层出不穷,然而并非所有内容都适合程序员,比如某些 Unix 命令,其实使用频率非常低。作为一名初级 iOS 程序员,我尝试着和大家分享一些能够切实提高我们开发效率的小技巧。</p> <p>我是无鼠标主义者,任何需要鼠标的操作在我看来都是极为低效的。Mac 的触摸板非常好用,但是我依然在尝试避免使用触摸板。因为双手保持在键盘区域更适合编程。虽然触摸板不可能被避免(比如浏览网页),但我希望至少在 Xcode 中不使用它。</p> <p>所以,本文会和大家分享一些系统级快捷键,Xcode、Chrome、iTerm 等应用中的快捷键,以及常用的工具,比如 Vim 和 Git 的使用。这里面除了 Xcode,其他都是通用的,如果你不是 iOS 开发者,建议自行查阅相关 IDE 的快捷键。</p> <h2>综述</h2> <p>一部分人可能认为,快捷键用起来很别扭,还不如自己用触摸板(鼠标)来得方便。然而你应该意识到,使用触摸板的效率是有上限的,当你熟悉快捷键后,速度远比现在快得多。</p> <p>这一点,在学习 vim 时尤其重要。你不应该关注完成一个命令需要多久,而应该关注需要多少个按键,你可以认为在形成肌肉记忆后,按键的思考时间为0。所以我们得出一个结论:</p> <p>总时间 = 按键数 * 一个常数(表示单次按键时间)。</p> <p>因此,评价 vim 中一个操作的优劣,通常用 <strong>高尔夫分数</strong> 来表示,它表示完整这个操作需要几次按键。</p> <p>但是!!!快捷键是提高效率的手段,但它不会提高代码质量。既要坚持学习,也要适可而止,万万不可主次颠倒。</p> <p>关键不在于你学会了多少快捷键,而是你有多少工作是可以通过快捷键来完成的,目的在于提高效率,仅此而已。</p> <p>一种很强大,通用的的方法是 设置->键盘->快捷键->应用快捷键 然后精确匹配应用中的快捷键名,这个通常需要配合 CheetSheet 来实现。当你觉得某个快捷键不好用的时候,也可以通过这种方式去修改。</p> <p><img src="https://simg.open-open.com/show/f0d244ecfffef59a7be4c2bf2ca173d2.png"></p> <p>在设置快捷键时,需要避免全局快捷键和应用快捷键冲突,同时也要注意一些常用操作在多个应用内保持统一。</p> <p>我建议将 Caps Lock 与 Ctrl 键对调,因为大小写切换键的使用频率非常低,而 Ctrl 的使用频率显然高于他,因此有必要将大小写切换键放到最不容易触碰到的地方。</p> <p>下面我会介绍一些我常用的快捷键,它们大部分是系统自带的,也有少部分是我自己定义的。</p> <h2>入门</h2> <ol> <li>绝大多数应用的 preference 页面都是通过 Command + , 打开的。</li> <li>剪切,复制,粘贴,撤销,重做,光标移动到行首和行尾,这些基础操作必须掌握。</li> </ol> <h2>Snap</h2> <p>相信很多人都有这样的烦恼:如果应用不全屏,那么桌面上显示的窗口太多,每个窗口的显示内容不够多。如果应用全屏,那么切换应用是很麻烦的。要么用 Command + Tab ,要么手势滑动,但无论哪一种,时间复杂度都是 O(n)。有没有 O(1) 的方法呢?答案是使用神器: <strong>snap</strong></p> <p>我主要是以应用首字母或者关键字母作为标识,配合 Command + Shift 前缀:</p> <ol> <li><strong>Xcode: J </strong></li> <li><strong>Chrome: K </strong></li> <li><strong>iTerm: L </strong></li> <li>Markdown 相关: M</li> <li>QQ: Y</li> <li>微信: U</li> <li>SoureceTree: S</li> <li>MacVim: V</li> <li>Evernote: E</li> <li>Dock: 1/2/3/4 :因工作需要,我常用的是备忘录,邮件,日历,设置</li> <li>; 这个键我没有启用,但它实际上是一个非常方便的快捷键。</li> </ol> <p>Dock 栏应用的选择需要一定的权衡。显然最快的方式是只按 Command ,但是这种全局快捷键会导致大量冲突。而 Controll 和 Option 键又非常难以触摸,所以我选择了 Command + Shift 作为所有应用的快捷键前缀。</p> <p>注意避免字母 o 和 f ,它们在 Xcode 中有特殊的用处。</p> <p><img src="https://simg.open-open.com/show/d17700616562d50e9ab6bd45ebd3f8db.png"></p> <h2>Xcode 快捷键</h2> <p>编译、运行,Instruments,单元测试,暂停这些基本操作就不解释了。我把一些自认为比较有用的命令加粗表示:</p> <h3>文件编辑</h3> <ol> <li>Command + [ 和 Command + ] 左右缩进</li> <li>Command + Option + [ 和 Command + Option + ] 当前行上下移动</li> <li>Command + Option + Left/Right 折叠、展开当前代码段</li> </ol> <h3>文件跳转</h3> <ol> <li><strong>Command + Control + Up/Down .h 和 .m 文件切换 </strong></li> <li><strong>Command + Control + Left/Right 浏览历史切换 </strong></li> <li>Command + Control + j 跳转到定义处</li> <li>Command + Option + j 跳转到目录搜索</li> <li>Command + 1/2/3/4/5 跳转到左侧不同的栏目</li> <li><strong>Comannd + Shift + o 文件搜索 </strong></li> </ol> <h3>搜索</h3> <ol> <li>Comannd + Shift + f 全局搜索</li> <li>Command + e 搜索当前选中单词</li> <li>Command + g 搜索下一个</li> </ol> <h3>tab</h3> <ol> <li>Command + t 新建一个 tab</li> <li>Command + w 关闭当前 tab</li> <li>Command + Shift + [ 和 Command + Shift + ] 左右切换 tab</li> </ol> <h3>Scheme</h3> <ol> <li>Command + shift + , 编辑 scheme,选择 debug 或 release</li> </ol> <h3>调试</h3> <p>F6 :跳到下一条指令 F7 :跳进下一条指令(它会跳进内部函数,具体效果自测) Control + Command + y 继续运行</p> <h3>其他</h3> <ol> <li>Command + k 删除 Console 中的内容</li> <li>Command + d 打开/关闭 控制台(修改系统快捷键:Show/Hide Debug Area)</li> </ol> <p>获得更全面的快捷键介绍,请参考: <a href="/misc/goto?guid=4959673871989514637" rel="nofollow,noindex">这篇文章</a></p> <h2>Vim 常用快捷键</h2> <p>入门指南: <a href="/misc/goto?guid=4958189310239894726" rel="nofollow,noindex">简明 Vim 练级攻略</a> 在我的 git 上有一份 Vim 的配置,先 <a href="/misc/goto?guid=4959673872109468629" rel="nofollow,noindex">下载</a> 到 ~/ 目录下,然后建立软连接:</p> <pre> rm .vimrc ln -s .vim/.vimrc .vimrc </pre> <p>推荐一个 Mac 上的 Vim 软件:MacVim,它比在终端中看 Vim 更好一些。打开 MacVim 后,输入以下命令安装插件:</p> <pre> :BundleInstall </pre> <h3>进入输入模式</h3> <ol> <li>i 在光标前面进入输入模式, a 在光标后面进入输入模式</li> <li>I 在行首进入输入模式, A 在行尾进入输入模式</li> <li>o 在下一行行首进入输入模式, O 在上一行行首进入输入模式</li> </ol> <h3>文本操作</h3> <ol> <li>yy 复制当前行, dd 剪切当前行, p 复制。注意这里用的都是 Vim 自带的剪贴板。</li> <li>U 撤销,** Ctrl + r 重做</li> <li>x 删除光标所在的字母</li> <li>cae 或 bce 删除当前光标所在的单词,并进入编辑模式</li> <li>数字+命令 重复命令 n 次,比如 3dd</li> </ol> <h3>光标移动</h3> <ol> <li>^ 到本行开头, $ 到本行末尾</li> <li>/111 或 111G 跳转到 111 行, gg 第一行, G 最后一行。</li> <li>e 移动到本单词的结尾, w 移动到下一个单词的开头。</li> <li>% 匹配当前光标所在的括号(小括号,中括号,大括号)</li> <li>* 查找与光标所在单词相同的下一个单词</li> <li>f + 字母 跳转到字母第一次出现的位置, 2fb 跳转到字母 b 第二次出现的位置</li> <li>t + 字母 跳转到字母第一次出现的前一个位置, 3ta 跳转到字母 a 第三次出现的前一个位置</li> <li>f 和 t 换成大写,表示反方向移动查找。 dt + 字母 表示删除字母前的所有内容。</li> </ol> <h3>举一反三</h3> <ol> <li><start position><command><end position> 比如 0y$ ,从行首复制到行尾, ye 表示<br> 从当前位置复制到本单词结尾。</li> <li> <p><action>a<object> 或 <action>i<object></p> <p>action 可以是任何的命令,比如 d , y , v 等 object 可以是 w 单词, p 段落,或者是一个具体的字母 a 和 i 的区别在于 i 表示 inner,只作用于内部,不含两端。</p> <p>思考一下,有多少种方法可以删除光标当前所在单词?</p> <p>答案: diw , daw , caw , ciw , bce , bde 。</p> <p>思考一下他们的原理,后两者不太推荐(有可能跳到前一个单词)。</p> <p>如果是选中当前单词呢?</p> </li> </ol> <p>除了以上基本语法,我还在整理一套 《Vim 基础练习题》,等完成之后会与大家分享。</p> <h3>实战</h3> <ol> <li> <p>给多行添加注释:</p> <ol> <li>v :进入可视状态</li> <li>nj : 向下选择n行, 或者输入 Shift ] 跳到段尾</li> <li>Command + / 添加注释</li> </ol> </li> <li> <p>在 MacVim 中, git blame 无比清晰:</p> </li> </ol> <p><img src="https://simg.open-open.com/show/8b7002402e16ee174068ca740728d0f7.png"></p> <h2>Chrome</h2> <ol> <li><strong>Command + l 焦点移动到地址栏 </strong></li> <li><strong>Shift + Option + Delete/Left </strong> 向左删除/选中一个单词(可以自定义为 Ctrl-w )</li> <li>Command + y 搜索历史</li> <li><strong>Command + 数字 快速切换 tab </strong></li> <li>Command + shift + [] 左右切换 tab</li> <li>Command + t/w 新建/关闭 tab</li> <li>Command + e/g 搜索选中,前往下一个,或者用 Command + f 和回车。</li> </ol> <p>可以看到,Chrome 中涉及到 tab 的操作应该与 Xcode 尽量保持一致。</p> <h2>iTerm2</h2> <ol> <li><strong>Ctrl w 删除前一个单词 </strong></li> <li>Command + r 清除屏幕上的内容</li> <li>Command + t/w 打开/关闭 tab</li> <li><strong>Command + 数字 切换到第 n 个 tab </strong></li> <li>双击 选中一个单词,自动复制</li> </ol> <p>iTerm 可以通过 Command + shift + [] 来左右切换 tab,也可以通过 Command + Left/Right 切换,后者其实是多余的,而且不符合习惯。</p> <p>所以参考 <a href="/misc/goto?guid=4959673872189705552" rel="nofollow,noindex">这篇文章</a> 或者自行查阅 Google,在 Preference->Keys->Global Shortcut Keys 中,设置好 Command 加上左右键,和删除键的对应操作。</p> <h2>Git</h2> <p><a href="/misc/goto?guid=4959556515619783942" rel="nofollow,noindex">git</a> 的本质是对指针的操作。</p> <p>掌握git的 add 、 commit 、 stash 、 pull 、 fetch 这些基本操作</p> <p>理解什么是本地仓库,什么是远程仓库,理解多人开发时的 merge 和 conflict 的概念</p> <p>掌握分支的使用,掌握 checkout 命令的使用</p> <p>熟练掌握 <a href="/misc/goto?guid=4959666163291493578" rel="nofollow,noindex"> git rebase </a> 操作,包括 <a href="/misc/goto?guid=4959621292137485463" rel="nofollow,noindex"> git rebase -i </a> 和 git rebase --onto ,掌握一种 git 工作流</p> <h2>Oh my zsh</h2> <p>首先 <a href="/misc/goto?guid=4959673872365403227" rel="nofollow,noindex">下载 oh-my-zsh 的配置</a> 到 ~/ 目录下,然后在命令行中执行以下操作:</p> <pre> rm .zshrc ln -s .sys.config/.zshrc .zshrc </pre> <p>然后重启 iTerm。你可以根据自己的喜好,前往 ~/.sys.config/setting/git.zh 配置 git 命令的别名,比如;</p> <pre> alias gcm='git commit -m' alias gignore='git update-index --assume-unchanged' alias gpush='git push origin HEAD:dev;' alias go='git checkout' </pre> <h2>More</h2> <p>据说 Alfred 是效率神器,鉴于我除了写代码,一般不怎么玩 mac,所以也就没有去了解。如果有更多好的快捷键和应用,欢迎与我交流。</p> <p> </p> <p>来自: <a href="/misc/goto?guid=4959673872457174118" rel="nofollow">https://bestswifter.com/efficient-mac/</a></p> <p> </p>