-
Notifications
You must be signed in to change notification settings - Fork 0
/
.tmux.conf
178 lines (139 loc) Β· 5.47 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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# Basic settings {{{
# Set terminal
set -g default-terminal "screen-256color"
# Automatically renumber windows
set-option -g renumber-windows on
# Disable automatic window rename
set-window-option -g automatic-rename off
# Don't let Esc interfere with vim
set -s escape-time 0
# Visual bell
set-window-option -g monitor-activity on
set -g visual-activity off
# Set terminal emulator window titles
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@"
set -g set-titles on
set -g set-titles-string "#T"
# Increase scrollback buffer size from the default 2000
set-option -g history-limit 5000
# Border colors
set-option -g pane-active-border-style fg=colour10
set-option -g pane-border-style fg=colour242
# }}}
# Status bar configuration {{{
set -g status-style fg=colour147,none,bg=colour234
set -g status-left-length 30
set -g status-left '#S ξ± '
set -g status-left-style fg=colour148,none,bg=colour234
set -g status-right ' #[fg=colour250]ξ³ #H #[fg=colour148]%H:%M'
set-window-option -g window-status-bell-style fg=colour154,bold,bg=colour243
set-window-option -g window-status-activity-style fg=colour81,none,bg=colour243
set-window-option -g window-status-current-style fg=colour16,none,bg=colour75
set-window-option -g window-status-current-format \
'#[bold] #I#{?window_zoomed_flag,+,} #[nobold]#W'
set-window-option -g window-status-style fg=colour15,none,bg=colour238
set-window-option -g window-status-format \
'#[bold] #I#{?window_zoomed_flag,+,} #[bg=colour234]#[nobold]#W'
set-window-option -g message-style fg=black,none,bg=colour11
set-window-option -g mode-style fg=black,none,bg=colour11
# }}}
# Key bindings {{{
# Remap prefix to Ctrl+a
set -g prefix C-a
unbind-key C-b
bind-key a send-prefix
# Unbind Ctrl+Left and Ctrl+Right
set-window-option -g xterm-keys on
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
unbind-key -n C-Left
unbind-key -n C-Right
# Use vi style mode keys
set-window-option -g mode-keys vi
# Start and end selections using <Prefix>v and <Prefix>y, respectively
# https://sanctum.geek.nz/arabesque/vi-mode-in-tmux/
bind-key -T copy-mode-vi y send -X copy-selection
bind-key -T copy-mode-vi v send -X begin-selection
# Enter copy mode with <Prefix>Escape, <Prefix>/, or Ctrl+Home
bind-key Escape copy-mode
bind-key / copy-mode
bind-key -n C-Home copy-mode
# Exit copy mode with Escape
bind-key -n -T copy-mode-vi Escape send -X cancel
# Swap copy mode search direction keybindings
bind -T copy-mode-vi / command-prompt -p "Search Up:" \
"send -X search-backward \"%%\""
bind -T copy-mode-vi ? command-prompt -p "Search Down:" \
"send -X search-forward \"%%\""
# Copy text to the system clipboard using y in copy mode
if-shell "which xclip >/dev/null 2>&1" \
"bind -T copy-mode-vi y \
send -X copy-pipe-and-cancel \"xclip -sel clip -i\" \\; \
display-message \"Copied to system clipboard\""
# Don't attempt to copy to the terminal clipboard
set-option -g set-clipboard off
# Move to previous/next session with Ctrl+F7 and Ctrl+F8
bind-key -n C-F7 switch-client -p
bind-key -n C-F8 switch-client -n
# Choose a session with Ctrl+e
bind-key e choose-session
# Move to previous/next window with F7 and F8
bind-key -n F7 previous-window
bind-key -n F8 next-window
# Swap windows with <
bind-key < command-prompt "swap-window -t '%%'"
# Swap panes using , and .
bind-key , swap-pane -U
bind-key . swap-pane -D
# With >, swap the current marked panes, and unmark the marked pane (tmux 2.1+)
bind-key > swap-pane -d \; select-pane -M
# Alt+<arrow key> pane resizing
bind -n M-Left resize-pane -L 5
bind -n M-Right resize-pane -R 5
bind -n M-Up resize-pane -U 5
bind -n M-Down resize-pane -D 5
# Reload the tmux config file with <Prefix>r
unbind r
bind r source-file ~/.tmux.conf
# Move to the last window with <Prefix>Ctrl+a
unbind C-a
bind C-a select-window -l
# Vim style new splits
unbind s
bind s split-window -v
bind v split-window -h
# Vim style full size new splits (tmux 2.3+)
bind H split-window -h -f -b
bind J split-window -v -f
bind K split-window -v -f -b
bind L split-window -h -f
# Create new windows with empty names
bind-key c new-window -n ''
# Session renaming
bind-key '$' command-prompt 'rename-session "%%"'
# Window renaming
bind-key A command-prompt 'rename-window "%%"'
# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator
# This modifies the Ctrl+L binding recommended by vim-tmux-navigator to send
# the clear screen command when the current pane spans the full window width.
# Otherwise, <Prefix>Ctrl+L can be used to clear the screen.
# Full-width pane idea from:
# https://github.com/christoomey/vim-tmux-navigator/pull/126
__tmux_is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
__tmux_is_full_width_pane="[ '#{pane_width}' = '#{window_width}' ]"
bind-key -n C-h if-shell "$__tmux_is_vim" "send-keys C-h" "select-pane -L"
bind-key -n C-j if-shell "$__tmux_is_vim" "send-keys C-j" "select-pane -D"
bind-key -n C-k if-shell "$__tmux_is_vim" "send-keys C-k" "select-pane -U"
bind-key -n C-l if-shell "$__tmux_is_vim || $__tmux_is_full_width_pane" \
"send-keys C-l" "select-pane -R"
bind-key -n C-\\ if-shell "$__tmux_is_vim" "send-keys C-\\" "select-pane -l"
# Bind <Prefix>Ctrl+L to clear screen
bind C-l send-keys 'C-l'
# Backup pane navigation keybindings for splits without tmux-aware vim
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
# }}}
# vim: set fdls=0 fdm=marker: