tmux是Linux中窗口管理程序,适用于终端复用,尤其适合远程连接。最近,我正苦闷与ssh自动超时退出和broken pipe,决定投入tmux怀抱。
使用tmux最直接的好处,便是可以在一个远程连接中开启多个控制台,而不用浪费额外的终端来连接远程主机。更不用说tmux方便的attach/detach,随时保存工作状态,还有方便的复制粘贴功能。

基本使用

tmux的主要元素分为三层:

Session: 一组窗口的集合,通常用来概括同一个任务。session可以有自己的名字便于任务之间的切换。
Window: 单个可见窗口。Windows有自己的编号,也可以认为和ITerm2中的Tab类似。
Pane: 窗格,被划分成小块的窗口,类似于Vim中 C-w +v 后的效果。

在安装好tmux后,直接在终端中输入tmux并回车,就进入了一个全新的tmux会话,输入exit即可退出。
可以在一台计算机上创建多个会话,并且通过为每个会话指定一个唯一的名称来管理它们:
tmux new-session -s basic
此命令可简化为:tmux new -s basic
由于我们的程序是在 tmux 环境里运行的,因此需要一种方式来告诉 tmux 当前所输入的命令是为了让 tmux 去执行而不是 tmux 里的应用程序去执行,这就是命令前缀的作用。tmux中默认的命令前缀是CTRL-b 组合键,但CTRL-b 组合键使用不是很方便,可将其修改为CTRL-a 组合键。按下命令前缀组合键,松开,再按相应键,即发送tmux命令。

tmux 创建会话

tmux new-session 创建一个未命名的会话。可以简写为 tmux new 或者就一个简单的tmux
tmux new -s development 创建一个名为 development 的会话
tmux new -s development -n editor 创建一个名为 development 的会话并把该会话的第一个窗口命名为 editor
tmux attach -t development 连接到一个名为 development 的会话

tmux会话、窗口和面板的默认快捷键

PREFIX d 从一个会话中分离,让该会话在后台运行。
PREFIX : 进入命令模式
PREFIX c 在当前 tmux 会话创建一个新的窗口,是 new-window 命令的简写
PREFIX 0...9 根据窗口的编号选择窗口
PREFIX w 显示当前会话中所有窗口的可选择列表
PREFIX , 显示一个提示符来重命名一个窗口
PREFIX & 杀死当前窗口,带有确认提示
PREFIX % 把当前窗口垂直地一分为二,分割后的两个面板各占 50% 大小
PREFIX " 把当前窗口水平地一分为二,分割后的两个面板各占 50% 大小
PREFIX o 在已打开的面板之间循环移动当前焦点
PREFIX q 短暂地显示每个面板的编号
PREFIX x 关闭当前面板,带有确认提示
PREFIX SPACE 循环地使用 tmux 的几个默认面板布局

tmux复制粘贴

PREFIX [ 进入复制模式
PREFIX ] 粘贴
进入复制模式后,可以用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的缓冲区和系统剪贴板是完全独立的。

自主配置

# 把前缀键从 C-b 更改为 C-a
set -g prefix C-a

# 释放之前的 Ctrl-b 前缀快捷键
unbind C-b

# 设定前缀键和命令键之间的延时
set -sg escape-time 1

# 确保可以向其它程序发送 Ctrl-A
bind C-a send-prefix

# 把窗口的初始索引值从 0 改为 1
set -g base-index 1

# 把面板的初始索引值从 0 改为 1
setw -g pane-base-index 1

# 使用 Prefix r 重新加载配置文件
bind r source-file ~/.tmux.conf ; display "Reloaded!"

# 分割面板
bind | split-window -h
bind - split-window -v

# 在面板之间移动
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 快速选择面板
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

# 调整面板大小
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

# 鼠标支持 - 如果你想使用的话把 off 改为 on
setw -g mode-mouse off
set -g mouse-select-pane off
set -g mouse-resize-pane off
set -g mouse-select-window off

# 设置默认的终端模式为 256 色模式
set -g default-terminal "screen-256color"

# 开启活动通知
setw -g monitor-activity on
set -g visual-activity on

# 设置状态栏的颜色
set -g status-fg white
set -g status-bg black

# 设置窗口列表的颜色
setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim

# 设置活动窗口的颜色
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright

# 设置面板和活动面板的颜色
set -g pane-border-fg green
set -g pane-border-bg black
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow

# 设置命令行或消息的颜色
set -g message-fg white
set -g message-bg black
set -g message-attr bright

# 设置状态栏左侧的内容和颜色
set -g status-left-length 40
set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
set -g status-utf8 on

# 设置状态栏右侧的内容和颜色
# 15% | 28 Nov 18:15
set -g status-right "#(~/battery Discharging) | #[fg=cyan]%d %b %R"

# 每 60 秒更新一次状态栏
set -g status-interval 60

# 设置窗口列表居中显示
set -g status-justify centre

# 开启 vi 按键
setw -g mode-keys vi

# 在相同目录下使用 tmux-panes 脚本开启面板
unbind v
unbind n
bind v send-keys " ~/tmux-panes -h" C-m
bind n send-keys " ~/tmux-panes -v" C-m

# 临时最大化面板或恢复面板大小
unbind Up
bind Up new-window -d -n tmp ; swap-pane -s tmp.1 ; select-window -t tmp
unbind Down
bind Down last-window ; swap-pane -s tmp.1 ; kill-window -t tmp

