macOS 效率系列 02: 在終端 Terminal 中運(yùn)鍵如飛

image

光陰荏苒絮蒿,日月如梭僵朗。

如何把有限的時(shí)間和精力用在有意義的事情上是人類無法逃避的問題壤蚜。作為 macOS daily user转绷,高效用好 macOS 系統(tǒng)及其生態(tài)中的各種工具可以讓我們少浪費(fèi)一些生命在無意義的重復(fù)勞動(dòng)中。

關(guān)于 macOS 的效率工具網(wǎng)絡(luò)上已經(jīng)有非常多的文章可供參考戈毒,本系列不過總結(jié)一二艰猬,希望能對讀者有所幫助。

一埋市、Terminal, 終端, Shell

早期的終端

終端(computer terminal)是一個(gè)歷史遺留下來的名詞冠桃,早期的終端機(jī)大概長這樣。這個(gè)不是個(gè)人電腦道宅,只是一臺(tái)顯示器食听,接了一個(gè)鍵盤(DEC VT100)。背后有一臺(tái)巨大的主機(jī)污茵,對接很多臺(tái)終端樱报,這樣每個(gè)終端就是一個(gè)輸入輸出設(shè)備。

今天大家都在用個(gè)人電腦(PC)泞当,普通用戶基本不會(huì)遇到多終端共享同一個(gè)主機(jī)的情況迹蛤。但也并不是完全沒有終端,比如車站的刷卡機(jī)就是一臺(tái)終端機(jī)襟士。

車站的終端機(jī)

所以現(xiàn)在各種類 Unix 系統(tǒng)——比如 Linux 的各種發(fā)行版盗飒,和基于 FreeBSD 的 macOS——都在 UI 層虛擬了一個(gè)終端。

當(dāng)你打開虛擬終端的時(shí)候陋桂,和古老的物理終端一樣逆趣,會(huì)運(yùn)行一個(gè)最基本的人機(jī)交互程序,稱為 Shell嗜历。

在 Shell 中輸入一行命令宣渗,它就解釋執(zhí)行這一行,然后顯示結(jié)果秸脱。另外 Shell 也支持批量處理命令落包,需要寫一個(gè) Shell 腳本,然后執(zhí)行它摊唇。歷史上有多種不同的 Shell:

  • sh: Bourne Shell咐蝇,由 Steve Bourne 開發(fā),絕大多數(shù) UNIX 系統(tǒng)標(biāo)配
  • csh: Bill Joy 開發(fā)巷查,BSD UNIX 系統(tǒng)標(biāo)配
  • ksh: David Korn 開發(fā)有序,兼容 sh,并支持 csh 的新功能
  • tcsh: csh 的加強(qiáng)版
  • bash: Bourne Again Shell岛请,GNU 開發(fā)的旭寿,基本上是所有 Linux 系統(tǒng)默認(rèn)的 shell 了

想要知道你的系統(tǒng)自帶了什么 shell,你可以在終端運(yùn)行:

cat /etc/shells

macOS 自帶的是這些:

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh

二崇败、Oh My Zsh

image.png

除開 Windows 的 cmd.exe盅称,我最早接觸終端是在 Linux 系統(tǒng)上肩祥,當(dāng)時(shí)用的是 Ubuntu 桌面版。現(xiàn)在大多數(shù)人接觸 PC 都是從桌面版帶 GUI 的操作系統(tǒng)開始缩膝,所以相比之下命令行要顯得稍微難操作一點(diǎn)混狠。如果有讀者朋友覺得命令行操作起來相對困難的話,可以參考著名的《鳥哥的Linux私房菜》這本書疾层。作為入門讀物還是非常容易上手的将饺。

接下來我們假定讀者朋友們都已經(jīng)比較熟悉 Shell 操作了。目前多數(shù)類 Unix 系統(tǒng)的默認(rèn) Shell 都是 Bash痛黎,它已經(jīng)足夠用了予弧,但是還不夠好用。

目前比較流行的 Shell 是 zshfish湖饱。二者各有優(yōu)劣掖蛤,我個(gè)人使用的而是 zsh

ZSH 稱為 Z shell琉历,是基于 sh(Bourne shell)的擴(kuò)展坠七,包括了 ksh, Bashtcsh等多種 shell 的特性。今年 WWDC 2019 上蘋果亦宣布將用 zsh 取代 bash 稱為 macOS Catalina 的默認(rèn) shell旗笔。

