身為攻城獅,cd時間太長總是很困擾?來看看更不浪費生命的作法吧!

身為一個每天都會在命令列(Command Line Shell)上輸入指令的工程師,很容易在不同的目錄(directories)間移動的時候不小心就花費了大量的時間...... 本文將分享一個更好的方法給您。
評論
評論

原文來自工程師 Oliver Lacan 的 部落格文章 ,由 INSIDE 轉載編譯。

 

在命令行中切換目錄是最常用的操作,很少有比一遍又一遍地重複鍵入「cd ls cd ls cd ls ……」更令人沮喪的事情了。身為一個每天都會在命令列(Command Line Shell)上輸入指令的工程師,很容易在不同的目錄(directories)間移動的時候不小心就花費了大量的時間...... 尤其是當不時就會造訪同一個目錄的時候。與其不斷地使用 cd 或使用 alias 一個個建立快捷,本文將分享一個更好的方法給您。

常見的切換方式大概是長這樣:

cd ~/Development  ls # 看一下資料夾裡面有什麼...  cd project  # 走錯地方了, 沒關係回到上一層就好...  cd ..  # 開始工作囉...  mkdir new_project  cd new_project  cd ../project
 

也許當你更有經驗的時候,你知道該如何使用 Tab 鍵來幫助你更快地打完完整的目錄名稱。所以實際上所打出來的指令可能是長下面這個樣子:

cd ~/Dev<TAB>  ls # 看一下下一層要去哪...  cd pro<TAB>  cd ..  mkdir new_project  cd new<TAB>  cd ../pro<TAB>

如此一來就已經節省了大約 20 個需要輸入的字元了,真是值得開心!順帶一提,我們也可以使用 cd !$ 來幫助我們快速移動到 mkdir 剛剛創建的資料夾。(cd !$ 的意思是將上一個指令的參數作為輸入);或是我們還記得 Development/ 下面有哪些資料夾,知道 project/ 就是包含在裡面,所以也不用再使用 ls 來事先看一下要移動的路徑。

但問題是,我們並不像電腦一樣可以完全記得目錄下所有的分支,所以通常還是會不小心花費太多的時間...... 該怎麼辦呢?

瞧瞧這個好了:

j d   j p   <span class="nb">cd</span> ..   <span class="nb">mkdir </span>new_project   <span class="nb">cd </span>new<TAB>   j p
 

這個辦法最明顯的地方就是我們將所有需要打的字元又減少到了 18 個以下,卻又可以達到跟一開始同樣的目的地!比較難看出來的事情是,j d (或是 j dev, j develop)指令會帶我們到 ~/Development/ 這個目錄;而 j p 指令可以帶我們從檔案系統中的任何一個位置到 ~/Development/project 這個地方。小小的改動累積起來所省下的時間,絕對會比你想像中還要更加可觀!

cd /usr/local/lib/something/log/  j p  pwd  ~/Development/project
 

這一切究竟是怎麼辦到的呢?答案是:AutoJump

AutoJump 是一個能幫助你快速在命令行的目錄間飛越的神秘魔法。官方對這個工具的說法是:「一個能更便捷地在檔案系統中引導你的方法」(A faster way to navigate your filesystem)然而這個說法事實上並不太公平....... 這句話完全低估了 AutoJump 對開發過程中顯著的幫助!我自己估計,這幾乎要省下了我一整年打字的時間了!

 

Autojump 是怎麼運作的?

以下這個指令:

j project  /Users/olivierlacan/Development/project

和下面這個指令能達到的效果是完全一樣的:

j p /Users/olivierlacan/Development/project
 

為什麼呢?這是因為 AutoJump 能記得所有你使用 cd 指令或它內含的 j 指令所移動進去的目錄。更重要的是, AutoJump 能夠做到模糊檢索(顧名思義是針對資料庫中的文件內容進行近似字串比對),這意味著它能夠查找所有你曾經造訪過、且包含你所提供的相同字串的目錄名稱,甚至就算你只提供一個字母也可以查找。

