优秀的程序员是如何利用工具来提高工做效率的?

做者 | 码农唐磊php

来源 | 程序猿石头( ID:tangleithu )html

Mac built-in
git

首先介绍的就是我以为应该熟悉 Mac 内置的一些软件及配置。github

trackpad 配置

1. 启用 Tap to click:在 System Preferences -> Trackpad 中启用, 用 tap 替换 click 的操做,明明轻轻 tap 就能够完成的, 为什么还要用力点击才 OK。如今偶尔用其余人电脑非得用力 click 就太纠结了。同时,还有 "右键"功能,Secondary click,用两个手指 tap 弹出右键菜单。web

2. 开启单词选词查询:选中某个中英文单词后,三指 tab 会弹出词典释义。这个在石头哥以前的文章中也有介绍。算法

3. Scroll 方向: 这个本身用习惯了就好。因为我刚开始从 Win 转向 Mac 的时候习惯用 Win 的那种方式,因而就没有开启 Scroll direction: natural,而后也一直沿用至今。chrome

4. 其余手势:有必要熟悉一下,好比知道在 Win 环境下用 win+d 能够显示桌面,相应的功能在 Mac 下如何作。shell

快捷键

做为程序猿,确定离不开各类快捷键。对于 Mac 内置的一些快捷键,咱们仍是颇有必要知道的。基本的复制/粘贴就不说了,经常使用的还有:编程

空格键: 预览
cmd + , : 设置
cmd + -/=: 缩小/放大
ctrl + u: 删除到行首(与zsh冲突, zsh中是删除整行)
ctrl + k: 删除到行尾
ctrl + p/n: 上/下移动一行或者前/后一个命令
ctrl + b/f: 光标前/后移char
esc + b/f: 光标前/后移word(蛋疼不能连续work)
ctrl + a/e: 到行首/行尾
ctrl + h/d: 删前/后字符
ctrl + y: 粘贴
ctrl + w: 删除前一个单词
esc + d: 删后一个单词
ctrl + _: undo
ctrl + r: bck-i-search/reverse-i-search,输入关键字搜索历史命令

上面的这些快捷键特别是在敲命令时仍是颇有用的(可能有的确实是在命令行中才生效),特别是结合 zsh 自动补全等功能。json

比较 DT 的是就是 esc 一块儿用的时候,不能连续使用。举个例子,Terminal 中输入了 git push origin source,光标在末尾,这时按住ctrl 不放, 按一下 w 即向前删除一个单词,第一次按 w 删除 source,再按 w 删除 origin。而 esc + d 不能这样结合使用(以下 gif 连续按就不 work),esc 必须中途释放再按才能 work。不知道是否是石头使用的姿式不对,有知道的朋友,还帮忙指出一下啊。????

bash自动补全

啥?你说上面快捷键 ctrl + w 等不太好按?按键特别别扭?

你须要作的就是将 caps lock 映射为 ctrl, Keyboard -> Modifier Keys修改,目前我笔记本上的 ctrl 键无效。不过,通常状况下我用个人 HHKB,这种映射方式正好符合 HHKB 的布局。其实石头是在买 HHKB 以前就修改的这个映射,因此切换自如。

另外,借助以前介绍的 Karabiner,能够将一些经常使用的方向键(上下左右)从新映射一下, 好比我目前是 s + h/j/k/l 来表示方向,手不用太移动就能直接按方向( HHKB 自己按方向太麻烦, Mac 内置键盘有方向键还须要大幅度移动手),用起来方便多了。

Mac 内置的更多的快捷键列表能够参考 Mac 官网。

其余还有一些经常使用的软件的快捷键,能够用以前介绍的软件 cheetsheet,长按 cmd, 可弹出当前 active 的软件的快捷键。

截图

这个从快捷键中单独列出来了,就强调下这个功能。

cmd + shift + 3 截取整个屏幕。cmd + shift + 4 部分窗口,出现十字供选取,若此时按空格键(这个技能得点赞),会选取当前应用的窗口,再 tap 便可完成截图。

