優(yōu)秀的程序員是如何利用工具來提升工作效率的?
首先介紹的就是我覺得應該熟悉 Mac 內置的一些軟件及配置。
trackpad 配置
啟用 Tap to click: 在
System Preferences -> Trackpad中啟用, 用 tap 替換 click 的操作,明明輕輕 tap 就可以完成的, 為何還要用力點擊才 OK。現在偶爾用其他人電腦非得用力 click 就太糾結了。同時,還有 "右鍵"功能, Secondary click, 用兩個手指 tap 彈出右鍵菜單。
開啟單詞選詞查詢: 選中某個中英文單詞后,三指 tab 會彈出詞典釋義。

Scroll 方向: 這個自己用習慣了就好。由于我剛開始從 Win 轉向 Mac 的時候習慣用 Win 的那種方式,于是就沒有開啟
Scroll direction: natural, 然后也一直沿用至今。其他手勢: 有必要熟悉一下,比如知道在 Win 環(huán)境下用
win+d可以顯示桌面,相應的功能在 Mac 下如何做。
快捷鍵
作為程序猿,肯定離不開各種快捷鍵。對于 Mac 內置的一些快捷鍵,我們還是很有必要知道的。基本的復制/粘貼就不說了,常用的還有:
空格鍵:?預覽
cmd?+?,?:?設置
cmd?+?-/=:?縮小/放大
ctrl?+?u:?刪除到行首(與zsh沖突,?zsh中是刪除整行)
ctrl?+?k:?刪除到行尾
ctrl?+?p/n:?上/下移動一行或者前/后一個命令
ctrl?+?b/f:?光標前/后移char
esc?+?b/f:?光標前/后移word(蛋疼不能連續(xù)work)
ctrl?+?a/e:?到行首/行尾
ctrl?+?h/d:?刪前/后字符
ctrl?+?y:?粘貼
ctrl?+?w:?刪除前一個單詞
esc?+?d:?刪后一個單詞
ctrl?+?_:?undo
ctrl?+?r:?bck-i-search/reverse-i-search,輸入關鍵字搜索歷史命令
上面的這些快捷鍵特別是在敲命令時還是很有用的(可能有的確實是在命令行中才生效),特別是結合 zsh 自動補全等功能。
比較 DT 的是就是 esc 一起用的時候,不能連續(xù)使用。舉個例子,Terminal 中輸入了 git push origin source,光標在末尾,這時按住ctrl 不放, 按一下 w 即向前刪除一個單詞,第一次按 w 刪除 source,再按 w 刪除 origin。而 esc + d 不能這樣結合使用(如下 gif 連續(xù)按就不 work),esc 必須中途釋放再按才能 work。不知道是不是石頭使用的姿勢不對,有知道的朋友,還幫忙指出一下啊。?

啥?你說上面快捷鍵 ctrl + w 等不太好按?按鍵特別別扭?
你需要做的就是將 caps lock 映射為 ctrl, Keyboard -> Modifier Keys修改,目前我筆記本上的 ctrl 鍵無效。不過,一般情況下我用我的 HHKB,這種映射方式正好符合 HHKB 的布局。其實石頭是在買 HHKB 之前就修改的這個映射,所以切換自如。
另外,借助Karabiner,可以將一些常用的方向鍵(上下左右)重新映射一下, 比如我目前是 s + h/j/k/l 來表示方向,手不用太移動就能直接按方向(HHKB 本身按方向太麻煩, Mac 內置鍵盤有方向鍵還需要大幅度移動手),用起來方便多了。
Mac 內置的更多的快捷鍵列表可以參考 Mac 官網[1]
截圖
這個從快捷鍵中單獨列出來了,就強調下這個功能。
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官網[4]有介紹功能。
以下是覺得可能常用的功能。
分屏功能
cmd + d豎著分屏,cmd + shift + d橫著分屏cmd + t新建一個 tab,cmd + num切換到第 num 個 tab當前窗口含有分屏時, 通過 cmd + [和cmd + ]來進行切換小的分屏熱鍵 設置一個熱鍵,比如我的是
alt + 空格, 彈出 iTerm2, 且以半透明的方式顯示在當前 active 的窗口上面。

