转自 http://11ten.gitcafe.io/book-a/iTerm2/index.htmlhtml
iTerm2的主要特色:python
⌘ + 数字
: 切换标签页。 ⌘ + 方向键
按方向切换标签页。⌘ + enter
: 切换全屏⌘ + f
: 查找。支持正则。其中查找的内容会被自动复制。省去了再去⌘+c的步骤。一样,鼠标去选中的内容也会自动复制,也能够鼠标中键直接粘贴。通常在使用时,键入搜索关键词,而后用shift-tab
或者tab
左右自动补全,option + enter
则自动将搜索结果键入,而且复制到剪贴板。⌘ + d
: 垂直分屏,⌘ + shift + d
: 水平分屏。使用⌘ + ]
和⌘ + [
在最近使用的分屏直接切换.而⌘ + opt + 方向键
切换到指定位置的分屏。⌘ + t
:新的标签页⌘ + w
:关闭当前标签页⌘ + ;
:自动补全历史命令。如图:自动补全⌘ + shift + h
: 剪贴板历史,如图:剪贴板历史ctrl + u
: 清空当前行。这里要注意,mac默认的ctrl+u为清楚当前光标至行首的内容,在iTerm2中则直接清除本行。iTerm2 也支持其余经常使用的操做命令,这里顺带讲下,由于这些命令都是mac下很是经常使用也很好用的:ctrl + a
: 到行首linux
ctrl + e
: 行末ctrl + f/b
: 前进后退,至关于左右方向键,可是显然比移开手按方向键更快ctrl + p
: 上一条命令,至关于方向键上ctrl + r
: 搜索命令历史,这个你们都应该很熟悉了ctrl + d
: 删除当前字符ctrl + h
: 删除以前的字符ctrl + w
: 删除光标前的单词ctrl + k
: 删除到文本末尾ctrl + t
: 交换光标处文本⌘ + —/+/0
: 调整字体大小⌘ + r
:清屏,实际上是滚到新的一屏,并无清空。ctrl + l 也能够作到。⌘ + opt + e
打开Exposé,并支持搜索。如图:Exposé⌘ + /
: 找到当前光标位置,有时会颇有用。shift + ⌘ + s
: 保存当前窗口快照。⌘ + opt + b
: 快照回放。颇有意思的功能,你能够对你的操做根据时间轴进行回放。能够拖动下方的时间轴,也能够按左右方向键。如图:快照回放zsh做为bash的替代品,天然不少人要问:why zsh? 在Zsh Workshop 有个长长的功能列表,用来回答这个问题。这里讲下我选择zsh的缘由,固然,也是介绍zsh强大的功能。git
更强大的补全。github
<ctrl-n/p/f/b>
来选择,perfect!tar - <tab>
就会列出全部的选项和帮助说明。用了zsh以后man
少用了好多……kill <tab>
就会列出全部的进程名和对应的进程号。如图:这还不够,试试键入kill sbin <tab>
,如图所示:shell
<ctrl-p>
或者方向上键
查找历史命令时,zsh支持限制查找。好比,输入ls
而后再按方向上键,则只会查找用过的ls命令。而此时使用<ctrl-p>
则会仍然按以前的方式查找,忽略ls
。cd
。首先你甚至不须要再输入cd了,直接输入路径便可。第二,在你知道路径的状况下,好比/usr/local/bin
你能够输入cd /u/l/b
而后按<Tab>
进行补全快速输入。这显然不够,zsh还支持路径替换,若是你其实想进入的是/usr/local/bin
,再也不须要../
了,直接在当前输入cd bin share
便可,则bin
会替换为share
。在以后我会介绍z和autojumper,目录跳转会更方便。alias ls ='ls --color=auto'
。zsh还支持后缀alias,即以什么命令打开特定的后缀名文件。例如alias -s js=mvim
,输入hello.js
,会以vim打开该文件,而不在须要vim hello.js
。man
命令,而这个功能让我少用了不少find
命令。 通常的通配符搜索无非是ls -l *.log
,如图:在zsh中能够作到递归的通配符搜索。使用**/
来递归搜索,如图django
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'
下面讲下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的功能相似,前者是简单的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
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,你就能够在一个终端中同时运行多个会话,只需开启一个终端。终端会话多开
咱们在使用终端的过程当中,总会遇到过相似场景:
使用tmux会话的分离与链接就能够轻松解决以上问题,分离(detach)可使终端会话在后台运行,链接(attach)能够从新打开在后台运行的会话,也能够多个终端链接同一会话。这些都会在后续详细描述。
tmux是什么 http://t.cn/Rv6DnPb 日常在终端的使用过程当中,一次只能运行一个会话。 固然你也能够经过终端程序的多开标签页来解决,可是使用了tmux,你就能够在一个终端中同时运行多个会话,只需开启一个终端。
tmux 的安装比较简单,如下分别介绍 linux、Mac、FreeBSD、Windows系统下的安装方法
linux 用户只要使用系统自带的包管理器来安装就好了
$ sudo apt-get install tmux
$ sudo yum install tmux
$ pacman -S tmux
Mac 用户能够经过 Homebrew 或 Macports 来进行安装
$ brew install tmux
$ sudo port install tmux
FreeBSD可使用自带的port进行安装
$ cd /usr/ports/sysutil/tmux $ make install clean
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]
),会话也会自动退出,因此在实际应用中,初始命令几乎不会用到。
以前已经说过,退出 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,那时就能够摆脱快捷键冲突的困扰了。
被分离的会话,还能够从新链接上,就让咱们来实践一下,命令为:
$ tmux attach-session -t <目标会话名>
简写为
$ tmux attach -t <目标会话名>
或
$ tmux a -t <目标会话名>
以前咱们建立的会话名叫 dev ,因此命令就能够这样写:
$ tmux a -t dev
由于咱们只建立了一个会话,因此能够忽略 -t 的参数,直接写成:
$ tmux a
若是不指定目标会话名,tmux 将会链接你上次使用的会话。链接上 dev 会话以后,能够看到程序还在运行中,并且终端里显示的内容跟会话分离前没什么两样,只是多了几行 HTTP 请求的日志。
这时候,你还能够在多个终端,甚至是多台电脑经过 ssh 链接上同一个会话,能够实现共同操做,很是强大,具体的感觉能够本身体会。
接下来咱们多建立几个 tmux 会话,在这以前先把当前会话分离掉:
[前缀]
d
$ tmux new -s edit
[前缀]
d
$ tmux new -s 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 有五个默认的窗格布局,能够知足基本的工做须要。
如下操做指令,能够在这五个默认的窗格布局之中轮流切换。
更换窗格布局: [前缀]
空格
到本章为止,tmux 最基本的操做已经讲述完,在接下来的章节中,要给你们介绍一下 tmux 的命令(command)