程序锅

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于

  • 搜索
基础知识 Etcd LeetCode 计算机体系结构 Kubernetes Containerd Docker 容器 云原生 Serverless 项目开发维护 ELF 深入理解程序 Tmux Vim Linux Kernel Linux numpy matplotlib 机器学习 MQTT 网络基础 Thrift RPC OS 操作系统 Clang 研途 数据结构和算法 Java 编程语言 Golang Python 个人网站搭建 Nginx 计算机通用技术 Git

Tmux使用教程+配置文件更改

发表于 2020-02-02 | 分类于 Linux | 0 | 阅读次数 2381

Tmux是一个优秀的终端复用软件,使用它最直观的好处就是通过一个终端登录远程主机并运行tmux后,可以通过tmux开启多个控制台而无需再开多余的终端来连接这台远程主机。如下所示

另外使用tmux的一个主要原因是它提供了一个窗体组随时存储和恢复的功能,即使 iTerm/Terminal/Konsole 意外关闭也没关系,因为 Session 完全保存在 Tmux Server 中。这个功能适用于如下场景:比如服务器开了一堆vim和log打印窗口,结果到下班时间了,然后回家之后想要继续debug或者coding。那么请使用tmux。

假如说选择tmux还有另外一个原因的话,那就是tmux支持自定义配置。

1. 安装

本次tmux安装的环境为Ubuntu 16.04,采用如下命令即可完成安装。

$ sudo apt-get install tmux

使用tmux,输入tmux即可使用。

2. 基本概念

下面来理解一下tmux的几个元素,tmux的主要元素分为三层:

  • Session。一组window的集合,通常用来概括一个任务。session可以有自己的名字用于标识。
  • Window。单个可见窗口,window有自己的编号。
  • Pane。window又可以被划分成一个个小窗口,称为pane。

整个元素的框图如下所示

对应实际的情况如下所示(默认情况下,不修改任何配置)

  • task1为该session的名字。
  • 该session有3个window,分别编号0、1、2。*标注在当前正在使用的window。
  • 当前的window又被分成了3个pane。

3. 基本操作

下文中的prefix是指前置操作,tmux默认的前置操作是ctrl +b。例如想要断开当前session,先需要摁下ctrl+b,松开之后再摁下d。前置操作的快捷键可以通过修改配置文件来改变,下文将会提到。

3.1. 关于Session的操作

在terminal中输入的关于session的操作如下

功能操作
启动新的sessiontmux [new -s 会话名 -n 窗口名]
查看session,当前正常运作中的tmux server都会显示tmux ls
重新连接session,这里的a是attach的意思。如果只有一个session的话,使用tmux a即可tmux a [-t 会话名]
删除sessiontmux kill-session -t 会话名
重命名sessiontmux rename -t 旧会话名 新会话名

在tmux状态下关于session的操作如下

功能操作
重命名当前Sessionprefix + $
断开一个session。这种方式断开会将session保存下来,之后可重新打开,有别于下面的"exit"方式prefix + d
查看/切换sessionprefix + s
启动新会话prefix + :new(先进入命令行输入状态,再键入new)

上述tmux状态是指输入tmux命令之后会进入的,terminal就是原生的终端。上面的那张示意图就是在tmux状态下。

3.2. 关于Window的操作

功能操作
创建一个新的window。最下面会多出window的编号。有*号所在的window就是当前正在操作的windowprefix + c
在不同的window间切换。直接输入需要进入的window的数字编号即可prefix + 窗口号
后一个windowprefix + n
前一个windowprefix + p
关闭当前windowprefix + &
重命名windowprefix + , (逗号)
列出所有的窗口prefix + w
切换到上一个活动的窗口prefix + space

3.3. 关于Pane的操作

功能操作
水平分割paneprefix + %
竖直分割paneprefix + "
切换paneprefix + o
在pane之间switch,之后会有设置的方法来用鼠标选择paneprefix + 上下左右的箭头
把光标所在的pane全屏显示。回到之前的多pane状态的话,只需要重复该操作即可。prefix + z
改变pane size。与上面命令不同的是,prefix按完之后,不要松开ctrl,一直按着,然后再按箭头来调整。prefix + (ctrl)+上下左右箭头
显示每个pane的编号,当数字出现的时候按数字几就切换到第几个paneprefix + q
与上一个pane交换位置,如当前pane编号为2,那么将与1进行交换prefix + {
与下一个pane交换位置prefix + }
退出一个paneshell里输入“exit”命令
让一个window中的pane进行同步prefix + :setw synchronize-panes(先进入命令行输入状态,在键入命令)

上述的exit命令可以退出Pane。当window中只有一个pane的时候,键入exit命令退出该window。同理,当session中只有一个window,该window只有一个pane时,键入exit将会退出session,该方式退出的session将不可恢复,因为你pane都exit完了。

Ctrl - d效果是一样的。

3.4. 复制粘贴

  • tmux模式中的复制粘贴

按下prefix+[后光标所处的pane进入文本复制模式,可以使用方向键在屏幕中移动光标。默认情况下是使用emacs快捷键选择文本的,但是博主习惯性使用vim快捷键方式。所以先在tmux.conf文件中写入这样的配置

setw -g mode-keys vi      # Vi风格选择文本

更新配置后,在文本复制模式下按下space开始拷贝,通过方向键或者vim快捷键方式选择文本。按下Enter键拷贝所选内容。然后通过prefix + ]进行粘贴。在启用vi模式之后,可以辅助一些别的快捷键高效工作。整理如下:

