fgg blog

利器1: Oh, My Tmux – 键盘驱动(为主)的工作流

Table of Contents

Tmux 是一个终端多路复用器1:…

Tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.

那到底什么是“终端”terminal2 我回答不了这个问题,但我发现了一个很好的解释 – terminal

突然想起《统计学》关于“卡方检验”那一章的经典导语:

不要问它的含义,宁可问如何使用它。– 维特根斯坦

本着“拿来主义”精神,那就来粗略看看 Tmux 能如何使用吧:

IMG_MyTmux – (gif 失效)

  1. 启动 Termainal (CTRL+Enter, 这是个人定义的快捷键)

  2. 启动 Tmux 进入我的工作环境 (须知:我这里展示的不是初始化的 Tmux 启动)

  3. 检查一下昨天写的博客写到哪里了 (貌似差不多了,写其他内容)

  4. 切换到下一场“会话”(session) – vimwiki (这里是我个人项目根目录)

  5. 按进度今天应该介绍一下 Tmux 这个工具 (然后,就到这里了)

  6. 现在阳光明媚(过一会儿就变毒辣),白天还是换到白色背景合适些

  7. 搬砖滴干活咯各位
    嗯,干活?更像是创作
    创作?这算哪门子的…
    所以还是,干点活吧 :)


# Tmux 的一些关键配置

如果还没有安装 Tmux,命令行中安装起来也不费事 (Debian系列):apt install tmux

以下的内容均围绕 ~/.tmux.conf 文件展开。如果没有就自己创建一个这文件。 默认这些代码框里的内容(等宽字体那些)是要添加到 ~/.tmux.conf 文件里。

“#” 开头的语句是注释说明
“$” 开头的语句是要在命令行运行的命令
“:command” 以“冒号接命令名”开头的语句是要在vim命令模式运行的命令

# 默认快捷键修改: Ctrl-b -> Ctrl-a

Tmux 的默认快捷键是 ctrl-b,这在键盘上距离略微有点远 (对于我的短手指来说), 因此我把它修改为 ctrl-a 组合键。

将下面语句加入 .tmux.conf 文件:

set -g prefix C-a
# # unbind the C-b
unbind C-b
# # ensure that we can send Ctrl-a to other apps (e.g., vim)
bind C-a send-prefix
# # setting the delay between prefix and command
set -s escape-time 1

既然是要用快捷键,那么重新加载 .tmux.conf 文件的自然也安排上:

# reload the .tmux.conf file with Prefix-r
bind r source-file ~/.tmux.conf \; display "tmuxconf reloaded!"

然后,在命令行直接输入快捷组合键:Ctrl+a+r 即可使配置生效 (+号的意思是同时摁下)。

# vim/tmux 强强组合

Tmux 支持多个终端窗格 (terminal panes),每个窗格都是独立的终端, 因此,最明显的事情就是,你可以同时在一块屏幕上“监控”多个不同任务,意思是, 这些不同的任务在视觉上是“同时”呈现的(相对于重叠的 标签页(tab) 而言)。

如果你恰好也喜欢用 vim 进行码字,也打开了 vim 编辑器 (vim 本身也有窗格功能), 自然而然的,你肯定想以相同的快捷键来实现不同的 vim/tmux 窗格之间的切换。

幸运的是,已经有人实现了这样的功能,并共享了,这就是 vim-tmux-navigator.

vim 有丰富的插件生态,这是 vim 强大生命力的一个体现。 这么好的模式,自然值得借鉴。因此,tmux 也有一个用来管理插件的 tpm.

需要在 vim 和 tmux 两个方面进行配置:

  1. 在 vim 方面, 将以下语句加入 .vimrc 文件:
# 如果你用的是 Vim-Plug 插件管理器的话
Plug 'christoomey/vim-tmux-navigator'

然后运行 :PlugInstall 来安装这个插件。

如果你是第一次配置 vim 插件,先去了解 Vim-Plug.

  1. 在 tmux 方面,将下面语句加入 .tmux.conf 文件:
