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
另一篇文章可以深入探讨我的ta
命令。这篇文章更侧重于方法论、工作流程和按键绑定。它可以在我的devtainer 仓库中找到。
但还有更多
变得模糊
给它一个目录,下拉fzy
菜单将让你选择一个子目录来启动你的会话,并以该目录命名会话。
ta ~/git
🔥 奖励,使用 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
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"
前缀+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"
明尼苏达州议员
下一个/上一个
下一个和上一个会话。当会话少于 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;"
我没有给这个设置一个好用的热键,但它适合我的手指。我经常会弹开下方的分割键 ( M-s
),然后运行tkill
,最后关闭 ( M-x
)。
上次会议
后退
虽然M-n
和M-p
在少量专注的训练中效果很好,但我经常会同时打开太多训练,而且记住先进行两次训练,M-N
然后进行三次训练来M-P
来回回切换效率很低。通常情况下,我希望能够快速切换两个训练,无论顺序如何。
bind -n M-B switch-client -l
bind -n M-b switch-client -l
一旦我连续进行两个会话,我就可以以惊人的速度和精度在它们之间切换。
更精准
一次击键
最后一层的精准度是为了我最近的项目。我需要一次按键就能找到这些功能。这些功能绑定在主键上方一组随时可用的快捷键上。
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"
这几个目录总是在我的指尖,鼓励我做更好的笔记
是的,顺便说一下,我确实从Harpoon-man那里偷了这最后一个。
中心辐射
米姆
我一直在深入研究这种中心辐射式工作流程,在这个工作流程中,我专注于一个项目M-I
,做一些笔记,然后M-b
回到原来的位置。
我当前工作流程的模型
示例工作流程
- 使用 ta 打开 tmux 会话
prefix+c-g
使用模糊匹配器开始项目工作M-t
转到我的待办事项列表M-b
回到我的项目M-i
到我的博客查找笔记/做笔记M-b
回到我的项目prefix+c-g
使用模糊匹配器开始另一个项目的工作M-t
转到我的待办事项列表M-b
回到我的项目prefix+c-j
模糊地回到第一个项目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