Skip to the content.

极简 Tmux 配置

其实我很长时间都是不使用 tmux 的,因为很多终端模拟器中已经包含了 Tab 和 Windows 的功能,但是使用了 tmux 之后,发现 tmux 非常灵活,尤其是在远程的 server 中使用。

先用起来再说

没有必要阅读 tmux 之道 这种很厚的书,会被直接劝退的。 其实很多工具,尤其是类似 tmux vim 这种定制化很强的工具,我都是建议先用着再说,遇到问题再 stackoverflow,最后综合的学习一下, 学习曲线会平缓很多。

Oh my tmux 我尝试过几分钟,但是个人默认配置不够简洁,高级功能暂时用不上,所以没有深入分析。

最简单的方法就是立刻使用起来,配置可以参考我个人的 tmux.conf 配置 这个脚本超级简单,而且每一个行都是有注释的。

默认常用操作

默认不怎么常用操作

copy mode

默认可以编辑的状态 tmux 称为 normal mode,使用 prefix y 进入到 copy mode,进入之后,可以使用 vim 的各种移动方式

Although tmux copy mode doesn’t translate to 100% vim navigation keys - overall they are good enough to feel natural. Some navigation keys that you can use:

https://dev.to/iggredible/the-easy-way-to-copy-text-in-tmux-319g

插件管理

安装:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

session 管理

通过 tmuxp 创建一个 session 并且自动执行初始化命令:

例如,如下命令可以自动创建两个 window 并且分别打开对应的仓库

tmuxp load -d ./tmux-session.yaml

cat tmux-session.yaml

session_name: note
windows:
  - window_name: org-mode
    layout: tiled
    shell_command_before:
      - cd ~/core/org-mode
      - nvim
  - window_name: .dotfiles
    layout: tiled
    shell_command_before:
      - cd ~/core/.dotfiles
      - nvim

配合 bash 使用

创建一个 session 并且让 fio 在启动运行:

tmux new-session -d -s my_session || true
tmux new-window -d "fio test.fio"

最近遇到的 tmux 问题

一些试错

  1. 自动连接远程的 server 的 tmux,这样就可以一次有一次使用 ssh 创建 remote terminal 了
    ssh -t user@11.22.33.44 "tmux attach || /usr/bin/tmux"
    

    当然,可以将这个行为定义为你的 terminal emulator (例如 ketty 或者 wezterm)的一个快捷键。

  2. tmux list-keys 用于查看已经绑定的快捷键

  3. tmux 的悬浮窗口 配置参考: https://gist.github.com/LintaoAmons/22f6184b26bd5b93d8fe9f9276f50f75
    bind-key -n -N 'Toggle popup window' C-h if-shell -F '#{==:#{session_name},popup}' {
     detach-client
    } {
     display-popup -d "#{pane_current_path}" -xC -yC -w 60% -h 75% -E "tmux attach-session -t popup || tmux new-session -s popup"
    }
    

    向比 zellij 好处是可以继续多开,但是问题是这会让 switch to next session 命令完全混乱了。 其实我们希望 popup 的是一个 pane 而不是 session 的。所以最后还是靠 nvim 的悬浮窗来解决问题吧。

  4. 嵌套 tmux 是一个死亡深渊,没有必要尝试。
    • 如果在本地的一个 tmux 中嵌套,tmux 会直接警告你。
    • 但是你可以在本地 tmux,然后其中一个 pane 中链接远程,然后在其中开启 tmux,这给我带来了好几个问题。
    • 以前是 prefix c 可以创建一个窗口,为了给内层 tmux 创建一个窗口,现在需要按 prefix prefix c,当然也许修改 prefix 也可以。
    • 到底是进入的外层还是内层的 tmux 的 vi mode 也是经常搞混的事情。

扩展

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。