2021 年我如何使用 tmux

2025-06-10

2021 年我如何使用 tmux

2021 年,我彻底改变了 tmux 会话间的导航方式。现在我可以轻松地创建、终止、切换,并且总体上能够将工作按逻辑分组。

🔗 查看https://waylonwalker.com/tmux-nav-2021/上的帖子以加快或减慢录音速度。

Chris Toomey 的Tmux 课程

我在 2020 年 12 月参加了 Chris 的tmux 课程,感觉非常棒。即使我已经是 tmux 的资深用户,也学到了很多东西。在参加课程之前,我能够熟练地在每个 tmux 会话中进行导航,但很少启动多个会话。几个月后,我吸收了 Chris 的很多知识,并将其融入到自己的实践中。

我现在将项目保留在各自的会话中,只需按几下键就能在它们之间流畅切换。对于高流量的项目,我会将它们绑定到单个键,以便即时切换。这项改变彻底改变了我以前混乱的窗口,也改变了我以前在两个不同的窗口中查找工作、重复项目工作的噩梦。

📝注意:我的一些配置直接来自课程,其中一些已经根据我的喜好进行了扩展。

让我们快速看一下我每天如何使用 tmux。

👆 我如何使用 tmux 的概述

tmux ls

在本文中,我录制了多段视频,展示了我如何使用按键绑定来管理会话。我经常会运行一个tmux ls命令来突出显示正在运行的会话,以便引导读者。

我的附加/会话切换脚本

我的 tmux 导航的核心是一个高度定制的 Chris tat 脚本版本,我将其重命名为ta。许多人会将其添加到他们的 bashrc 中alias ta=tmux attach。只需调用 ta 即可执行如下所示的操作。如果您处于 tmux 会话中,它不会执行任何操作;如果您不在 tmux 会话中,它会将您连接到第一个会话。

从 GitHub获取完整脚本。

👆 默认附加到会话

~/.bashrc在我的或~/.zshrc我添加的命令ta,可以始终保持 tmux 会话状态。每当我打开终端时,都会自动进入 tmux 会话,但如果我在 tmux 中打开了分割窗口,它会足够智能地知道不要嵌套 tmux 会话。

ta
Enter fullscreen mode Exit fullscreen mode

另一篇文章可以深入探讨我的ta命令。这篇文章更侧重于方法论、工作流程和按键绑定。它可以在我的devtainer 仓库中找到。

但还有更多

变得模糊

给它一个目录,下拉fzy菜单将让你选择一个子目录来启动你的会话,并以该目录命名会话。

ta ~/git
Enter fullscreen mode Exit fullscreen mode

🔥 奖励,使用 direnv 自动设置,回显您的 git 状态,激活您的环境或您需要的任何其他内容。

👆 给它一个目录,它会要求输入哪个项目并在该目录中启动一个新的命名会话。

请注意,目前从外部启动不会像从 tmux 内部启动那样以拆分布局启动。我仍在尝试这个问题,但通常情况下,我希望我的终端会话在第一次启动时是简单的。我通常在第一个默认会话之后开始工作。

🤔 我仍然同时使用 fzy 和 fzf。同时使用两个可能不太合理,但我目前正在尝试 fzy。

前缀+w

tmux 选择树

默认情况下,tmux 会tmux choose-tree绑定一个命令prefix+w,该命令会全屏打开。屏幕上方会显示所有打开的窗口。选中后,您可以按 l 键显示每个窗口的分割,或按 h 键折叠窗口。您可以按 / 键搜索会话名称。

# ~/.tmux.conf

# expanded to show all splits
bind s choose-tree
# simpler window to show only sessions
bind S choose-session
Enter fullscreen mode Exit fullscreen mode

choose-tree/choose-session 中的键绑定

choose-tree下面列出了我使用的 tmux和tmux 的默认按键绑定choose-session。J/K 键非常直观,但我刚开始学习 h、l、/ 键。当我使用其中一个键时,/(搜索)键可以非常有效地更快地找到会话/窗口。

行动 钥匙
折叠 h
展开
向上
向下 j
搜索 /

前缀+cw 前缀+cg

打开一个项目

我已进行设置,以便轻松打开我的非工作项目(在我的 ~/git 目录中)和我的工作项目(在我的 ~/work 目录中)。我绑定了prefix+c-g和 ,prefix+c-w以便在它们各自的目录中打开一个新会话。我喜欢将常用的前缀命令与 Control 键映射,这样我的小指就能一直按在 Control 键上。