# tpm is a tmux-plugin manager.  [details in its github repos]
set -g @plugin 'tmux-plugins/tpm'
# vim-tmux-navigator: Seamless navigation between tmux panes and vim splits
set -g @plugin 'christoomey/vim-tmux-navigator'

# put this 'run' command to the very end of .tmux.conf, says the tpm's readme
run '~/.tmux/plugins/tpm/tpm'

加入这些内容之后,重新加载 tmux 环境, (在已经启动tmux的命令行运行以下命令):

$ tmux source ~/.tmux.conf

# 主题背景颜色切换

在我的印象里,感觉黑色/暗色系一下子成了很多应用软件的默认背景色, 我在命令行过活很多年了,对此很是习惯,个人很少看到谁的Terminal是白色背景的。 主要应该是:1)配置了白天黑夜都友好的主题;2)不当回事儿。 但有时候,特别是光线充足的时候,我比较喜欢白色的背景。 所以,我需要能随心所欲切换背景色调。

这个貌似没法不依赖于外部脚本来实现,至少我没有发现可行的办法。因此,你也需要 去下载这个脚本

Linux 环境氛围是这样的,不要盲目相信别人写的脚本,特别是那些你不认识的人。 相信开源和相信陌生人,毕竟不是同一件事。 意思就是,你在使用这些脚本之前好歹也要看看人家到底写了什么吧。 特别是这种都不超过一页内容的脚本。

什么?你说你看不懂。事实是,没有人在一开始就什么都看得懂。比如说, 你看到脚本里有这么一句类似于windows上“清理垃圾”的命令: sudo rm -rf /*, 那你就要保持警惕了。 据说,有些系统会阻止你这么干,但有些系统会“开心地”执行你的旨意; 反正我没试过,我也没有以任何方式暗示或鼓励你要这么清理系统垃圾。

如果说你下载了那个脚本,放到你喜欢它待的位置,比如说, ~/.tmux/bin/, 然后将下面这条语句加入 ~/.tmux.conf 文件中。

bind T run-shell ~/.tmux/bin/toggle-theme

# 关于配置和插件以及管理插件的插件

以上内容分别对应着:

1)直接对 tmux 进行基本配置;

2)使用 tmux 插件管理器对 tmux 进行配置;

3)借用 脚本程序 对 tmux 进行配置。

毕竟,不是每个人都热衷于使用插件管理器,插件和主件之间的交互方式并不设限。你可以选择使用你觉得合适的方法来完成任务。 要是觉得现有的都不满意,无法满足你的特殊需求,手痒痒的,那就自己搞一个。 很多优秀的软件都是如此,它提供足够好的默认值,但也提供足够多的灵活性,让用户有的选。

刘建明说“以前没的选,现在想选回做好人,给个机会”,陈永仁答“去同法官讲”。“有的选”这一点十分可贵。


Last update: 2024-07-04

USER: Tmux 是什么? GPT4o: Tmux 是一个终端多路复用器 (terminal multiplexer),允许用户在一个终端窗口内运行和管理多 个终端会话。它提供了一种方便的方法来分割一个物理终端窗口成多个虚拟终端,并在这些虚拟终端 之间自由切换。Tmux 的主要功能包括:

  • 会话管理:Tmux 可以创建、分离和重新附加会话,使用户可以在不同的终端会话之间快速切换。
  • 窗口分割:用户可以在一个Tmux会话中将窗口分割成多个窗格,每个窗格可以独立运行一个命令行程序。
  • 持久性:即使终端窗口关闭,Tmux 会话仍然会保持运行,这样用户可以稍后重新附加会话,继续工作。
  • 可定制性:Tmux 提供了丰富的配置选项和快捷键,用户可以根据自己的需求进行定制。

  1. 而如今,或许应该问问GPT4o ↩︎

  2. 想知道怎么像这样标注名词吗?去看看这篇博文 ↩︎