Item2 + zsh

轉自 http://11ten.gitcafe.io/book-a/iTerm2/index.htmlhtml

iTerm2的主要特色:python

  1. 開源免費。
  2. 兼容性比默認Terminal更好。對於常常要遠程使用的狀況下,默認的Terminal在使用vi時常常出現不兼容的問題,而iTerm2在這方面顯然作的更好。
  3. 快捷鍵豐富。⌘ + 數字: 切換標籤頁。 ⌘ + 方向鍵 按方向切換標籤頁。
  4. ⌘ + enter: 切換全屏
  5. ⌘ + f: 查找。支持正則。其中查找的內容會被自動複製。省去了再去⌘+c的步驟。一樣,鼠標去選中的內容也會自動複製,也能夠鼠標中鍵直接粘貼。通常在使用時,鍵入搜索關鍵詞,而後用shift-tab或者tab左右自動補全,option + enter則自動將搜索結果鍵入,而且複製到剪貼板。
  6. ⌘ + d: 垂直分屏,⌘ + shift + d: 水平分屏。使用⌘ + ]⌘ + [在最近使用的分屏直接切換.而⌘ + opt + 方向鍵切換到指定位置的分屏。
  7. ⌘ + t :新的標籤頁
  8. ⌘ + w :關閉當前標籤頁
  9. ⌘ + ;:自動補全歷史命令。如圖:自動補全

  • ⌘ + shift + h: 剪貼板歷史,如圖:剪貼板歷史

ctrl + u: 清空當前行。這裏要注意,mac默認的ctrl+u爲清楚當前光標至行首的內容,在iTerm2中則直接清除本行。iTerm2 也支持其餘經常使用的操做命令,這裏順帶講下,由於這些命令都是mac下很是經常使用也很好用的:ctrl + a: 到行首linux

  1. ctrl + e: 行末
  2. ctrl + f/b: 前進後退,至關於左右方向鍵,可是顯然比移開手按方向鍵更快
  3. ctrl + p: 上一條命令,至關於方向鍵上
  4. ctrl + r: 搜索命令歷史,這個你們都應該很熟悉了
  5. ctrl + d: 刪除當前字符
  6. ctrl + h: 刪除以前的字符
  7. ctrl + w: 刪除光標前的單詞
  8. ctrl + k: 刪除到文本末尾
  9. ctrl + t: 交換光標處文本⌘ + —/+/0: 調整字體大小
  10. ⌘ + r:清屏,實際上是滾到新的一屏,並無清空。ctrl + l 也能夠作到。
  11. 更多實用功能:Exposé 標籤 按⌘ + opt + e打開Exposé,並支持搜索。如圖:Exposé

  • 全局呼出快捷鍵。如圖: 呼出快捷鍵

  • ⌘ + /: 找到當前光標位置,有時會頗有用。
  • shift + ⌘ + s: 保存當前窗口快照。
  • ⌘ + opt + b: 快照回放。頗有意思的功能,你能夠對你的操做根據時間軸進行回放。能夠拖動下方的時間軸,也能夠按左右方向鍵。如圖:快照回放

  • 支持256色。方便配置vi配色。可是在某些遠超服務器上不支持256色,則只要在Prefences->Profiles->Terminal裏設置爲xterm。

zsh

zsh做爲bash的替代品,天然不少人要問:why zsh? 在Zsh Workshop 有個長長的功能列表,用來回答這個問題。這裏講下我選擇zsh的緣由,固然,也是介紹zsh強大的功能。git

  1. 兼容bash。這使得切換到zsh沒有任何成本。
  2. OS X默認的bash版本實在是太老了啊……
  3. 拼寫糾正。你總會不當心打錯命令。這時,zsh會進行自動拼寫糾正,如圖:

更強大的補全。github

  • 連按兩次tab會列出全部的補全列表並直接開始選擇。如圖:

  • 而且能夠用方向鍵來選擇,可是對我這種不多用方向鍵的人來講只能猛敲tab了麼,不是,zsh支持使用<ctrl-n/p/f/b>來選擇,perfect!
  • 命令選項補全。有多少人依然記不住tar的命令選項?中槍的去抄20遍……在zsh中只須要鍵入tar - <tab>就會列出全部的選項和幫助說明。用了zsh以後man少用了好多……
  • 命令參數補全。zsh 對命令的參數補全也很強大。鍵入kill <tab>就會列出全部的進程名和對應的進程號。如圖:

這還不夠,試試鍵入kill sbin <tab>,如圖所示:shell

    • 自動爲sbin這個進程名補全了進程號。kill進程不再用兩步操做了。
  1. 更智能的歷史命令。在用<ctrl-p>或者方向上鍵查找歷史命令時,zsh支持限制查找。好比,輸入ls而後再按方向上鍵,則只會查找用過的ls命令。而此時使用<ctrl-p>則會仍然按以前的方式查找,忽略ls
  2. 多個終端會話共享歷史記錄。常常有多個窗口,tab,tmux的多個session,panel。這些命令歷史不能共享實在是很糟糕的回憶。可是有了zsh以後,這些確實成了回憶了,全部的命令歷史均可以共享。
  3. 更智能的cd。首先你甚至不須要再輸入cd了,直接輸入路徑便可。第二,在你知道路徑的狀況下,好比/usr/local/bin你能夠輸入cd /u/l/b而後按<Tab>進行補全快速輸入。這顯然不夠,zsh還支持路徑替換,若是你其實想進入的是/usr/local/bin,再也不須要../ 了,直接在當前輸入cd bin share便可,則bin會替換爲share。在以後我會介紹z和autojumper,目錄跳轉會更方便。
  4. 更強大的alias。zsh不只支持普通的alias,例如:alias ls ='ls --color=auto'。zsh還支持後綴alias,即以什麼命令打開特定的後綴名文件。例如alias -s js=mvim,輸入hello.js,會以vim打開該文件,而不在須要vim hello.js
  5. 通配符搜索。這也是我最愛的功能之一。以前講過因爲命令補全少用了不少man命令,而這個功能讓我少用了不少find命令。 通常的通配符搜索無非是ls -l *.log,如圖:

在zsh中能夠作到遞歸的通配符搜索。使用**/來遞歸搜索,如圖django

  1. 是否是在不少場景下能夠取代find

以上都是我感受遷移到zsh以後很是實用的功能。要想從頭開始瞭解和學習zsh,能夠訪問A User’s Guide to the Z-Shell。不過你們都很忙,從頭開始本身學習和配置會很累。因此如今說到zsh,不得不提的就是oh-my-zsh,oh-my-zsh是一個開源的zsh配置管理框架,提供了大量實用的功能,主題等。如今基本都是標配了吧。如圖是我在用的默認zsh主題robbyrussell,如圖vim

能夠發它能自動顯示當前所在的git分支以及當前本地狀態(黃色的小叉表示本地有更新未提交)。windows

固然zsh也不是天衣無縫。在我使用過程當中有兩點不是很舒服: 1. 自動糾正並不老是那麼智能。如圖:瀏覽器

可是能夠對這些命令使用alias 加上nocorrect前綴,如:

alias rake deploy='nocorrect rake deploy'

  1. 一些符號是zsh中保留的,使用須要轉義,如圖:

下面講下zsh和oh-my-zsh的安裝。

使用brew來安裝zsh

brew install zsh

設置zsh爲默認

/etc/shells文件末尾添加

/usr/local/bin/zsh

執行:

chsh -s /usr/local/bin/zsh

最後記得將~/.bash_prorile或者~/.profile等配置拷貝到~/.zshrc中。

安裝oh-my-zsh

自動安裝:

curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh

能夠選擇本身喜歡的主題。只須要修改~/.zshrc文件中的ZSH_THEME便可。

z和autojump

zautojump的功能相似,前者是簡單的shell腳本實現,後者由python實現,功能都是能夠方便自動匹配到你最多使用的目錄並跳轉。我在用的是z,如圖

,我在根目錄輸入z github能夠自動跳轉到我經常使用的notice501.github.com這個目錄,也就是本博客的工程目錄。超級方便的工具。autojump用法相似,命令爲j而不是z二者的安裝方式:

z

git clone git@github.com:rupa/z.git

然後將z.sh放入環境變量便可。

autojump

autojump能夠直接使用brew安裝

brew install autojump

iTerm2 與 zsh + tmux 配合使用的一些心得

tmux是什麼

tmux 是什麼?咱們先來看看官網的解釋:

tmux is a terminal multiplexer

What is a terminal multiplexer? It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal. And do a lot more.

簡單來講就是一個終端多開工具,能讓你同時運行多個終端會話,在這些會話之間隨意切換。

特點功能

終端會話多開

日常在終端的使用過程當中,一次只能運行一個會話。 固然你也能夠經過終端程序的多開標籤頁來解決,可是使用了tmux,你就能夠在一個終端中同時運行多個會話,只需開啓一個終端。終端會話多開終端會話多開

會話的分離(detach)與鏈接(attach)

咱們在使用終端的過程當中,總會遇到過相似場景:

  • 用終端運行了一個測試代碼的HTTP服務(如rails、django),想要關閉終端程序窗口,但又不想讓服務停掉
  • 用ssh鏈接到服務器,正在編輯文件或修改配置,忽然斷網了,網絡從新連通後再鏈接上服務器,又要從新進入剛纔的工做目錄、找到要編輯的文件、找到剛纔修改的那一行……
  • 在公司用ssh鏈接到服務器,打開了多個文件,回家後想繼續幹活,可是還要再憑記憶把文件逐一打開

使用tmux會話的分離與鏈接就能夠輕鬆解決以上問題,分離(detach)可使終端會話在後臺運行,鏈接(attach)能夠從新打開在後臺運行的會話,也能夠多個終端鏈接同一會話。這些都會在後續詳細描述。

tmux是什麼 http://t.cn/Rv6DnPb 日常在終端的使用過程當中,一次只能運行一個會話。 固然你也能夠經過終端程序的多開標籤頁來解決,可是使用了tmux,你就能夠在一個終端中同時運行多個會話,只需開啓一個終端。

安裝

tmux 的安裝比較簡單,如下分別介紹 linux、Mac、FreeBSD、Windows系統下的安裝方法

linux

linux 用戶只要使用系統自帶的包管理器來安裝就好了

Debian 系

$ sudo apt-get install tmux

紅帽系

$ sudo yum install tmux

Arch Linux

$ pacman -S tmux

Mac

Mac 用戶能夠經過 Homebrew 或 Macports 來進行安裝

Homebrew

$ brew install tmux

Macports

$ sudo port install tmux

FreeBSD

FreeBSD可使用自帶的port進行安裝

$ cd /usr/ports/sysutil/tmux
$ make install clean

Windows

Windows下可使用 cygwin 來安裝 cygwin,cygwin是圖形安裝界面,請確保在 Select Packages 界面出現時,選中 tmux 便可。

最後,爲了確保 tmux 正確安裝,能夠在命令行裏輸入如下命令,來查看 tmux 的版本號

$ tmux -V

注意是大寫的V

若是出現相似如下字符串,就已經安裝成功了

tmux 1.8

目前最新版本爲 1.9a,隨後的章節將使用 1.8 版本作解說,請確保你安裝的 tmux 版本要在 1.8 或以上,以避免缺乏某些必要的功能。

會話

上一節咱們已經將 tmux 安裝好了,如今就能夠經過如下命令來啓動它:

$ tmux

啓動以後,能夠看到命令行最底部多了一條綠色的狀態條,上面顯示了一些信息,好比計算機名和時間等。 要退出 tmux,能夠輸入exit 回車或者按下組合鍵 [Ctrl+d] 。

其實剛纔咱們啓動 tmux 以後,它已經自動建立了一個會話(Session),會話是 tmux 的最主要的功能,接下來咱們將介紹會話的一些功能。

新建會話

啓動 tmux 會自動建立會話,但並無爲會話命名。爲了之後使用方便,咱們來建立一個本身命名的會話,命令以下:

$ tmux new-session -s <會話名稱>

如今咱們來建立一個會話,取名爲 dev ,命令爲:

$ tmux new-session -s dev

建立完成以後,能夠看到底部狀態條左邊標示出了當前的會話名爲 dev 。

這個命令還有一個縮寫版本, new-session 縮寫成 new ,也就是上述命令能夠簡寫成:

$ tmux new -s dev

新建會話還能夠帶上一個初始命令:

$ tmux new -s <會話名稱> 初始命令

好比建立一個名爲 monitor 的會話,初始命令爲 top :

$ tmux new -s monitor top

能夠看到會話建立後,會自動運行 top 命令。可是一旦退出 top 程序 (按 [q] ),會話也會自動退出,因此在實際應用中,初始命令幾乎不會用到。

分離會話(detach)

以前已經說過,退出 tmux 可使用 exit 命令或者 [Ctrl+d] 組合鍵,退出 tmux 會把會話結束掉,就像日常關閉終端程序同樣。可是在實際應用中,可能你並不但願這樣,由於有些程序是要保持運行的,例如 rails 的測試服務、telnet鏈接遠程服務器等等。

這時候分離會話就能夠派上用場了,分離後的會話並不會把運行中的程序結束掉,而是會保持運行,你還能夠稍後從新鏈接上這些會話。

分離會話以前,咱們先來啓動一個須要保持運行的程序,這裏用 python 2.x 的 SimpleHTTPServer 爲例, 固然你也能夠選擇啓動 rails 或 django 的測試服務、telnet 鏈接或者更簡單的 top 命令。

先在以前建立的會話中運行一下命令來啓動一個簡單的 HTTP 服務:

$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

這時候 HTTP 服務已經運行起來了,接下來就要作分離會話的操做了,快捷鍵是:

[Ctrl+b] [d]

也就是先按下組合鍵 [Ctrl+b] 而後再接着按 [d] 。d 表明了 detach,而 [Ctrl+b] 是一個命令前綴(官方稱之爲 prefix),這個命令前綴是告訴終端程序,接下來的命令是針對 tmux 使用的。在以後的描述中,都將採用 [前綴] 來代替 tmux 的命令前綴。

能夠看到,在按下快捷鍵以後,tmux 已經退出並回到日常的終端中,並帶着 [detached] 字樣的提示。

這時候能夠在瀏覽器訪問一下剛纔啓動的 HTTP 服務 http://localhost:8000,確實能夠正常訪問,證實剛纔的程序還在保持運行中,並無被結束,甚至你還能夠把整個終端程序關閉。

可能有人會很不習慣這個默認的命令前綴,包括我本身在內,由於 [Ctrl+b] 是一個 Emacs 或 Vim 的快捷鍵,甚至是命令行自己的快捷鍵。在 Emacs 或者命令行中,它是後退一個字符的操做;而在 Vim 中,它是一個向上翻頁的操做。不過不用擔憂,先忍耐忍耐,稍後的章節將講述如何配置 tmux,那時就能夠擺脫快捷鍵衝突的困擾了。

鏈接會話(attach)

被分離的會話,還能夠從新鏈接上,就讓咱們來實踐一下,命令爲:

$ tmux attach-session -t <目標會話名>

簡寫爲

$ tmux attach -t <目標會話名>

$ tmux a -t <目標會話名>

以前咱們建立的會話名叫 dev ,因此命令就能夠這樣寫:

$ tmux a -t dev

由於咱們只建立了一個會話,因此能夠忽略 -t 的參數,直接寫成:

$ tmux a

若是不指定目標會話名,tmux 將會鏈接你上次使用的會話。鏈接上 dev 會話以後,能夠看到程序還在運行中,並且終端裏顯示的內容跟會話分離前沒什麼兩樣,只是多了幾行 HTTP 請求的日誌。

這時候,你還能夠在多個終端,甚至是多臺電腦經過 ssh 鏈接上同一個會話,能夠實現共同操做,很是強大,具體的感覺能夠本身體會。

接下來咱們多建立幾個 tmux 會話,在這以前先把當前會話分離掉:

  1. 分離當前會話: [前綴] d
  2. 新建一個名爲 edit 的會話: $ tmux new -s edit
  3. 分離 edit 會話: [前綴] d
  4. 新建一個名爲 telnet 的會話: $ tmux new -s telnet
  5. 分離 telnet 會話: [前綴] d

如今,會話已經足夠多了,接下來登場的就是列出全部會話的命令:

$ tmux list-sessions

能夠簡寫成

$ tmux ls

屏幕上將會顯示出全部建立的會話,好比:

dev: 1 windows (created Tue Jun 10 15:10:32 2014) [80x24]
edit: 1 windows (created Tue Jun 10 16:26:20 2014) [80x24]
telnet: 1 windows (created Tue Jun 10 16:26:53 2014) [80x24]

這時候鏈接會話的 -t 參數就派上用場了,你能夠選擇鏈接到哪個會話。

若是沒有建立會話或者會話都全已退出,那麼列出全部會話的命令將會提示一個 failed to connect to server 的信息,能夠看得出來 tmux 是有運行一個服務的,這個服務管理着全部的會話,並讓他們持續運行。

小結

經過建立多會話,以及分離/鏈接的功能,還能實現多終端鏈接同一會話,已經徹底能夠輕鬆應付許多日常很以實現的功能。在下一章節中,咱們將討論 tmux 裏窗口(Window)的功能。

窗口

上一章節介紹了 tmux 的會話,接下來就要講到 tmux 中窗口的使用。

其實當你新建一個會話的時候,tmux 已經自動給你在新會話中自動建立了一個窗口(Window),窗口的編號從0開始,名稱則默認爲 當前工做目錄 或者 當前運行的程序 ,都顯示在下方的狀態條中。以下圖所示,我將工做目錄切換到了 ~/Documents ,窗口0的名稱也隨之變換。

默認窗口名默認窗口名

咱們也能夠在建立會話的時候附上 -n 參數,來給窗口制定一個名稱

$ tmux new -n <窗口名>

-n 參數能夠和以前介紹過的 -s 參數一同使用,如今咱們來建立一個名爲 demo的新會話,新建窗口取名爲worldcup 吧。

$ tmux new -s demo -n worldcup

[注意] 裝了 oh-my-zsh 的話,自定義窗口名不起做用,不管如何設置或更改窗口名,敲入命令以後窗口名都會變成當前工做目錄或者當前運行的程序,但願新版本能修復這個問題

新建窗口

新建窗口比較簡單,只要執行如下組合鍵便可。

[前綴] c

c 表明了 create ,一個會話能夠建立多個窗口,可是爲了窗口之間切換的方便,建議將窗口個數保持在個位數。

切換窗口

切換窗口有好幾種方式,咱們先來講說最經常使用的兩種。

上一個窗口(previous): [前綴] p 下一個窗口(next): [前綴] n

使用這兩種方式,就能夠在全部窗口中按順序切換。若是在第一個窗口執行上一個窗口的操做,則會跳轉到最後一個窗口,一樣的在最後一個窗口執行下一個窗口的操做,則會跳到第一個。

固然每一個窗口都有一個編號,你也能夠經過如下簡單的操做,來跳轉到制定編號的窗口。

跳轉到指定窗口: [前綴] 0-9的數字

因爲這個指令只能在 0-9 號的窗口之間跳轉,因此建議窗口個數保持在個位數。

可是若是窗口個數實在太多,還能夠用如下方法來呼出窗口列表,用上下鍵就能夠進行選擇,而後回車。

窗口列表: [前綴] w

窗口列表窗口列表

更改窗口名稱

更改窗口名稱也比較簡單,首先要先切換到須要修改的窗口下,執行如下操做,就能夠進行修改了。

更改窗口名稱: [前綴] ,

這時,底部的狀態條會變成黃色,只要輸入想要取的名字,回車便可。

更改窗口名稱更改窗口名稱

關閉窗口

當窗口再也不須要時,也能夠進行關閉,如下是操做指令。

關閉窗口: [前綴] &

這個命令確實不太好用,還要用到 Shift 鍵,可是彆着急,講到自定義配置的時候,就能夠對默認的組合鍵進行更改了。關閉窗口以前,狀態條也會有黃色的確認提示,輸入 y 確認或者 n 取消。

關閉窗口關閉窗口

當會話中全部的窗口都關閉以後,會話也會隨着退出。

小結

本章講述了 tmux 中如何使用窗口,窗口是會話的子元素,固然窗口還能再分,也就是下一章講述的面板。

窗格

上一章已經介紹了 tmux 裏的窗口,窗口也能夠再分,也就是接下來要說的窗格(pane)。咱們已經知道,tmux 下能夠有多個會話,會話下又能夠有多個窗口,那麼一樣,窗口下還能夠有多個窗格,其結構以下。

tmux
├── 會話a
│   ├── 窗口a
│   │   ├── 窗格a
│   │   └── 窗格b
│   └── 窗口b
│       └── 窗格c
└── 會話b
    ├── 窗口c
    │   └── 窗格d
    └── 窗口d
        └── 窗格e

切分窗格

一個窗口能夠切分紅多個窗格,主要的切分方法有兩種,垂直切分和水平切分。

垂直切分(把窗口垂直切分紅左右兩等分): [前綴] %垂直切分垂直切分

水平切分(把窗口水平切分紅上下兩等分): [前綴] "水平切分水平切分

以上兩種切分方法還能夠混合使用,好比先進行水平切分再進行垂直切分,咱們會獲得相似如下的3個窗格。

水平切分+垂直切分水平切分+垂直切分

切換工做窗格

把窗口切分紅多個窗格之後,就須要在各個窗格直接進行切換,以便對不一樣的窗格進行不一樣的操做。

窗格切換: [前綴] o

這個指令會在當前窗口的全部窗格中輪流切換,若是窗格比較少的狀況下,很是實用。可是若是窗格太多,就比較麻煩了,能夠用如下指令來制定切換的方向,本身體會一下吧。

按制定方向切換窗格: [前綴] 方向鍵

更改窗格佈局

tmux 有五個默認的窗格佈局,能夠知足基本的工做須要。

  1. 水平平分(even-horizontal)
  2. 垂直平分(even-vertical)
  3. 主窗格最大化,其餘窗格水平平分(main-horizontal)
  4. 主窗格最大化,其餘窗格垂直平分(main-vertical)
  5. 平鋪,窗格均等分(tiled)

如下操做指令,能夠在這五個默認的窗格佈局之中輪流切換。

更換窗格佈局: [前綴] 空格

小結

到本章爲止,tmux 最基本的操做已經講述完,在接下來的章節中,要給你們介紹一下 tmux 的命令(command)

相關文章
相關標籤/搜索