功能vi操作
反缩进^
清除选定内容Escape
复制选定内容Enter
光标下移j
光标左移h
光标右移l
光标移到尾行L
光标移到中间行M
光标移到首行H
光标上移k
删除整行d
删除到行末D
移到行尾$
前往指定行:
向下滚动半屏C-d
向上滚动半屏C-u
下一页C-f
下一个词w
粘贴p
上一页C-b
上一个词b
退出q
向下翻J or C-Down
向上翻K or C-Up
继续搜索n
向前搜索?
向后搜索/
移到行首0
开始选中Space

当然使用鼠标模式之后就可以使用鼠标来选取复制文本了,鼠标选中的内容都会被拷贝。但是通过这种方式拷贝的内容只能通过prefix + ]进行粘贴,相当于拷贝的内容没有同步到系统的剪切板中。

假如想要更符合vi风格,可以参考:https://harttle.land/2015/11/06/tmux-startup.html

  • 鼠标操作

这种方式与上述方式不同,这种方式是terminal界面的内容拷贝,拷贝的内容将会到剪切板中。按住 shift,鼠标左键选择文本,后右键点击,选择“复制”,注意全程按住 shift。但是这种方法可能存在如下问题,在复制左边pane内容的时候,右边pane的内容也会被复制,如下所示

那么可以换成按住shift+alt来进行复制。

3.5. 其他使用

功能操作
窗口中央显示一个数字时钟,按enter退出显示prefix + t
列出所有快捷键prefix + ?
进入命令输入状态prefix + :
查看当前tmux的配置tmux show -g

4. 个性化定制

默认的tmux风格比较朴素,快捷键方式也有点不太人性化。但是可以通过修改tmux的配置文件来实现个性化定制,tmux在新建session的时候,会去找tmux.conf文件。tmux配置文件位于~/.tmux.conf,如果没有的话就创建一个touch ~/.tmux.conf。下面列举一些常用的配置

prefix更改为Ctrl-a

# Setting the prefix from C-b to C-a
set -g prefix C-a

# Free the original Ctrl-b prefix keybinding
unbind C-b

# Setting the delay between prefix and command
set -s escape-time 1

# Ensure that we can send Ctrl-a to other apps
bind C-a send-prefix

使用shift + 箭头来进行window切换

# Shift arrow to switch windows
bind -n S-Left previous-window
bind -n S-Right next-window

split pane快捷键修改为|和-

# Splitting panes replace % and "
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %

pane切换快捷键增加/更改

# moving between panes using hjkl
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# switch panes using Alt-arrow without prefix
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

resize pane快捷键增加,prefix+HJKL(先按prefix,按完之后不断按HJKL)即可修改pane size

# Pane resizing
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

快捷键方式更新配置,使得无需重启就可以让配置生效。这是因为tmux只有在新建session的时候,才会去找tmux.conf文件,那么已经创建的session使用的还是之前的tmux.conf文件。

# Reload the file with Prefix r
bind r source-file ~/.tmux.conf \; display "Reloaded!"

启动鼠标功能,也就意味着可以鼠标改变pane size,鼠标选择pane、window等

# Mouse support
# setw -g mode-mouse on
# set -g mouse-select-pane off
# set -g mouse-resize-pane off
# set -g mouse-select-window off
# incompatible since tmux 2.1
set -g mouse on

2.1 之前的版本(发布于 2015.10.18) 需要设置 mode-mouse, mouse-select-pane, mouse-resize-pane, mouse-select-window 等4 个选项来开启所有鼠标功能,现在只需要设置 mouse 选项了。 使用 tmux -V 可以查看当前安装的 tmux 版本。

新split 出来的pane的工作目录在默认情况下跟创建该session时的工作目录是一样的,下面将其修改为当前pane的工作目录

bind '"' split-window -c '#{pane_current_path}'
bind '%' split-window -h -c '#{pane_current_path}'

博主自己在使用的.tmux.conf对tmux默认的主题颜色配置进行了修改,也修改了一些快捷键。可以通过这个链接获取:https://gist.github.com/DawnGuoDev/f44eca4f9c34d7d62571b83d3e391583 。参考的配置文件为https://gist.github.com/terrywang/3950393 。

5. 总结

  • Tmux给的快捷键很多,上述列出都是常用的。你可以通过prefix + ?来查看所有快键键,也可以查看这个网址:https://tmuxcheatsheet.com/ 。
  • 通过上面的内容即可基本掌握tmux的使用,按照上述的配置内容也可以基本配置出符合自己的个性化配置。
  • 写教程不仅仅是为了给别人看,更多是为了让自己更加全面的了解这个工具,也让自己对这个工具中的细节内容更加明白。同时也让自己之后的使用有一份不错的文档。真的是不整理不知道,一整理才发现自己之前的使用方式都不算正宗的tmux使用。

6. 参考资料

Tmux快捷键速查表:https://tmuxcheatsheet.com/

Tmux 快捷键 & 速查表 & 简明教程(PS:推荐,挺不错的总结):https://gist.github.com/ryerh/14b7c24dfd623ef8edc7

tmux简洁教程及config关键配置(PS:比较好懂的tmux教程):https://www.jianshu.com/p/fd3bbdba9dc9

优雅地使用命令行:Tmux 终端复用(PS:比较偏进阶):https://harttle.land/2015/11/06/tmux-startup.html

卷死我
dawnguo 微信支付

微信支付

dawnguo 支付宝

支付宝

  • 本文作者: dawnguo
  • 本文链接: /archives/121
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Linux # Tmux
深入理解程序 | 静态链接的过程
Go | Go 的顺序编程
  • 文章目录
  • 站点概览
dawnguo

dawnguo

215 日志
24 分类
37 标签
RSS
Creative Commons
© 2018 — 2025 程序锅
0%