终端下高效工作利器Tmux

垂暮老人screen的接任者

Posted by fishcried on September 15, 2014

1. Tmux vs Screen

Tmux是Screen的强化,使用起来更加的方便.Tmux最突出的地方在于分屏的支持.screen比tmux更为稳定.看一张效果图:

tmux分屏

  • 网上关于tmux与screen的比较文章较多,可以自行查看.推荐”tmux - Productive Mouse-Free Development”一书.
  • 关于screen可以参看我之前的总结
  • 其实两个工具最好都应该掌握,screen很多时候还是需要的.两者常常需要联合使用.

2. Tmux使用思维导图

tmux

3. Tmux的一份配置

github托管

# - SettingPrefix
# - SettingDelay
# - SettingAlerts
# - SettingIndex
# - SettingMouse
# - SettingProfile
# - SettingAlerts
# - SettingHelp
# - SettingPanes
# - SettingWindows
# - SettingLog
# - SettingColors
# - SettingStatusBar
# - SettingSessions
# - SettingEncode


##############################################################################
# SettingPrefix
# C-a比C-b更加方便,但是如果同时使用tmux与screen的话
# 两者会存在冲突,所以前缀的修改依据个人情况
##############################################################################

# set -g prefix C-a
# unbind C-b
bind b send-prefix

##############################################################################
# SettingDelay
##############################################################################
set -s escape-time 1

##############################################################################
# 复制模式时的绑定模式
##############################################################################
set-window-option -g mode-keys vi

set -g default-terminal "screen-256color"

set -g message-attr bright

##############################################################################
# SettingAlerts
##############################################################################
setw -g monitor-activity on
set -g visual-activity on

##############################################################################
# SettingIndex
##############################################################################
set -g base-index 1
setw -g pane-base-index 1

##############################################################################
# SettingMouse
##############################################################################
setw -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

##############################################################################
# SettingProfile
##############################################################################
bind r source-file ~/.tmux.conf; display "Reloaded!"


##############################################################################
# SettingHelp
##############################################################################
bind / command-prompt "split-window 'exec man %%'"

##############################################################################
# SettingPanes
##############################################################################
# 快速分割
unbind "%"
unbind "\""
bind | split-window -h
bind - split-window -v

# 快速选择 
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 大小调整
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
unbind Up
bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp

##############################################################################
# SettingWindows
##############################################################################
bind "\"" choose-window

bind -r C-h select-window -t :-
bind -r C-l select-window -t :+


##############################################################################
# SettingLog
##############################################################################
bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"


##############################################################################
# SettingColors
##############################################################################
set -g status-fg white
set -g status-bg black

setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim

setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright

set -g pane-border-fg green
set -g pane-border-bg black
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow

set -g message-fg white
set -g message-bg black
set -g message-attr bright

##############################################################################
# SettingStatusBar
##############################################################################
set -g status-left-length 40
set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
set -g status-right "#[fg=cyan]%d %b %R"
set -g status-utf8 on
set -g status-interval 60
set -g status-justify centre
setw -g monitor-activity on
set -g visual-activity on

bind C-c run "tmux save-buffer - | xclip -i sel clipboard"
bind C-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"

##############################################################################
# SettingSessions
##############################################################################
bind -r ( switch-client -p
bind -r ) switch-client -n

##############################################################################
# SettingEncode
##############################################################################
set -g utf8
set-window-option -g utf8 on

4. Script tmux

感觉tmux脚本比screen更为方便.下面是我的一个脚本,配置工作环境.最新代码

#!/bin/bash
#
# The MIT License (MIT)
# Copyright (c) 2014 fishcried(tianqing.w@gmail.com)
#

SNAME=$USER

tmux has-session -t $SNAME

if [ $? != 0 ]
then
	# (1)WIN
	tmux new-session -s $SNAME -n WIN -d
	tmux send-keys -t $SNAME:1 'win7' C-m

	# (2/1)BLOG/Jekyll server
	tmux new-window -t $SNAME -n BLOG
	tmux send-keys -t $SNAME:2  'jump blog && cd ..  &&  jekyll server -D --watch' C-m
	# (2/2)BLOG/Jekyll Editor
	tmux split-window -v -t $SNAME:2
	tmux send-keys  -t $SNAME:2.2 'jump blog' C-m
	
	# Start out on the BlOG window when we attach
	tmux select-window -t $SNAME

fi

tmux attach -t $SNAME

5. 提高专注力的一个小方法

保持专注力真的是件难事.无意中发现了该方法,感觉帮助很大.所以拿来分享:

  • 当需要做一件事情的时候,新创建一个窗口,并命名.然后在该窗口内进行操作.
  • 启动一个计时窗口,然后执行time read命令计时,当事情完成时,输出Enter,查看时间.

强制开启一个单独窗口做事情是方式精力分散.使用计时是一种暗示.不要使用手机什么的.time最简单了.

变更记录

Why Who When
create fishcired 2014-09-02
完善文档 fishcired 2014-09-15
添加专注力技巧小结 fishcired 2014-10-10