上面快捷键是截图后以文件形式保存在桌面(默认是桌面,固然你也能够本身修改保存位置), 在上面快捷键基础上再同时按 ctrl 就会把图片保存在内存/剪贴板中,直接去相应窗口粘贴便可。

home brew

相似 Centos 的 yum, Ubuntu 的 apt-get,可以方便管理安装软件包。Mac 上相似的应用还有 port, 我刚开始试用过 port,貌似 brew 上的源会多一些。

brew-cask 是 brew 的一个增强版,能够安装一些桌面应用,例如 Chrome 等等之类。

这里就很少介绍了,详情能够到官网查看:

  • brew[2]

  • brew-cask[3]

iTerm2

iTerm2官网有介绍功能。如下是以为可能经常使用的功能。

1.分屏功能

  • cmd + d 竖着分屏, cmd + shift + d 横着分屏

  • cmd + t 新建一个 tab,cmd + num 切换到第 num 个 tab

  • 当前窗口含有分屏时, 经过 cmd + [ 和 cmd + ] 来进行切换小的分屏

2.热键

  • 设置一个热键,好比个人是 alt + 空格, 弹出 iTerm2, 且以半透明的方式显示在当前 active 的窗口上面。

iTerm2 hotkey

3.搜索

  • cmd + f搜索输入关键字后,匹配的会黄色高亮,此时按 tab 或者 shift + tab 会自动向后/前以 word 的方式选中高亮的,并自动 copy 到剪切板。

  • cmd + alt + e,在全部的 tab 中全局搜索,搜索出候选项后,再选择你想要进入的 tab。

iTerm2 search

4.密码

  • 这个功能可能会经常使用,程序猿得常常登陆到远程服务器吧,密码又记不住。能够把经常使用密码保存起来,须要输入密码的时候,用快捷键 Option + cmd + f 弹出密码管理器,选择一个自动输入便可。

密码管理

5.其余

  • 新版本的 iTerm2 还支持直接在控制台里 ls 图片文件(图片显示在控制台里)。(如上图下半部分,连 gif 都支持)

  • 自动识别控制台里的内容,如含有连接或者本地文件路径能够用 cmd 加点击的方式直接打开连接或者文件(以下图上半部分)。这个功能很重要呢,好比在编译过程当中,出现了 warning 或者 error,通常会打印出具体文件路径,此时直接从控制台就能打开文件进行 fix 了。

  • 自动补全,iTerm2 自己是支持自动补全的(cmd + ;),不过建议直接结合后面的 zsh 使用。cmd + shift + h 剪贴板历史(下图最后一行)。

  • 一些高级的功能目前可能处于测试版本,你若用的稳定版是不支持的,须要到官网下测试版。还有更多的功能请到 iTerm2 官网探索吧。

iTerm2 imgcat

zsh

这个墙裂推荐啊。结合oh my zsh,丰富的[插件资源(zsh)](https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins-Overview "插件资源(zsh "插件资源(zsh)")")。

语法高亮,自动补全等特别好,在此推荐的几个插件或功能。

1. git: 当前目录如果在一个 git repo 下面的话,会自动显示当前的分支信息等等。而后能够本身搞一些 alias,简写命令,好比石头经常使用的一些:

alias gs='git status'
alias gb='git branch -va'
alias gco='git checkout'
alias ga='git add'
alias gc='git commit -m'
alias gp='git push'
alias gfom='git fetch origin master'
alias gfod='git fetch origin develop'
alias grod='git rebase origin/develop'
alias grom='git rebase origin/master'

2. autojump: 这个也超级赞。会自动记录你 cd 过的目录,下次你直接 j keyword 就会自动 cd 到以 keyword 匹配的目录。输入 d 会展现当前会话访问过的目录,而后对应目录有标号,接下来按标号便可跳转。

3.osx: 举个最简单的例子,好比你如今正在 finder 中浏览一个很深的目录,如今忽然想 cd 到这个目录去作一些命令操做。若是你用 Xtrafinder 这样的软件的话倒有这样的功能,若是配上这个插件,你直接输入 cdf (cd finder) 就自动 cd 到 finder 打开的目录下。

