tmux Memo

tmux 是我在工作中每天都要用到的工具, tmux 和 zsh 搭配使用简直是终端神器.

tmux 的安装非常简单, Ubuntu 系统直接执行:

1
apt install tmux

当然也可以手动编译安装, 都是常规做法, 按下不表. 这里, 主要记录一下我的配置.
基本的配置还是非常初级的, 但是, 这也是我目前最常用的配置要求.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 默认的 prefix 是 C-b, 按键不方便, 改成 C-a
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# 修改默认的 split window 按键
# split panes using \ and -
bind \ split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# reload config file
bind r source-file ~/.tmux.conf
# 启用鼠标(鼠标在选择 pane 的时候用起来非常方便)
set -g mouse
# 禁止自动更新 window 的名字, 这样我就可以对每个 window 手动设置一个有意义的 name
set-option -g allow-rename off

因为我是用 emacs 的, 上面的这个配置基本上可以覆盖我日常的使用了, 如果喜欢用 vim 的同学, 还可以把编辑模式改成 vim 的按键绑定.
目前的配置只是完成了基本的功能, 在 status bar 上除了显示 window name, 还可以通过配置来显示更多的信息, 例如, 显示当前机器的 hostname, 这样, 我就可以马上知道我当前工作的机器是本地机器还是开发机. 另外还可以显示 git 仓库的状态等等. 之前这些功能的实现都是手动编辑的配置文件, 后来发现了[tmux-powerline] 这个神器. 比自己配置的功能更强大, 而且是 plugin 的模式, 可以很方便的配置自己需要的功能.
配置方法:

  1. 获取代码
    1
    git clone https://github.com/erikw/tmux-powerline.git ~/

代码可以放置在任意位置, 这里为了行文表述方便, 放在了 home 目录下.

  1. 修改 tmux 配置文件, 启用 tmux-powerline
    1
    2
    3
    4
    5
    6
    7
    8
    set-option -g status on
    set-option -g status-interval 2
    set-option -g status-justify "centre"
    set-option -g status-left-length 60
    set-option -g status-right-length 90
    set-option -g status-left "#(~/local/tmux-powerline/powerline.sh left)"
    set-option -g status-right "#(~/local/tmux-powerline/powerline.sh right)"
    set-window-option -g window-status-current-format "#[fg=colour235, bg=colour27]⮀#[fg=colour255, bg=colour27] #I ⮁ #W #[fg=colour27, bg=colour235]⮀"

至此, 完全退出 tmux, 然后重新进入, 就可以看到炫酷的 powerline 了.
然而, powerline 的默认配置并不能完全符合我们的需求, 例如, 我不需要显示内网和公网 IP 地址等. 那么, 接下来就需要配置 powerline 了.
所有可用的 plugin 都在 segments 目录下, 所以, 为了配置方便, 首先要编译 segments 目录.

  1. 编译之前需要先安装依赖:

    1
    2
    apt install libmpdclient-dev
    make
  2. 编辑 themes/defaults.sh, 注释掉不需要的功能, 打开需要的功能.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    if [ -z $TMUX_POWERLINE_LEFT_STATUS_SEGMENTS ]; then
    TMUX_POWERLINE_LEFT_STATUS_SEGMENTS=(
    "tmux_session_info 148 234" \
    "hostname 33 0" \
    #"ifstat 30 255" \
    #"ifstat_sys 30 255" \
    # "lan_ip 24 255 ${TMUX_POWERLINE_SEPARATOR_RIGHT_THIN}" \
    # "wan_ip 24 255" \
    "vcs_branch 29 192" \
    "vcs_compare 60 255" \
    "vcs_staged 64 255" \
    "vcs_modified 9 255" \
    "vcs_others 245 0" \
    )
    fi
    if [ -z $TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS ]; then
    TMUX_POWERLINE_RIGHT_STATUS_SEGMENTS=(
    #"earthquake 3 0" \
    "pwd 89 211" \
    # "mailcount 9 255" \
    # "now_playing 234 37" \
    # "cpu 240 136" \
    "load 237 167" \
    #"tmux_mem_cpu_load 234 136" \
    # "battery 137 127" \
    "weather 37 255" \
    #"rainbarf 0 ${TMUX_POWERLINE_DEFAULT_FOREGROUND_COLOR}" \
    #"xkb_layout 125 117" \
    # "date_day 235 136" \
    # "date 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
    "time 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
    #"utc_time 235 136 ${TMUX_POWERLINE_SEPARATOR_LEFT_THIN}" \
    )
    fi
  3. 生成并编辑 powerline 的 config file

    1
    ./generate_rc.sh

这一步之后会在 home 目录下生成一个 .tmux-powerlinerc.defaults 文件, 重命名或者拷贝这个文件, 并且配置相应的信息

1
cp .tmux-powerlinerc.defaults .tmux-powerlinerc

默认配置基本够用, 如果启用了 weather 插件, 需要配置位置信息, 例如, 上海的话直接配置最后一行:

1
export TMUX_POWERLINE_SEG_WEATHER_LOCATION="2151849"

tmux-powerline 的配置过程大抵如此~~最后付一张效果图.