# 把日志输出到指定文件
bind P pipe-pane -o "cat >>~/#W.log" ; display "Toggled logging to ~/#W.log"

参考链接

1、tmux: Productive Mouse-Free Development
2、tmux入门指南--Abyssly's Blog
3、Tmux - Linux从业者必备利器
4、终端环境之tmux

tmux使用入门的更多相关文章

  1. 【tmux环境配置】在centos6.4上配置tmux

    我学习tmux的动力如下: (1)tmux大法好.原因是被同学安利过tmux. (2)多个terminal下ssh到开发机太麻烦.还是之前实习的时候,总要开N个terminal去ssh开发机,这种东西 ...

  2. 【转】tmux入门指南

    按照官方说明,tmux是一个终端复用软件.我接触tmux也就是这几天的事情,但已经发现其强大.作为一个文艺程序员,有必要向大家分享一下,这么好的东东怎敢藏着掖着. 先用起来再说 假设你已经装好tmux ...

  3. Tmux 入门

    什么是 Tmux Tmux 官方 Wiki 简单来说,Tmux 是一个能够让你一个窗口当多个窗口使用的终端模拟器.并且你还可以将它放到后台,等到想使用的时候再使用. 为什么要用 Tmux 在服务器上调 ...

  4. tmux入门

    按键 man tmux和C+b?两个操作可以获得一切. C-b ? 显示快捷键帮助 C-b C-o 调换窗口位置,类似与vim 里的C-w C-b 空格键 采用下一个内置布局 C-b ! 把当前窗口变 ...

  5. Tmux入门教程

      对于程序员来说效率绝对是最重要的,那我们今天就来介绍下一个能极大提高工作效率的软件Tmux.   Tmux 是一个工具,用于在一个终端窗口中运行多个终端会话.不仅如此,你还可以通过 Tmux 使终 ...

  6. tmux入门 : 3. 会话

      上一节我们已经将 tmux 安装好了,现在就可以通过以下命令来启动它: $ tmux 启动之后,可以看到命令行最底部多了一条绿色的状态条,上面显示了一些信息,比如计算机名和时间等. 要退出 tmu ...

  7. tmux 入门踩坑记录

    软件安装 sudo apt-get install tmux 1. 分割左右窗口 ^b -> % 运行 tmux 新建一个 tmux 的会话(session),此时窗口唯一的变化是在底部会出现一 ...

  8. tmux 入门教程

    tmux 本教程是基于ACWing的<Linux基础课>所做,希望大家支持ACWing 功能 分屏 当需要同时运行两个终端,并且进行比对着输入时,来回切换比较麻烦,就可以利用分屏 可以在一 ...

  9. 打造高效前端工作环境 - tmux

    打造高效前端工作环境 - tmux 前言  现在前端开发可不容易啊,先打开个VIM,然后再打开个lite-server,一不小心写个ES2015还要打开个gulp来做预编译,如果能把这么多个窗口放在一 ...

随机推荐

  1. php 批量检测bom头,去除bom头工具

    <?php //有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题.以下是批量清除bom头的代码 if (isset ( $_GET ['dir'] )) { //confi ...

  2. NetCore Netty 框架 BT.Netty.RPC 系列随讲 —(前序) REST API 与 RPC 经典网络基础服务架构

    在服务体系架构内,我们所知道的,有两种请求模型: Http 请求模型,以及 RPC 请求模型.因此,在一个互联网请求模型架构上,都是这两种的请求模型的向互组合. 下面给出两种常见的互联网经典基础架构图 ...

  3. [读书笔记2]《C语言嵌入式系统编程修炼》

    第3章 屏幕操作   3.1 汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示&qu ...

  4. .net引用System.Data.SQLite操作SQLite

    之所以要做这个笔记,是因为在.NET中使用System.Data.SQLite的时候,遇到了些问题,这些问题是相对于引用其他dll没有遇到过的,所以作个笔记,记录一下. 简单起见,首先建立一个控制台项 ...

  5. spring的依赖注入如何降低了耦合

    依赖注入:程序运行过程中,如需另一个对象协作(调用它的方法.访问他的属性时),无须在代码中创建被调用者,而是依赖于外部容器的注入 看过一些比较好的回答 1.一个人(Java实例,调用者)需要一把斧子( ...

  6. 用 jQuery 实现简单倒计时功能

    问题场景:假设某个活动截止时间给定了,现在需要开发一个页面可以自动刷新距离活动截止时间还剩多少天? <!DOCTYPE html> <html xmlns="http:// ...

  7. java简单打印金字塔(案例)

    学习编程语言,打印简单的金字塔是基础的案例,在这里就简单的写了个案例,希望能帮助到各位 代码 效果 class  kinTa{    public static void main(String[] ...

  8. C#模拟百度登录并到指定网站评论回帖(五)

    前面的四篇已经说完了全部的模拟百度登录,接下来就是到指定的网站去发表评论,当然你也可能是获取其他信息,其实这些套路都是万变不离其宗的,弄懂之后觉得像这种请求-响应获取信息的功能实在很简单(想起当初走的 ...

  9. Objective-C设计模式——外观Faced(接口适配)

    外观模式 外观设计模式和适配器差不多,不过它门对对象控制的粒度不同,适配器一般只是控制一个系统和客户端的对接.外观则是用来抽象多个系统一起工作. 外观一般具有多个子系统,所以外观应持有多个子系统的引用 ...

  10. P1160 队列安排

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...