zsh 的自動(dòng)拼寫糾錯(cuò)彪置,大小寫不敏感的自動(dòng)補(bǔ)全,自帶的 where 命令等都非常實(shí)用蝇恶。在 macOS 上用 Bash 試圖 cd down[Tab] 的人都應(yīng)該有所體會(huì)拳魁。

zsh 還支持各種插件和擴(kuò)展,開發(fā)者可以基于 zsh 實(shí)現(xiàn)各種酷炫的命令行體驗(yàn)撮弧。Oh My Zsh就是一個(gè)開源的項(xiàng)目潘懊,也是大多數(shù) zsh 用戶的選擇。

超過 1350+ 的貢獻(xiàn)者為這個(gè)項(xiàng)目貢獻(xiàn)了 250+ 的插件和 125+ 的主題贿衍。

安裝起來非常簡單授舟,通過 curl 或者按照官網(wǎng)指示安裝即可:

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

oh my zsh 自帶的 git 插件簡直是開發(fā)者的福音。

image

還有多款主題任君選擇: Themes · robbyrussell/oh-my-zsh Wiki

三贸辈、 autojump

在 shell 里進(jìn)行文件夾路徑變換我們用的是 cd 命令(change directory)释树。假如我們有一個(gè)層級比較深的路徑: ~/Documents/ADir/BDir/CDir/DDir。一般我們需要

cd ~ #或者 cd
cd Documents
cd ADir
cd BDir
cd CDir
cd DDir

這還是我能記得這個(gè)路徑的前提下擎淤。一般情況下我只記得它大概在哪里奢啥,所以還得多次 ls 看看是不是在當(dāng)前目錄。

這時(shí)候你需要一個(gè)無論身處哪個(gè)路徑都可以輕松跳轉(zhuǎn)過去的 jump 操作嘴拢。

j DDir

這就是 autojump 干的事情桩盲。只要 j keyword 就可以到達(dá)關(guān)鍵詞所在的地方,都不需要記得完整的名字席吴。

autojump 會(huì)對你曾經(jīng)到達(dá)過的路徑做一個(gè)緩存赌结,然后自己計(jì)算一個(gè)優(yōu)先級捞蛋。如果有多個(gè)同名文件夾,它會(huì)優(yōu)先匹配最高優(yōu)先級的那個(gè)姑曙。如果你覺得這個(gè)優(yōu)先級不對襟交,你可以使用 j -i 或者 j -d 來增加/減少當(dāng)前目錄的權(quán)重。

oh my zsh 也提供一個(gè)類似效果的插件伤靠,叫做 z。github 地址在這里: oh-my-zsh/plugins/z at master · robbyrussell/oh-my-zsh

oh my zsh 除了直接把當(dāng)前 git 倉庫的信息展示在終端之外啼染,還自帶許多方便的 git 命令的 aliases宴合,比如:

Alias Command
gaa git add --all
ggp git push origin $(current_branch)

這些 git 命令我們每天都需要打無數(shù)次,能用 alias 還是非常方便省事的迹鹅。

完整的 aliases cheatsheet 可以參考這里: Cheatsheet · robbyrussell/oh-my-zsh Wiki

四卦洽、.bash_profile, .profile 和 .zshrc

如果我們不做任何修改,登錄 shell 之后的所有配置就是默認(rèn)的斜棚。但是我們通常都需要安裝各種工具阀蒂,這些工具需要前置配置,比如環(huán)境變量 PATH弟蚀。這些東西都保存在 .profile 文件里蚤霞。類 Unix 系統(tǒng)在登錄 shell 的時(shí)候一般都會(huì)讀取 .profile 文件。

如果你在自己的 Home 目錄(~) ls -a 一下一般可以看到這幾個(gè)文件:

.profile
.bash_profile
# 如果裝了 zsh 的話
.zshrc

這幾個(gè)文件的作用是類似的义钉,但是讀取順序不同昧绣,其中 .zshrc 只會(huì)被 zsh 讀取。關(guān)于這幾個(gè)配置文件的順序大家感興趣的可以參考這里: .bash_profile vs .bashrc - Abhinav korpal - Medium

一般情況下我會(huì)在 Dropbox 里放一個(gè) .bash_profile 文件捶闸,然后在多臺(tái) Mac 之間共享這個(gè)文件夜畴,只需使用 ln -s 在 Home 目錄創(chuàng)建一個(gè)軟鏈。

