今天继续介绍我的终端环境,tmux。

why tmux?

用一个工具的第一问自然还是为什么要用。其实当时使用tmux的原因很简单。工作中经常需要长时间的编译。总想要下班后要关机的情况下,(肯定有人问我为什么关机,我觉得环保:)而且很多时候是笔记本工作,下班还带回去。),让远超服务器继续进行编译。简单的寻觅一番之后,就发现了tmux。而且远超预期,就一直用了下来。

其他让我非常喜欢的功能有:

  1. window,pane的概念可以很好地进行多窗口切换,窗口分割。
  2. 状态行配置很容易。
  3. vi 模式
  4. 复制粘贴缓冲区
  5. 脚本化.通过脚本可以自动化窗口布局。

tmux简单介绍

简单来说,tmux是一个multiplexers,他可以让你同时运行多个终端,在多个终端之间切换。你可以断开终端的同时让终端内容继续运行(例如之前我提到的编译任务),类似的还有screen

tmux是典型的c/s架构。有如下几个概念。

  • session. session是一个特定的终端组合。输入tmux就可以打开一个新的session。
  • window。window 为session中的终端。
  • pane 。pane为一个window分隔出来的各个间隔,即window中的终端。

tmux的使用

正如上所述,在终端中输入tmux就可以打开一个tmux session。如图:

底部会出现状态栏。左边表示当前为session 0, window 1, pane 1,中间会显示当前窗口编号和路径,右侧会本机信息和时间。这并不是默认设置,但是配置tmux的状态行非常容易,在后面我会简单的介绍如何配置tmux,并提供我的配置文件。

tmux的所有操作必须先使用一个前缀键进入命令模式,或者说进入控制台,就像vi中的esc。默认的前缀为<c-b>,比较难按,很多人会改为screen中的<c-a>,来保持一致性。可是这和emacs风格的终端回到行首的快捷键冲突,我使用的是c-k。大家可以根据自己喜好来配置:

1
2
set -g prefix ^k
unbind ^b

输入?显示所有的bind-key,如图

如果设置了setw -g mode-keys vi,可以使用vi 的 j k风格快捷键上下浏览。这些bind-key显示了所有的tmux操作。按q退出。

下面就介绍一些常用的操作,为了方便大家查看,所有的bind-key都是系统默认的,而不是我自己配置的。省略了前缀键。

复制粘贴

  • [ 进入复制模式。
  • ] 粘贴

进入复制模式后,可以用vi风格的快捷键进行移动(按上文的设置)。按下sapce就可以选择文本。回车键进行复制。然后再通过]进行粘贴。

这里我将复制粘贴设为类似vi的模式,使用esc进入复制模式,v进入粘贴模式,选择后y进行复制。<Prefix-p>进行粘贴.