4.zsh-autosuggestions,以下图所示,我在 app-in-mac 这个目录下,刚输入了 git, 此时光标还在 p 前面, zsh 就已经自动给我补全了 git push origin source, 此时我只要按 ctrl + e 跳转到行尾(因此熟悉上文中的快捷键颇有必要啊),回车便可执行命令了。

iTerm2 zsh plugins

更多的仍是请到官网查看。

sublime text

文本编辑器,也有丰富的插件支持,直接到 sublime 官网看吧。这个 App,我用得也不是不少。

这里分享一个小的功能,怎么在命令行用 sublime 打开特定的文件。其实就是添加一个软链便可(直接 open filename 会以文件默认关键的软件打开)。

➜  app-in-mac git:(source) ✗ subl dungeon-game.cpp
➜  app-in-mac git:(source) ✗ which subl
/usr/local/bin/subl
➜  app-in-mac git:(source) ✗ ls -la /usr/local/bin/subl
lrwxr-xr-x  1 tanglei  admin  62  1 24  2016 /usr/local/bin/subl -> /Applications/Sublime Text.app/Contents/SharedSupport/bin/subl

Vim

介绍 Vim 的文章也不少了,这里就不详细展开了。分享下石头用的部分插件。为了让多台电脑同步个人 vim 配置/插件等,我直接放 github 了( ref vimconfigs ),不一样电脑只须要再建一个软链到 github 中的 vimrc 便可。