搜索 cmd + f搜索輸入關鍵字后,匹配的會黃色高亮,此時按tab或者shift + tab會自動向后/前以 word 的方式選中高亮的,并自動 copy 到剪切板。cmd + alt + e,在所有的 tab 中全局搜索,搜索出候選項后,再選擇你想要進入的 tab。

密碼
這個功能可能會常用,程序猿得經常登錄到遠程服務器吧,密碼又記不住。可以把常用密碼保存起來,需要輸入密碼的時候,用快捷鍵 Option + cmd + f 彈出密碼管理器,選擇一個自動輸入即可。

其他 新版本的 iTerm2 還支持直接在控制臺里 ls 圖片文件(圖片顯示在控制臺里)。(如上圖下半部分,連 gif 都支持) 自動識別控制臺里的內容,如含有鏈接或者本地文件路徑可以用 cmd加點擊的方式直接打開鏈接或者文件(如下圖上半部分)。這個功能很重要呢,比如在編譯過程中,出現了 warning 或者 error,一般會打印出具體文件路徑,此時直接從控制臺就能打開文件進行 fix 了。自動補全,iTerm2 本身是支持自動補全的( cmd + ;),不過建議直接結合后面的zsh 使用。cmd + shift + h剪貼板歷史(下圖最后一行)。一些高級的功能目前可能處于測試版本,你若用的穩(wěn)定版是不支持的,需要到官網下測試版。還有更多的功能請到 iTerm2 官網探索吧。

?
zsh
這個墻裂推薦啊。結合oh my zsh[5],豐富的[插件資源(zsh)](https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins-Overview "插件資源(zsh "插件資源(zsh)")")。
語法高亮,自動補全等特別好,在此推薦的幾個插件或功能。
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'
autojump: 這個也炒雞贊。會自動記錄你
cd過的目錄,下次你直接j keyword就會自動cd到以 keyword 匹配的目錄。輸入d會展示當前會話訪問過的目錄,然后對應目錄有標號,接下來按標號即可跳轉。osx: 舉個最簡單的例子,比如你現在正在 finder 中瀏覽一個很深的目錄,現在突然想 cd 到這個目錄去做一些命令操作。如果你用 Xtrafinder 這樣的軟件的話道有這樣的功能,如果配上這個插件,你直接輸入
cdf(cd finder)就自動cd到 finder 打開的目錄下。zsh-autosuggestions,如下圖所示,我在 app-in-mac 這個目錄下,剛輸入了
git, 此時光標還在p前面, zsh 就已經自動給我補全了git push origin source, 此時我只要按ctrl + e跳轉到行尾(所以熟悉上文中的快捷鍵很有必要啊),回車即可執(zhí)行命令了。

更多的還是請到官網查看。
? ?
sublime text
文本編輯器,也有豐富的插件支持,直接到sublime官網[6]看吧。這個 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[7]),不同電腦只需要再建一個軟鏈到github 中的 vimrc 即可。

