今天继续介绍我的终端环境,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. [LeetCode] Fraction to Recurring Decimal 哈希表

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  2. yousa_team团队项目 兼职平台 完成展示

    我们团队的团队项目是一个大学生兼职网站,商家可以在网站上发布信息,学生对相应的岗位进行预约,然后根据信誉度来表示用户的信誉,整个平台由管理员监控, 包括修改错误信息,修改用户信誉度,删除过期信息,接受 ...

  3. JS基础---->js中ajax的使用

    AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术.今天我们就简单的学习一下ajax的使用及过程. ajax的使用 先贴出大致的代码,是请求本地的一个servlet,返回json格 ...

  4. Direct3D11学习:(七)绘图基础——彩色立方体的绘制

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 在前面的几篇文章中,我们详细介绍了Direct3D渲染所需要的数学基础和渲染管道理论知识.从这篇文章开始,我们就 ...

  5. MySQL+Sphinx实现全文搜索

    最近在做一个搜索引擎,主要是对图书方面的对象级的搜索,首先来了解下Sphinx吧. 它能够提高你的查询的速度,这个不是一般的快. Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,Pos ...

  6. [C/C++][文件操作] 对比目录并列出同名较新文件、较旧文件 0.1

    主要是模仿robocopy的部分功能 (robocopy /L 参数可以列出本地目录和备份目录中的异同之处,主要是标记出:较新的.较旧的.多出的文件 ) 现在还不会写GUI,打算后面自己做目录树dif ...

  7. 【Jquery回顾】解决$冲突的问题->自定义JQuery快捷键

    $(function() { $whatever = jQuery.noConflict(); alert($whatever("#cr").text()); })

  8. 怎样解决asp.net.mvc上传附件超过长度问题?

    最近,在做一个上传附件功能,但是文件超过4M,就报上传的文件超过长度问题

  9. 重新想象 Windows 8 Store Apps (41) - 打印

    [源码下载] 重新想象 Windows 8 Store Apps (41) - 打印 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 打印 示例1.需要打印的文档Pr ...

  10. 重新想象 Windows 8 Store Apps (60) - 通信: 获取网络信息, 序列化和反序列化

    [源码下载] 重新想象 Windows 8 Store Apps (60) - 通信: 获取网络信息, 序列化和反序列化 作者:webabcd 介绍重新想象 Windows 8 Store Apps ...