vim 自动补全

  • Vundle/Pathogen: 插件管理,我用的Pathogen,直接将下面 github repo clone 到 ~/.vim/bundle/ 目录下便可。

  • NERDTree: 文件目录树 NERDTree。

  • YouCompleteMe: YouCompleteMe 自动补全,对C系列,结合其余的可支持 Java/Python/Js 等,跪求 Scala 支持。

  • ctrlp.vim: 快速搜索文件 ctrlp。

  • minibufexpl.vim: 会把最近打开的文件列出来方便跳转,minibufexpl.vim github src。

  • conque-term: shell 跑在 vim 里面,conque-term github src。

  • ag: 代码搜索, 可结合 ctrlp.vim,若是后者搜索太慢的话, ag github src。

  • tagbar/taglist: 标签,能显示类结构信息等,tagbar github src。

  • vim-surround:  处理诸如 (), "", [] 等配对信息,[vim-surround github src](https://github.com/tpope/vim-surround.git] 等配对信息,[vim-surroundgithub src" "]` 等配对信息,[vim-surround github src"), vim-surround ref。

  • vim-easymotion: 快速跳转,关键字后会给匹配到的标记,再选标记并跳转(相似后文介绍 Chrome 插件的 Vimium 中的连接标记并跳转功能,按键 f 会将本文全部连接突出显示并用字母标记,而后按相应的字母则会新开标签页打开)。vim-easymotion github src, vim-easymotion ref。

  • vim-powerline: 加强状态栏 vim-powerline github src。

  • vim-indent-guides: 缩进可视化,vim-indent-guides github src。

具体效果等配置方法能够参考下面的两篇文章,插件具体用法可阅读具体插件的 doc。

Reference

  • 将你的 Vim 打形成轻巧强大的 IDE

  • 所需即所获:像 IDE 同样使用 vim

Dash

其实前文介绍中 Alfred 已经提到过,这里再介绍一下——程序猿必备神器。

内置各类语言,各类环境的各类文档。该 App 还提供各类 API 供其它工具交互使用。例如 Vim (不是想象当中自动补全功能,只是可以快捷地搜索 API ), Sublime 等。 (p.s 要是有人写了一个 Vim 插件,可以支持调用 dash 的 API(若是有的话) 自动补全代码, 那应该会很受欢迎的)。

dash 搜索 API

dash

其它App


chrome

插件

  • AdBlock: 广告屏蔽;

  • EditThisCookie: 修改 cookie;

  • Evernote Web Clipper: 印象笔记;

  • JSONView and JSONLint for Google Chrome™: 请求返回的 json 进行 beautify 方便查看;

  • Markdown Here: 在富文本输入markdown, 渲染成 html;

  • Markdown Preview Plus: 渲染 .md 文件,至关于 preview markdown;

  • Open Screenshot: 网页截图,可以自动下拉截长图;

  • Postman: 请求伪造/抓包等,也能够用 curl;

  • Proxy SwitchySharp: proxy 切换;

  • RescueTime: 前文有介绍的 RescueTime;

  • undirect: google/baidu 搜索结果,点击直达网站,这个貌似不太好用了。征求替代品;

  • Vimium: 操做 vim 同样操做浏览器,移动查找等功能,还有前文提到的快速标记连接并跳转;

Charles

类 Windows 下 Fiddler 抓包应用。

相关命令 tcpdump。

其它有用的命令行

一些好用的命令(基本的什么 ls/cd/cp/rm 之类的这里就直接忽略了),我以为做为程序猿仍是应该了解,至少只当某个场景下直接用相应的命令就能解决。具体参数能够再 --help 或者 man commond  再看。

  • screen: 特别是 ssh 到登陆远程时用以管理会话。

  • curl: 网络请求,相关的还有 traceroute, dig 等。

  • find: 文件查找。

  • grep/zgrep/zcat: 查看日志的时候用。

  • awk: 这个自己就很强大了,具体编程语法不用太掌握但能够了解一些基本的用法,帮助你拼接一些语句。好比石头经常使用来批量拼接一些 SQL 语句。

  • sed: 文本替换,还有 tr,注意 sed 的语法 Mac 和 通常 Linux 还有些不同( 好比原文替换的时候 mac 里须要用参数 -i ""), 好比以前石头迁移 wordpress 到 jekyll[22] 上的时候须要将一些连接总体替换成新的路径。

  • cut: 按列取数据,awk 也能够。

  • sort: 这个就很少说了。

  • uniq: 通常和 sort 一块用,只能去重相邻的行。

  • diff: 比较文件,相似的还有 comm (输出3列,分别是: 只在文件1, 只在文件2和两个文件都在的行)。

  • paste: 两个文件按列拼接。

  • od: 以16/8/2进制查看文件。

  • wc: 统计文件字节数/字数/行数。

结合这些命令可能就能完成某些复杂的功能,举个例子:

如线上的web 访问日志会记录 请求时间,请求路径,参数 等等。如今须要统计当天请求路径为 A,排名前10的参数,就能够 grep 路径 A | cut 取出想要的数据列 | sort | uniq 之类的。

或者好比统计 http 404 请求最多的10个路径。再好比,随机生成3个长度为8包含字母数字的字符串(偶尔会用到,好比各类生产 secret key 的时候),直接用以下命令便可。

➜  _includes git:(source) ✗ cat /dev/urandom | sed 's/[^a-zA-Z0-9]//g' | head -n 3 | cut -c 1-8
MaL6nEmZ
00m2Ub19
rsc4AOQm

石头以前写过一篇综合应用,就是用 shell 脚原本完成一些统计功能。文章在这里“大数据”分析首批北京积分落户同窗,文中介绍了如何根据一个 json 文件如何快速统计取得户口名额最多的 top10 公司,获取取得户口名额的人中姓氏最多的等等。

其它的可能较少用,但一旦用,能省很多时间。网上也有一些 online 的工具,但哪有这个快准狠。

  • openssl sha1/aes-256-ecb/des/base64 等等: 好比常常要和其余服务联调,有验证签名等,就能够临时用 shell 写个脚本,验证一下看看 API 的返回值和效果。

  • md5/base64: 常见的 md5,base64 编码。

  • sips: scriptable image processing system 好比批量处理图片大小,压缩等等。


更多精彩推荐
☞太牛了!30 年开源老兵,10 年躬耕 OpenStack,开源 1000 万行核心代码!
☞TikTok 到底卖的是什么?
☞雷军:小米MIX α量产难度太大已放弃;iPhone 12系列将支持北斗导航;TypeScript 4.0 RC发布|极客头条
☞收藏!美国博士明确给出Python的高效学习技巧
☞垃圾回收策略和算法,看这篇就够了
☞2020 以太坊技术及应用大会·中国圆满落幕,大咖们的演讲精华都在这里了!
点分享点点赞点在看