.bash_profile -> /Users/xxx/Dropbox/bash_profile

這個(gè)文件里面我們可以配置 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 :-"

甚至可以寫一個(gè) shell 函數(shù)進(jìn)來:

unproxy() {
    unset http_proxy
    unset https_proxy
    echo "Proxy Unset."
}

這些寫進(jìn) .profile 文件的東西在登錄后贪绘,在任意路徑下直接使用。把常用命令放進(jìn)來是一個(gè)不錯(cuò)的選擇央碟。

通常情況下修改完 .profile 之后我們都需要 source 一下讓它生效:

source ~/.profile

那么 source 命令和直接執(zhí)行它有什么區(qū)別呢税灌?感興趣的讀者朋友可以看看這一篇文章:Linux下source命令詳解 - 在努力! - CSDN博客

簡單來說就是使用 sh filename./filename 來執(zhí)行腳本的時(shí)候硬耍,shell 本身會(huì)創(chuàng)建一個(gè)子 shell 來執(zhí)行這個(gè)腳本垄琐。所以在子 shell 里的變量并不會(huì)影響到當(dāng)前的這個(gè)父 shell。而 source 執(zhí)行的時(shí)候经柴,并不會(huì)創(chuàng)建子 shell 而是直接就在當(dāng)前 shell 執(zhí)行了狸窘,所以這里面什么 export, alias之類的東西就直接在當(dāng)前 shell 生效了。

五坯认、iTerm2

image

macOS 自帶的 Terminal.app 已經(jīng)足夠好用翻擒,雖然默認(rèn)是白色底的氓涣,字體也比較小,但是你可以在 Preferences 里面修改 Profiles 和字體陋气。在 macOS Mojave 以上你還可以使用 Dark Mode 來讓它變成黑色的劳吠。

不過還有比他更好用的終端 App — iTerm2

iTerm2 有很多非常實(shí)用的 Feature巩趁,我最常用的有幾個(gè):

  1. 自定義外觀和 Profile

    image

    iTerm2 可自定義的外觀項(xiàng)比 Terminal 的多痒玩,而且還挺酷炫的。最近更新的版本還可以在頂部加入 Status Bar 顯示 CPU/Mem 以及當(dāng)前路徑的信息议慰。雖然我不怎么用但是可以看到 iTerm2 的進(jìn)化速度比 Terminal 快多了蠢古。一旦習(xí)慣了 iTerm2 的 UI 就回不去了。

  2. 實(shí)用的分屏功能

    Terminal 雖然也自帶分屏和 Tab别凹,但是 iTerm2 可以通過 cmd+dcmd+w 來新建/關(guān)閉當(dāng)前分屏草讶,通過 cmd+[cmd+] 來左右切換分屏。當(dāng)我需要多任務(wù)操作的時(shí)候非常有用炉菲。比如我在左邊看著本地的目錄堕战,右邊通過 ssh 登錄服務(wù)器對著服務(wù)器的目錄,兩邊做數(shù)據(jù)交換拍霜。

    image
  3. 隨時(shí)用全局快捷鍵呼出的 Hotkey Window

    image

    在 Preferences 里面選擇 Keys -> HotKey -> Create a Dedicated Hotkey Window… 之后可以創(chuàng)建一個(gè)專門對應(yīng)全局快捷鍵的終端窗口嘱丢。按下自定義快捷鍵之后就會(huì) slide in。雖然我自己用的不多但這是 iTerm2 挺受歡迎的一個(gè)特性沉御。

    image
  4. 實(shí)用的小細(xì)節(jié)

    • 可以按住 cmd 使用鼠標(biāo)打開鏈接
    • Tab 頂部會(huì)顯示當(dāng)前的任務(wù)和狀態(tài)
    • 分屏的時(shí)候會(huì)讓不活動(dòng)的屏幕變淺色

iTerm2 還有許多有用的小細(xì)節(jié)屿讽,在日常使用的時(shí)候不會(huì)覺得有什么了不起,但是當(dāng)你到別人的機(jī)器上用什么都沒改過的 Terminal 的時(shí)候忽然就發(fā)現(xiàn):我擦吠裆,怎么這么難用伐谈?這就是好的設(shè)計(jì)應(yīng)該有的感覺。