# Copy and paste like in vim
unbind [
bind Escape copy-mode
unbind p
bind p paste-buffer
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection

所有的复制都会被记录到缓冲区,输入#或者 tmux list-buffers查看缓冲区,同时也进入了复制模式。也可以使用”=”来选择并粘贴缓冲区内容。tmux的缓冲区和系统剪贴板是完全独立的,为了复制到系统剪贴板,我做了如下处理,对于mac os X用户:

第一步:

brew install reattach-to-user-namespace

而后增加配置:

# getting tmux to copy a buffer to system clipboard
set-option -g default-command "reattach-to-user-namespace -l zsh" # or bash...
bind y run "tmux save-buffer - | reattach-to-user-namespace pbcopy" \; display-message "Copied tmux buffer to system clipboard"
bind C-v run "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"

这样,在tmux中进行复制后。按下前缀键后键入y,就会在状态栏显示已粘贴到剪贴板,如图

此时,就可以用cmd-v进行粘贴了。系统剪贴板的也可以键入<C-v>粘贴。(当然,更方便的还是直接cmd-v,无需前缀键)。

对于linux用户,可以使用xclip,配置如下:

bind y run-shell "tmux show-buffer | xclip -sel clip -i" \; display-message "Copied tmux buffer to system clipboard"

同样键入y复制buffer中最新的内容到系统剪贴板。

session操作

  • d deattch当前session。输入tmux attach [-t sessionname]重新进入该session。
  • tmux ls 列出所有session。如图:输入,退出当前session后,tmux attach -t 1即可切换到名字为1的session。
  • $ 重命名当前session
  • <c-z> 挂起当前session

window操作

  • c 创建一个新的window
  • b 重命名当前window
  • & 关闭当前window
  • n 移动到下一个窗口
  • p 移动到前一个窗口
  • l 切换到上一个窗口
  • w 列出所有窗口编号,并进行选择切换
  • 编号 移动到指定编号的窗口。
  • . 修改窗口编号,相当于排序。
  • f 搜索所有的窗口。非常方便的功能。如图

pane操作

  • " 横向分割
  • % 纵向分割
  • 方向键 在pane直接移动
  • o 到下一个pane
  • opt+方向键 调整pane大小
  • { / }左右pane交换
  • 空格 横竖切换
  • q 显示pane的编号
  • x 关闭当前pane

我的配置将分割操作改为vi风格的vs,而pane之间的跳转也改为vi风格,调整pane的大小也是一样。配置如下:

# split windows like vim.  - Note: vim's definition of a horizontal/vertical split is reversed from tmux's
unbind '"'
unbind %
unbind s
bind s split-window -v
bind S split-window -v -l
bind v split-window -h
bind V split-window -h -l
# navigate panes with hjkl
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# resize panes like vim
bind < resize-pane -L
bind L resize-pane -L
bind > resize-pane -R
bind R resize-pane -R
bind - resize-pane -D
bind D resize-pane -D
bind + resize-pane -U
bind U resize-pane -U
# swap panes
bind ^u swapp -U
bind ^d swapp -D
同时还绑定了
bind q killp

使用q来关闭pane,免去了关闭确认.但是会覆盖掉原有的p操作,显示pane编号。我不需要这个,覆盖就覆盖了。

脚本化tmux

tmux可以进入命令行模式,快捷键为:。而且运行的命令在不同的session中都会生效。我绑定了一个命令:

bind r source-file ~/.tmux.conf \; display "Configuration Reloaded!"

这样只要输入r,就可以重新加载tmux.conf配置文件。

还可以用来进行自动化布局,例如:

selectp -t
splitw -h -p
selectp -t
splitw -v -p 'node'
selectp -t

将其保存在随便在一个文件中,而后使用和上述类似的source-file加载该文件,就会分隔三个pane,其中一个pane 会输入node,开启一个node的js shell。其中的50,40 为占窗口大小的百分比。

同时,tmux还支持运行shell脚本。可以写一个shell脚本进行各种环境初始化和布局初始化。这里就不再介绍了。

状态栏

tmux的状态栏配置非常简单。相比screen就…… 比如我的配置中:

set -g status-left "#[fg=green]s#S:w#I.p#P#[default]"

这一行就将状态栏左侧配置为:

绿色,#S,#I,#p分别表示session,window,pane编号。

当然,你可以让状态行更强大,可以使用tmux-powerline。 如图

是一个示例样式。 不过我还是喜欢简洁,而且大多数的信息其实都没什么用。自己并没有使用,不过还是推荐大家试一试,使用也不复杂,按照说明一步步来就可以了。使用powerline需要使用pathc过的字体,在这里可以找到一些,当然也可以自己patch。


最后提供我的整个配置文件,可以在我的dotfiles的tmux目录下找到。

欢迎留言交流。也可以关注我的微博foocoder

终端环境之tmux的更多相关文章

  1. Linux终端复用工具 tmux

    简介 Terminal Multiplexer (From WIKIPEDIA) - A terminal multiplexer is a software application that can ...

  2. 使用Tmux提高linux终端环境下的效率

    最近转移到linux下开发,同事告诉我一个工具tmux.关于tmux的工具的使用参考以下文章 如何使用Tmux提高终端环境下的效率 tmux的使用和快捷键 tmux简明教程 tmux使用大全

  3. 我在用的mac软件(2)-终端环境之zsh和z(*nix都适用)

    继续上篇介绍我的终端环境.这篇介绍zsh和z,其实这不局限于os x,在所有的*nix系统中都是可用的. zsh zsh作为bash的替代品,自然很多人要问:why zsh? 在Zsh Worksho ...

  4. 我在用的mac软件(1)--终端环境之iTerm2

    之前一直有朋友要我分享下在用的mac软件,今天有空就来写一下,可能不止于软件,会有一些配置或者工具,或者叫环境更合适.有些可能一句话带过,有些会详细介绍.也不分类了,想到哪个就写出来.如果已经写的足够 ...

  5. Linux终端复用神器-Tmux使用梳理

    Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“ ...

  6. 终端复用工具 tmux 基本操作教程

    简介 在 Linux 操作环境下,终端操作是发挥 Linux 强大命令功能的重要途径,但在本地主机操作中,针对不同任务开启不同的终端,在使用时进行频繁的终端切换在某些场合下是一种使人分心和疲惫的操作, ...

  7. (转载)Linux终端复用神器-Tmux使用

    Linux终端复用神器-Tmux使用 转载地址:https://blog.51cto.com/652465/2094738 Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于Open ...

  8. 终端复用工具-tmux

    目录 终端复用工具--Tmux 一.为什么要用Tmux? 二.tmux是什么? 三.Tmux基本概念 四.Tmux使用规则 1.安装Tmux 2.基本使用 3.自定义配置文件 五.补充 1.tmux ...

  9. Linux/UNIX 下终端复用利器 tmux

    简介 tmux 是一个终端复用器类自由软件,功能类似 GNU Screen,但使用 BSD 许可发布.用户可以通过 tmux 在一个终端内管理多个分离的会话,窗口及面板,对于同时使用多个命令行,或多个 ...

随机推荐

  1. [CS231n-CNN] Image classification and the data-driven approach, k-nearest neighbor, Linear classification I

    课程主页:http://cs231n.stanford.edu/ Task: Challenges: _________________________________________________ ...

  2. 剑指架构师系列-Struts2的缓存

    Struts2的缓存中最重要的两个类就是ReferenceMap与ReferenceCache.下面来解释下ReferenceCache中的get()方法. public V get(final Ob ...

  3. HMM 自学教程(二)生成模型

    本系列文章摘自 52nlp(我爱自然语言处理: http://www.52nlp.cn/),原文链接在 HMM 学习最佳范例,这是针对 国外网站上一个 HMM 教程 的翻译,作者功底很深,翻译得很精彩 ...

  4. 数据库中触发器before与after认识

    Before与After区别: before:(insert.update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据. 对于INSERT语句, 只有NEW是合法的 ...

  5. 四则运算APP(BUG发掘)

    BUG: 1.有几率会出现一样的题目. 2.题目会出现两个一样的答案. 3.做题结束后不能返回主界面或者重新开始. 感想: 1.题目应该按年级分类出题. 2.主界面可以添加更多功能 如自己输入题目数, ...

  6. P6 EPPM Installation and Configuration Guide 16 R1 April 2016

    P6 EPPM Installation and Configuration Guide 16 R1         April 2016 Contents About Installing and ...

  7. 开发(ASP.NET程序)把写代码写至最有面向对象味道

    前几天,搬房子时又拿起<重构----改善既有代码的设计>这本书来随便翻来看下,重构Refactoring在开发时,是时常也经常会使用得到. 她确实教我们怎样把写程序写简洁,清楚 好明白,好 ...

  8. 局域网电脑Sql2008 R2无法连接到localhost 解决方案

    1.自己电脑加入加入了公司域的话,链接Sql Server服务器,用127.0.0.1或.或localhost登录时会提示如下错误: 2.解决措施: 打开Sql配置管理器->SqlServer网 ...

  9. 周末web前端练习

    在 CSS 样式定义中,以下哪种 RGB 颜色值是 Web 安全色?   A]#111111B]#222222C]#333333D]#444444 答案:http://hovertree.com/ti ...

  10. C# SortedList类概念和示例

    SortedList 类 [C#] 命名空间: System.Collections 表示键/值对的集合,这些键和值按键排序并可按照键和索引访问. SortedList 是 Hashtable 和 A ...