但如果我們有兩個開頭都是 p 的目錄呢?好玩的地方來了。第一次你輸入 cd directory_name 時,AutoJump 會載入到該目錄的絕對路徑,並分配一個權重給它──10.0。

所以如果我們這麼輸入:

cd /var

將可以在接著的 j -s 指令中看到以下資訊(s 代表統計的 stats):

10.0: /var
 

如果我們再度拜訪 /var 呢?來看看權重會變成什麼樣子:

14.1: /var
 

我們重複拜訪的目錄,其權重即會隨著我們的拜訪的次數不斷增加。在我本身的案例中,你可以很容易地猜到我最常造訪的前五名目錄:

j <span class="nt">-s</span>  <span class="o">(</span>...<span class="o">)</span>  234.7: /Users/olivierlacan/Development/cs/campus  262.7: /Users/olivierlacan/Development/rubyheroes/rubyheroes.com  417.4: /Users/olivierlacan/Development/perso/orientation  874.1: /Users/olivierlacan/Development/cs/CodeSchool  ________________________________________  10810: total weight  198: number of entries  0.00: current directory weight  data: /Users/olivierlacan/Library/autojump/autojump.txt
既然我的第一個目錄(CodeSchool))和第四個目錄(campus)都有著相同的開頭 c,AutoJump 會怎麼決定去哪一個地方呢?很明顯的道理,根據目錄的權重。既然 campus 的權重較低, AutoJump 會先選擇帶我們到 CodeSchool 這個目錄。然而,如果我再度重複鍵入 j c 指令,AutoJump 就會帶我到權重第二高、且符合字母 c 的目錄。
 
j c /Users/olivierlacan/Development/cs/CodeSchool  j c  /Users/olivierlacan/Development/cs/campus

如果你不喜歡在不清楚的情況下根據 AutoJump 的設定到處亂飛,它也可以讓你看到那些目錄和你所提供的字母字串是相匹配的:

j c<TAB><TAB><TAB> $ j c__ c__1__/Users/olivierlacan/Development/cs/CodeSchool c__2__/Users/olivierlacan/Development/cs/campus c__3__/Users/olivierlacan/Development/perso/keep-a-changelog c__4__/Users/olivierlacan/Development/perso/olivierlacan.com $ j c__4 /Users/olivierlacan/Development/perso/olivierlacan.com
 

當列完一串帶有編號的目錄項目,AutoJump 能夠事先幫你填好 j c__ 指令,然後讓你輸入你想去的目錄的編號。

 

其他進階功能

  • jc (child) 指令能跳到到指定目錄的子目錄
  • jo (open) 使用系統工具(Mac Finder, Windows Explorer, GNOME, etc.)打開目錄,類似 Mac OS terminal 下的 open 命令
  • j -i 指令能增加你目前所在的目錄權重
  • j -d 指令能幫你降低目前所在的目錄權重
  • j --purge 指令會清除掉所有 AutoJump 所記錄的權重,讓你能重新開始記錄。

 

如何安裝 AutoJump

AutoJump 是一個能夠支援大部分命令列包括 bash、zsh、fish 的實用工具,因此你可以透過許多 Linux package managers 來安裝 AutoJump。對於 MacOS 來說,我十分推薦 Homebrew 的 brew install autojump 這個不能再簡單的安裝方式,只要再記得輸入以下指令、以便將 AutoJump 載入 .bash_profile 或是 .zshrc :

[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh
 

這道指令會幫你確認 AutoJump 是否安裝完成,同時簡單地載入你的命令列。

如果你不介意麻煩,也可以從 git repository 中將它 clone 下來並 手動進行安裝步驟  。相信我,AutoJump 會是你使用過最簡單便捷的開發工具之一,至少這幾年來說我一次都沒有遇到 bug。



精選熱門好工作

Data Analyst / Data Scientist

Omlet Arcade 美商歐姆雷特
臺北市.台灣

獎勵 NT$15,000

Backend 工程師

Omlet Arcade 美商歐姆雷特
臺北市.台灣

獎勵 NT$15,000

樂趣買Marketing Specialist(Rakuma)

台灣樂天市場
臺北市.台灣

獎勵 NT$15,000