Vundle/Pathogen: 插件管理,我用的Pathogen,直接將下面 github repo clone 到 ~/.vim/bundle/目錄下即可。NERDTree: 文件目錄樹NERDTree[8] YouCompleteMe:YouCompleteMe[9] 自動補全,對C系列,結合其他的可支持 Java/Python/Js 等, ?跪求 Scala 支持 ctrlp.vim:快速搜索文件 ctrlp[10] minibufexpl.vim: 會把最近打開的文件列出來方便跳轉,minibufexpl.vim github src[11]conque-term: shell 跑在 vim 里面,conque-term github src[12] ag: 代碼搜索, 可結合 ctrlp.vim,如果后者搜索太慢的話,ag github src[13] tagbar/taglist: 標簽,能顯示類結構信息等,tagbar github src[14] vim-surround: ?處理諸如 (), "", []等配對信息,[vim-surround github src](https://github.com/tpope/vim-surround.git] 等配對信息,[vim-surroundgithub src" "]` 等配對信息,[vim-surround github src"),vim-surround ref[15]vim-easymotion: 快速跳轉,關鍵字后會給匹配到的標記,再選標記并跳轉(類似后文介紹 Chrome 插件的Vimium中的鏈接標記并跳轉功能,按鍵 f會將本文所有鏈接突出顯示并用字母標記,然后按相應的字母則會新開標簽頁打開)。vim-easymotion github src[16],vim-easymotion ref[17]vim-powerline: 增強狀態(tài)欄vim-powerline github src[18] vim-indent-guides: 縮進可視化,vim-indent-guides github src[19]
具體效果等配置方法可以參考下面的兩篇文章,插件具體用法可閱讀具體插件的 doc。
Reference
將你的 Vim 打造成輕巧強大的IDE[20] 所需即所獲:像 IDE 一樣使用 vim[21]
Dash
其實介紹前文 介紹 Alfred 已經提到過,這里再介紹一下,程序猿必備神器。
內置各種語言,各種環(huán)境的各種文檔。該 App 還提供各種 API 供其他工具交互使用。例如 Vim(不是想象當中自動補全功能,只是能夠快捷地搜索 API), Sublime 等。?(p.s 要是有人寫了一個 Vim 插件,能夠支持調用 dash 的 API(如果有的話) 自動補全代碼, 那應該會很受歡迎的)


其他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 切換; 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: 統(tǒng)計文件字節(jié)數/字數/行數
結合這些命令可能就能完成某些復雜的功能,舉個例子:
如線上的web 訪問日志會記錄 請求時間,請求路徑,參數 等等。現在需要統(tǒng)計當天請求路徑為 A,排名前10的參數,就可以 grep 路徑A | cut 取出想要的數據列 | sort | uniq 之類的。
或者比如統(tǒng)計 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其他的可能較少用,但一旦用,能省不少時間。網上也有一些 online 的工具,但哪有這個快準狠。
openssl sha1/aes-256-ecb/des/base64 等等: 比如經常要和其他服務聯調,有驗證簽名等,就可以臨時用 shell 寫個腳本,驗證一下看看 API 的返回值和效果。 md5/base64: 常見的 md5,base64 編碼。 sips: scriptable image processing system比如批量處理圖片大小,壓縮等等。
參考資料
Mac 官網:?https://support.apple.com/zh-cn/HT201236
[2]brew:?http://brew.sh/
[3]brew-cask:?https://caskroom.github.io/
[4]iTerm2官網:?http://www.iterm2.com/features.html
[5]oh my zsh:?http://ohmyz.sh/
[6]sublime官網:?http://www.sublimetext.com/
[7]ref vimconfigs:?https://github.com/tl3shi/vimconfigs.git
[8]NERDTree:?https://github.com/scrooloose/nerdtree.git
[9]YouCompleteMe:?https://github.com/Valloric/YouCompleteMe
[10]快速搜索文件 ctrlp:?https://github.com/ctrlpvim/ctrlp.vim
[11]minibufexpl.vim github src:?https://github.com/fholgado/minibufexpl.vim.git
[12]conque-term github src:?https://github.com/tl3shi/conque-term.git
[13]ag github src:?https://github.com/rking/ag.vim.git
[14]tagbar github src:?https://github.com/majutsushi/tagbar.git
[15]vim-surround ref:?http://zuyunfei.com/2013/04/17/killer-plugin-of-vim-surround/
[16]vim-easymotion github src:?https://github.com/easymotion/vim-easymotion.git
[17]vim-easymotion ref:?http://www.wklken.me/posts/2015/06/07/vim-plugin-easymotion.html
[18]vim-powerline github src:?https://github.com/Lokaltog/vim-powerline.git
[19]vim-indent-guides github src:?https://github.com/nathanaelkane/vim-indent-guides
[20]將你的 Vim 打造成輕巧強大的IDE:?http://yuez.me/jiang-ni-de-vim-da-zao-cheng-qing-qiao-qiang-da-de-ide/
[21]所需即所獲:像 IDE 一樣使用 vim:?https://github.com/yangyangwithgnu/use_vim_as_ide
[22]石頭遷移 wordpress 到 jekyll:?https://www.tanglei.name/blog/give-up-wordpress-to-jekyll.html
有道無術,術可成;有術無道,止于術
歡迎大家關注Java之道公眾號
好文章,我在看??
