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)

相关文章
相关标签/搜索