欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tmux - Linux从业者必备利器

程序员文章站 2024-03-17 16:08:28
...

原作者:卢钧轶(cenalulu) 本文原文地址:http://cenalulu.github.io/linux/tmux/

文章后面自己加了一些基本操作,和配置问题
为什么要用tmux

tmux是什么?tmux是linux中一种管理窗口的程序。那么问题来了:Mac自带的Iterm2很好用啊。既支持多标签,也支持窗体内部Panel的分割,为什么还要用tmux?其实,多标签和分割窗体只是tmux的部分功能。用tmux的主要原因是它提供了一个窗体组随时存储和恢复的功能。看看以下的使用场景是否适合你:

  • 公司台式机开了一堆vim和log打印窗口下班了。到家后灵感突发,想要继续coding,登陆VPN,SSH连上台式后发现又要重新打开各种窗口,瞬间没心情了。。。FML!这个时候你就可以在你的公司台式机上装个tmux。同一组工作环境,在多处共享。
  • 公司服务器上调试程序,开了一堆窗口。出去吃了个饭,发现SSH超时了,broken pipe。重头开始。。。FML!如果你之前使用了tmux就不会有这样的问题,attach就能找回原来打开的那些窗口。

tmux的基本概念

我们先来理解下tmux的几个元素。tmux的主要元素分为三层:

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

为了更好的理解,下面是三个元素在tmux中的具体展现。

Tmux - Linux从业者必备利器
可以看到Session总在tmux的左下角显示,通常会为他命名。例如我正在写博客,开了很多窗口那么我就会把这组窗口命名为blog方便之后的重连和切换。而Window也会在最下方以一种Tab的形式展现。每个window都有自己的需要,也会以当前活动进程的名字命名。而Pane就比较好理解,即把单个窗口分割成若干个小块后的元素。

安装

本文以Mac环境为例。Linux的方法类似Centos系列的可以用yum install tmux安装。

brew install tmux

安装完直接执行tmux可能会有以下报错,按照下面的步骤执行命令即可

$junyilu> tmux
dyld: Library not loaded: /usr/local/lib/libevent-2.0.5.dylib
Referenced from: /usr/local/Cellar/tmux/1.9a/bin/tmux
Reason: image not found
Trace/BPT trap: 5

$junyilu> brew link libevent
Linking /usr/local/Cellar/libevent/2.0.22...
Error: Could not symlink lib/pkgconfig/libevent.pc
/usr/local/lib/pkgconfig is not writable.

$junyilu> sudo chown junyilu /usr/local/lib/pkgconfig

$junyilu> brew link libevent
Linking /usr/local/Cellar/libevent/2.0.22... 25 symlinks created

tmux的基本操作

Prefix-Command前置操作:所有下面介绍的快捷键,都必须以前置操作开始。tmux默认的前置操作是CTRL+b。例如,我们想要新建一个窗体,就需要先在键盘上摁下CTRL+b,松开后再摁下n键。

下面所有的prefix均代表CTRL+b

  • ? 列出所有快捷键;按q返回
  • d 脱离当前会话,可暂时返回Shell界面
  • s 选择并切换会话;在同时开启了多个会话时使用
  • D 选择要脱离的会话;在同时开启了多个会话时使用
  • : 进入命令行模式;此时可输入支持的命令,例如 kill-server 关闭所有tmux会话
  • [ 复制模式,光标移动到复制内容位置,空格键开始,方向键选择复制,回车确认,q/Esc退出
  • ] 进入粘贴模式,粘贴之前复制的内容,按q/Esc退出
  • ~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
  • t 显示当前的时间
  • ctrl + z 挂起当前会话

Session相关操作

操作 快捷键
查看/切换session prefix s
离开Session prefix d
重命名当前Session prefix $

Window相关操作

操作 快捷键
新建窗口 prefix c
切换到上一个活动的窗口 prefix space
关闭一个窗口 prefix &
使用窗口号切换 prefix 窗口号