六试疙、快捷鍵

大部分終端 App 都會(huì)支持一些非常實(shí)用的快捷鍵操作诵棵。我們無論使用哪一個(gè) App,只要是經(jīng)常用的 App祝旷,經(jīng)常用的動(dòng)作履澳,都應(yīng)該學(xué)習(xí)使用快捷鍵。

在終端中我比較常用的幾個(gè)快捷鍵有:

Key Action
alt+left 往左跳一個(gè)單詞
alt+right 往右跳一個(gè)單詞
ctrl+w 向左刪掉一個(gè)單詞
ctrl+u 刪掉一整行
ctrl+l clear 整個(gè)終端的輸出
cmd+enter iTerm2 的全屏/取消全屏快捷鍵

不同的終端 App 設(shè)置的快捷鍵可能不一樣但都大同小異怀跛,完整的 iTerm2 Cheat Sheet 在這里大家可以參考一下: iTerm2 Cheat Sheet - Kapeli

有一個(gè)叫做 CheatSheet 的 App 可以長按 ? 來查看當(dāng)前 App 的所有快捷鍵距贷,不過體驗(yàn)并不是很好。一般我會(huì)選擇 Google: App + Cheat Sheet 來獲得該 App 的 Cheat Sheet 列表吻谋。

比如 Tower 就整理了一份不錯(cuò)的 Xcode Cheat Sheet 在這里: Xcode Cheat Sheet忠蝗。對于 iOS 開發(fā)者來說,每天面對 Xcode 的時(shí)間賊多漓拾,不掌握點(diǎn)快捷鍵怎么可以呢阁最?

image

七戒祠、參考資料

相關(guān)鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末速种,一起剝皮案震驚了整個(gè)濱河市姜盈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌配阵,老刑警劉巖馏颂,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闸餐,居然都是意外死亡饱亮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門舍沙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剔宪,你說我怎么就攤上這事拂铡。” “怎么了葱绒?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵感帅,是天一觀的道長。 經(jīng)常有香客問我地淀,道長失球,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任帮毁,我火速辦了婚禮实苞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烈疚。我一直安慰自己黔牵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布爷肝。 她就那樣靜靜地躺著猾浦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灯抛。 梳的紋絲不亂的頭發(fā)上金赦,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音对嚼,去河邊找鬼夹抗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛猪半,可吹牛的內(nèi)容都是我干的兔朦。 我是一名探鬼主播偷线,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沽甥!你這毒婦竟也來了声邦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤摆舟,失蹤者是張志新(化名)和其女友劉穎亥曹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恨诱,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媳瞪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了照宝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛇受。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厕鹃,靈堂內(nèi)的尸體忽然破棺而出兢仰,到底是詐尸還是另有隱情,我是刑警寧澤剂碴,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布把将,位于F島的核電站,受9級特大地震影響忆矛,放射性物質(zhì)發(fā)生泄漏察蹲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一催训、第九天 我趴在偏房一處隱蔽的房頂上張望洽议。 院中可真熱鬧,春花似錦瞳腌、人聲如沸绞铃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儿捧。三九已至,卻和暖如春挑宠,著一層夾襖步出監(jiān)牢的瞬間菲盾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工各淀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懒鉴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像临谱,于是被迫代替她去往敵國和親璃俗。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • iTerm2介紹 本文初衷 整理自己腦袋中悉默、收藏中的那些資料城豁,來一次清空,讓自己重新開始抄课。 幫助 Mac 后來者唱星,...
    UPUPMO閱讀 11,018評論 6 88
  • 一间聊、iTerm2簡介 iTerm 2 is a terminal emulator for Mac OS X th...
    ouisun閱讀 19,328評論 1 58
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,367評論 0 5
  • 引子 SSH連接是我們與服務(wù)器交互的主要手段,每個(gè)程序員每天都會(huì)用到抵拘,就像喝白開水一樣普通哎榴。就是這樣一個(gè)簡單而又高...
    bluexiii閱讀 12,456評論 0 8
  • 既往已,逝也僵蛛,苦痛中叹话, 隨塵去,撿拾氣息墩瞳,從始也。 昔聞情過淚如痕氏豌,但教風(fēng)雨狂泗流喉酌。 不想哀,嘆已泵喘。 落日去泪电,黑沉...
    王學(xué)爾閱讀 717評論 12 16