# ~/.tmux.conf

bind C-w new-window -n "work-session-picker" "ta ~/work"
bind C-g new-window -n "git-session-picker" "ta ~/git"
Enter fullscreen mode Exit fullscreen mode

前缀+cj

跳转到会话

现在我已经掌握了ta良好的创建或连接设置,很少需要切换正在运行的会话列表,但prefix+c-j每次切换时我都会用到。手指放在 Control 上,然后按下<space>+j。此按键绑定使用 fzf 模糊匹配现有会话并进行连接。

bind C-j new-window -n "session-switcher" "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t"
Enter fullscreen mode Exit fullscreen mode

明尼苏达州议员

下一个/上一个

下一个和上一个会话。当会话少于 3 个时,此功能非常方便,可以按住shift+alt或 循环n切换会话p

杀死

清理时间

一整天运行着一堆冗长复杂的会话列表很容易。通常情况下,相比在每个工作项目中都运行 vscode,这不会占用太多系统资源,但管理和浏览会话列表确实更加困难。我使用了一个方便的 shell 别名,它在我的 zshrc 中已经存在很长时间了。

alias tkill="for s in \$(tmux list-sessions | awk '{print \$1}' | rg ':' -r '' | fzy); do tmux kill-session -t \$s; done;"
Enter fullscreen mode Exit fullscreen mode

我没有给这个设置一个好用的热键,但它适合我的手指。我经常会弹开下方的分割键 ( M-s),然后运行tkill,最后关闭 ( M-x)。

上次会议

后退

虽然M-nM-p在少量专注的训练中效果很好,但我经常会同时打开太多训练,而且记住先进行两次训练,M-N然后进行三次训练来M-P来回回切换效率很低。通常情况下,我希望能够快速切换两个训练,无论顺序如何。

bind -n M-B switch-client -l
bind -n M-b switch-client -l
Enter fullscreen mode Exit fullscreen mode

一旦我连续进行两个会话,我就可以以惊人的速度和精度在它们之间切换。

更精准

一次击键

最后一层的精准度是为了我最近的项目。我需要一次按键就能找到这些功能。这些功能绑定在主键上方一组随时可用的快捷键上。

bind C-t new-session -A -s todo "cd ~/work/todo && nvim -O backlog.md doing.md done.md"
bind -n M-i new-session -A -s ww3 "cd ~/git/ww3/ && nvim"
bind -n M-o new-session -A -s images_waylonwalker_com "cd ~/git/images.waylonwalker.com/ && nvim"
Enter fullscreen mode Exit fullscreen mode

这几个目录总是在我的指尖,鼓励我做更好的笔记

是的,顺便说一下,我确实从Harpoon-man那里偷了这最后一个。

中心辐射

米姆

我一直在深入研究这种中心辐射式工作流程,在这个工作流程中,我专注于一个项目M-I,做一些笔记,然后M-b回到原来的位置。

中心辐射型

我当前工作流程的模型

示例工作流程

  1. 使用 ta 打开 tmux 会话
  2. prefix+c-g使用模糊匹配器开始项目工作
  3. M-t转到我的待办事项列表
  4. M-b回到我的项目
  5. M-i到我的博客查找笔记/做笔记
  6. M-b回到我的项目
  7. prefix+c-g使用模糊匹配器开始另一个项目的工作
  8. M-t转到我的待办事项列表
  9. M-b回到我的项目
  10. prefix+c-j模糊地回到第一个项目
  11. M-b回到第二个项目

请让我知道您的想法。@waylonwalker,我花了更长的时间来整理所有的动画 gif,但我认为它有助于直观地展示我每天如何使用 tmux。

如果你喜欢的话请分享

如果你喜欢,请在推特上分享并标记我。我通常不这么做,但这篇文章比我平常的帖子花了更多时间整理。


查看这些相关文章

https://waylonwalker.com/symlink-gallery/

https://waylonwalker.com/neovim-live-substitution/

https://waylonwalker.com/find-replace/

鏂囩珷鏉ユ簮锛�https://dev.to/waylonwalker/how-i-navigate-tmux-in-2021-2ina
PREV
10 个 VSCode 快捷键,让你的编码速度更快✌🏻
NEXT
Gitui 是一个超快的终端 git 界面