-
Notifications
You must be signed in to change notification settings - Fork 1
/
tmux.conf
146 lines (139 loc) · 5.87 KB
/
tmux.conf
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# tmux Configuration for Brian Clements
# ------------------
# Do First Settings
# ------------------
# Remap prefix
set -g prefix C-f
unbind C-b
# for jmux inside tmux
bind-key f send-prefix
# ------------------
# General Settings
# ------------------
set-option -g default-shell /usr/bin/zsh
set-option -g default-terminal color-256color
setw -g mode-keys vi
set-option -g history-limit 100000
set-option -sg escape-time 0
set-option -g base-index 1
setw -g pane-base-index 1
if-shell 'test -z ${FBTERM+x}' \
'set-environment -g FBTERM "0"' \
'set-environment -g FBTERM "1"'
set-option -g lock-command vlock
setw -g xterm-keys on # to make ctrl-arrow, etc. work
set -g terminal-overrides "xterm*:XT"
# Enable Mouse
set -g mouse on
set -s escape-time 50
# ------------------
# Key Bindings
# ------------------
# Source config
bind-key r source-file ~/.tmux.conf \; display "Configuration reloaded"
# Sessions
bind-key Space choose-tree
bind-key C-s new-session
bind-key q confirm kill-session
bind-key Q confirm kill-server
# Windows
bind-key n next-window
bind-key p previous-window
bind-key @ join-pane -t !
# Panes
bind-key b setw synchronize-panes
bind-key BSpace kill-pane
bind-key x swap-pane -U
# tmux-zoom
bind-key + \
new-window -d -n tmux-zoom 'clear && echo -n Zoomed. Press enter key to return. && read; tmux swap-pane -s tmux-zoom.0' \; \
swap-pane -s tmux-zoom.0 \; \
select-window -t tmux-zoom
# navigate vim style
unbind-key j
bind-key j select-pane -D
unbind-key k
bind-key k select-pane -U
unbind-key h
bind-key h select-pane -L
unbind-key l
bind-key l select-pane -R
# Nagivation compatibility within vim
# Smart pane switching with awareness of vim splits
bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-h) || tmux select-pane -L"
bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-j) || tmux select-pane -D"
bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-k) || tmux select-pane -U"
bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-l) || tmux select-pane -R"
bind -n C-\ run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys 'C-\\') || tmux select-pane -l"
bind C-l send-keys 'C-l'
# NERD tree style splits
bind-key i split-window
bind-key s split-window -h
# Vi mode keys
unbind [
bind [ copy-mode
unbind ]
bind-key -t vi-copy C-y page-up
bind-key -t vi-copy C-e page-down
bind-key -t vi-copy i cancel
# vi copy/paste
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-pipe "xclip -sel clip -i"
bind-key ] run-shell "xclip -sel clip -o | tmux load-buffer - ; tmux paste-buffer"
# ------------------
# View Settings
# ------------------
# Panes
# Auto pane titles
set-option -g set-titles on
# Use hostname (@#h) in set-titles-string with SSH.
# Alternate layout/colors for nested TMUX sessions over SSH
if-shell '"$IN_TMUX"' \
'set -g set-titles-string "[#S] #(whoami)@#H: #I.#W #T"' \
'set -g set-titles-string "[#S] #I.#W #T"'
setw -g automatic-rename on
# Windows
# Inactive window names
setw -g window-status-bg '#303030'
setw -g window-status-fg '#737373'
setw -g window-status-format ' #I #W '
# Active window names
setw -g window-status-current-attr bold
setw -g window-status-current-bg '#d0d0d0'
setw -g window-status-current-fg '#303030'
setw -g window-status-current-format ' #I #W #[bg=#303030,fg=#d0d0d0] '
# Window Alerts
setw -g window-status-bell-bg '#9e6300'
setw -g window-status-bell-fg '#000000'
setw -g window-status-bell-attr none
setw -g window-status-activity-attr none
setw -g window-status-activity-bg '#303030'
setw -g window-status-activity-fg '#9e6300'
# disabled because I don't know why
# setw -g window-status-content-attr bold
# setw -g window-status-content-bg '#303030'
# setw -g window-status-content-fg '#ff0000'
# Status bar
setw -g monitor-activity on
set -g visual-activity on
set -g status-utf8 on
set -g status-interval 15
set -g window-status-separator ''
# Colors/Format
# Entire statusbar
set-option -g status-bg '#303030'
set-option -g status-fg '#303030'
# Left half
set-option -g status-left-attr bold
set -g status-left-length 28
# Alternate layout/colors for nested TMUX sessions over SSH
if-shell '"$IN_TMUX"' \
'set -g status-left "#[bg=#afd700,fg=#006900] #S #[bg=#006900,fg=#afd700]#[fg=#d0d0d0] #(whoami) #[bg=#303030,fg=#006900] "' \
'set -g status-left "#[bg=#0087af,fg=#ffffff] #S #[bg=#005f87,fg=#0087af]#[fg=#d0d0d0] #(whoami) #[bg=#303030,fg=#005f87] "'
# Right half
set-option -g status-right-attr bold
set -g status-right-length 90
# Alternate layout/colors for nested TMUX sessions over SSH
if-shell '"$IN_TMUX"' \
'set -g status-right "#[bg=#303030,fg=#737373]⇑ #(uptime | cut -f 4-5 -d \" \" | cut -f 1 -d \",\") #[bg=#303030,fg=#737373]#[bg=#737373,fg=#000000] #h "' \
'set -g status-right "#[bg=#303030,fg=#737373]⇑ #(uptime | cut -f 4-5 -d \" \" | cut -f 1 -d \",\") #[bg=#303030,fg=#737373]#[bg=#737373,fg=#000000] #h #[bg=#737373,fg=#d0d0d0]#[bg=#d0d0d0,fg=#590000]⌚ %k:%M #[bg=#d0d0d0,fg=#737373]#[bg=#d0d0d0,fg=#590000] %a %e %b "'