Pane相关操作

操作 快捷键
切换到下一个窗格,也可以使用方向键来选择 prefix o
查看所有窗格的编号 prefix q
垂直拆分出一个新窗格 prefix “
水平拆分出一个新窗格 prefix %
暂时把一个窗体放到最大 prefix z
 关闭当前窗格                prefix x

tmux外的基本操作

  • session 会话:session是一个特定的终端组合。输入tmux就可以打开一个新的session
    • tmux new -s session_name 创建一个叫做 session_name 的 tmux session
    • tmux attach -t session_name 重新开启叫做 session_name 的 tmux session
    • tmux switch -t session_name 转换到叫做 session_name 的 tmux session
    • tmux list-sessions / tmux ls 列出现有的所有 session
    • tmux detach 离开当前开启的 session
    • tmux kill-server 关闭所有 session
  • window 窗口:session 中可以有不同的 window(但是同时只能看到一个 window)
    • tmux new-window 创建一个新的 window
    • tmux list-windows
    • tmux select-window -t :0-9 根据索引转到该 window
    • tmux rename-window 重命名当前 window
  • pane 面板:window 中可以有不同的 pane(可以把 window 分成不同的部分)
    • tmux split-window 将 window 水平划分为两个 pane
    • tmux split-window -h 将 window 垂直水平划分为两个 pane
    • tmux swap-pane -[UDLR] 在指定的方向交换 pane
    • tmux select-pane -[UDLR] 在指定的方向选择下一个 pane

常见配置与问题

1、鼠标滚屏

tmux 默认配置中最糟糕的体验就是滚屏查看和文本复制(大家可以先试试看)。你需要先使用 ⌃b [ 快捷键进入 copy 模式,然后使用翻页、字符定位来选择需要的字符,效率远没有鼠标选择来的快。

因此 tmux 提供了一些个性化配置项来优化这些配置,首先在 shell 中运行 touch ~/.tmux.conf 新建用户配置文件。在文件中增加以下内容:

# 开启鼠标模式
set -g mode-mouse on

# 允许鼠标选择窗格
set -g mouse-select-pane on

# 如果喜欢给窗口自定义命名,那么需要关闭窗口的自动命名
set-option -g allow-rename off

# 如果对 vim 比较熟悉,可以将 copy mode 的快捷键换成 vi 模式
set-window-option -g mode-keys vi

配置文件修改完成后,可以 tmux kill-server 重启所有 tmux 进程,或者在 tmux 会话中使用 ⌃b : 进入控制台模式,输入 source-file ~/.tmux.conf 命令重新加载配置。

注意:tmux 2.1 以上版本(使用 tmux -V 命令可查看版本号)对鼠标模式配置有调整,需要将以上配置文件中的前两项配置替换成 set-option -g mouse on 这一项配置。

2、鼠标复制

tmux 下开启鼠标滚屏后,复制文本有两种方式:

  • 方法 1:使用 ⌃b z 进入窗格全屏模式,鼠标选择文本的同时按住 option 键 ,然后使用 ⌘c 进行复制;
  • 方法 2:开启 iTerm2 「在选择时复制」选项,即可实现自动选择复制。如下图:

Tmux - Linux从业者必备利器

3、tips

  • screen 是另外一款终端复用命令行,但他没有 tmux 好看好用;
  • tmux 有个 bug ,导致从它启动的 vscode 的复制粘贴快捷键会失效;
  • iTerm2 可以通过 「Preferences -> Profiles -> Keyboard Behavior -> Left option key acts as +Esc」将键盘的左侧 option 键映射为 Meta 键
  • zsh-autosuggestions 插件在 tmux 环境下有配色高亮的 bug,解决方案是在 .zshrc 文件中配置 export TERM=xterm-256color



上一篇: java顺序查找和二分查找

下一篇: