-
Notifications
You must be signed in to change notification settings - Fork 0
/
TMUX
241 lines (201 loc) · 7.03 KB
/
TMUX
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
### Using TMUX
#### Installing TMUX
On macOS simply :
```
brew install tmux
```
on Linux or WSL simply:
```
sudo apt-get install tmux
```
#### Aliasing TMUX (optional)
In order to speed up creating, attaching, listing, and killing `tmux` sessions one can set aliases in your `.bashrc` or `.zshrc`:
```
alias t='tmux'
alias ta='t a -t'
alias tls='t ls'
alias tn='t new -t'
alias tkill='t kill-session -t'
```
#### Setting up a `.tmux.conf` (and `.vimrc`) configuration file
`tmux` is highly configurable and customisable this can be done through the use of a `.tmux.conf` file in your `${HOME}` directory
```
#split vertically
unbind %
bind | split-window -h
#split horizontally
unbind '"'
bind - split-window -v
#status bar and window styling
set -g status-style fg=white,bg=colour235
set -g message-style fg=white,bold,bg=green
setw -g window-status-style fg=cyan,bg=colour235
setw -g window-status-current-style fg=white,bold,bg=red
set -g pane-border-style fg=colour240,bg=black
set -g pane-active-border-style fg=blue,bg=black
#mouse
set -g mouse on
set -g default-terminal "xterm-256color"
set-window-option -g xterm-keys on
```
in this `.tmux.conf` file you can reset key bindings and window stylings.
setting mouse control can be useful especially for scrolling, however copying and pasting as well as `vim` control can be strange.
for highlighting in macOS you can simply hold down `fn` whilst dragging with the mouse to highlight normally.
for getting `vim` to act "normally" you can edit your `.vimrc` file
```
" normal mouse behaviour especially when paired with tmux
set mouse=a
:nmap <ScrollWheelUp> <Up>
:nmap <ScrollWheelDown> <Down>
:imap <ScrollWheelUp> <Up>
:imap <ScrollWheelDown> <Down>
:vmap <ScrollWheelUp> <Up>
:vmap <ScrollWheelDown> <Down>
```
#### Using TMUX
now you are set to use tmux!
getting set up is fairly straightforward but using the above settings you can do:
(tmux key magic binding key command = `ctrl-b`
1. creating a new tmux session:
```
tn my-new-tmux-session
```
2. creating a new window pane
```
ctrl-b | or - (vertical vs horizontal split)
```
3. to move around either use the mouse or:
```
ctrl-b left,right,up,down arrow
```
4. to focus/unfocus in on a window
```
ctrl-b Z
```
5. to kill a pane
```
ctrl-b x _or_ exit
```
6. to detach your tmux session
```
ctrl-b d
```
7. to list your tmux sessions
```
tls
```
8. to reattach your tmux session
```
ta my-new-tmux-session
```
the world is now your oyster
## Example `.tmux.conf` file
This config file allow you to use `hjkl` to nagvigate the panels and more.
```
# Inspired from: https://github.com/nicknisi/dotfiles/tree/master/tmux
# set is an alias for set-option
# setw is an alias for set-window-option
################## COLORS ##################
# Colors: https://i.stack.imgur.com/e63et.png
tm_color_active=colour208
tm_color_inactive=colour241
tm_color_neutral=colour255
################## GENERAL OPTIONS ##################
# More options: https://github.com/tmux/tmux/blob/master/options-table.c
# Automatically renumber tmux windows
set-option -g renumber-windows on
set-option -g mouse on
set-option -g status-left-length 32
set-option -g status-right-length 150
# Update status bar every minute
set-option -g status-interval 60
# Enable RGB colour if running in xterm(1)
set-option -sa terminal-overrides ",xterm*:Tc"
# Number of lines of history to remember
set-option -g history-limit 100000
# Required otherwise vim cannot display 256 colors
# Normally it's `tmux-256color` but for some reason on my new laptop I lose the feature `history-substring-search` brought by Prezto with xfce4-terminal
set-option -g default-terminal "screen-256color"
# default is black
set-option -g status-bg default
set-option -g status-fg $tm_color_neutral
set-option -g status-right-attr bold
# Pane border
set-option -g pane-border-fg $tm_color_inactive
set-option -g pane-active-border-fg $tm_color_active
# Pane number display
set-option -g display-panes-active-colour $tm_color_active
set-option -g display-panes-colour $tm_color_inactive
# Make pane index start with 1
set-option -g base-index 1
# vim mode for keys (i for insert, esc, etc)
set-window-option -g mode-keys vi
# The window (GUI) title of the terminal will be based on the curent tmux window
set-option -g set-titles on
set-option -g set-titles-string "#T - #W"
# No delay for ESC key
set-option -sg escape-time 0
# Window titles
set-window-option -g window-status-attr none
set-window-option -g window-status-current-attr bold,underscore
set-window-option -g window-status-current-fg $tm_color_active
# #I: number; #W name
set-window-option -g window-status-format "#I #W"
set-window-option -g window-status-current-format "#I #W"
# Rather than constraining window size to the maximum size of any client
# connected to the *session*, constrain window size to the maximum size of any
# client connected to *that window*. Much more reasonable.
set-window-option -g aggressive-resize on
# Make window index start with 1
set-window-option -g pane-base-index 1
################## BINDINGS ##################
# All the bindings: https://github.com/tmux/tmux/blob/master/key-bindings.c
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
# set mouse on with prefix m
#bind m \
# setw -g mouse on
# display 'Mouse: ON'
# set mouse off with prefix M
# bind M \
# setw -g mouse off
# display 'Mouse: OFF'
# pane movement shortcuts
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# ctrl-b, hold ctrl and k+
# -r gives 500ms to press the key again
bind -r C-k resize-pane -U
bind -r C-j resize-pane -D
bind -r C-h resize-pane -L
bind -r C-l resize-pane -R
# Bind : to command-prompt like vim. This is the default in tmux already.
bind : command-prompt
################## LEFT STATUS BAR - TMUX SESSION ##################
# Diplay session name
set-option -g status-left " #[fg=colour200][#S] "
################## RIGHT STATUS BAR - EXTERNAL CONTENT ##################
tm_separator="#[fg=colour236]|"
tm_battery="#(~/git/dotfiles/scripts/getBatteryState.sh)"
tm_time='#[fg=colour190]%a %h-%d %H:%M:%S'
set-option -g status-right $tm_separator' '$tm_battery' '$tm_separator' '$tm_time' '
bind [ copy-mode
bind Escape copy-mode
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi C-v send -X rectangle-toggle
bind ] paste-buffer
bind-key M split-window -h "vim ~/.tmux.conf"
set-window-option -g automatic-rename off
set-option -g allow-rename off
################## WSL Cilp Board ###################
### Use this if you will be using a terminal on Windows ###
### This allos you to copy content by dragging mouse ###
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi Escape send-keys -X cancel
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"
```