Last active
January 28, 2021 14:29
-
-
Save walbon/5b9d135b4680a31276506c7beec49053 to your computer and use it in GitHub Desktop.
TMUX configuration
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# cat << EOF > /dev/null | |
# https://github.com/gpakosz/.tmux | |
# (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license, | |
# without any warranty. | |
# Copyright 2012— Gregory Pakosz (@gpakosz). | |
# /!\ do not edit this file | |
# instead, override settings in ~/.tmux.conf.local, see README.md | |
# -- general ------------------------------------------------------------------- | |
set -g default-terminal "screen-256color" # colors! | |
setw -g xterm-keys on | |
set -s escape-time 10 # faster command sequences | |
set -sg repeat-time 600 # increase repeat timeout | |
set -s focus-events on | |
set -g prefix2 C-a # GNU-Screen compatible prefix | |
bind C-a send-prefix -2 | |
set -q -g status-utf8 on # expect UTF-8 (tmux < 2.2) | |
setw -q -g utf8 on | |
set -g history-limit 5000 # boost history | |
set -g mouse on # Mouse selection on | |
# edit configuration | |
bind e new-window -n "~/.tmux.conf.local" "sh -c '\${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display \"~/.tmux.conf sourced\"'" | |
# reload configuration | |
bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced' | |
set-option -g default-shell "/bin/bash" | |
# -- display ------------------------------------------------------------------- | |
set -g base-index 1 # start windows numbering at 1 | |
setw -g pane-base-index 1 # make pane numbering consistent with windows | |
setw -g automatic-rename on # rename window to reflect current program | |
set -g renumber-windows on # renumber windows when a window is closed | |
set -g set-titles on # set terminal title | |
set -g display-panes-time 800 # slightly longer pane indicators display time | |
set -g display-time 1000 # slightly longer status messages display time | |
set -g status-interval 10 # redraw status line every 10 seconds | |
# clear both screen and history | |
bind -n C-l send-keys C-l \; run 'sleep 0.1' \; clear-history | |
# activity | |
set -g monitor-activity on | |
set -g visual-activity off | |
# -- navigation ---------------------------------------------------------------- | |
#using C-a as prefix | |
unbind C-b | |
set-option -g prefix C-a | |
bind C-a send-prefix | |
# create session | |
bind C-c new-session | |
# find session | |
bind C-f command-prompt -p find-session 'switch-client -t %%' | |
# split current window horizontally | |
bind - split-window -v | |
# split current window vertically | |
bind _ split-window -h | |
# split and join other pane | |
bind < split-window -h \; choose-window 'kill-pane ; join-pane -hs %%' | |
bind = split-window -v \; choose-window 'kill-pane ; join-pane -vs %%' | |
# pane navigation | |
bind -r h select-pane -L # move left | |
bind -r j select-pane -D # move down | |
bind -r k select-pane -U # move up | |
bind -r l select-pane -R # move right | |
#bind -r C-h previous-window # select previous window | |
unbind n | |
unbind p | |
#bind n swap-pane -D # swap current pane with the next one | |
bind n next-window | |
#bind p swap-pane -U # swap current pane with the previous one | |
bind p previous-window | |
# Shift arrow to switch windows | |
bind -n S-Left previous-window | |
bind -n S-Right next-window | |
# Choosing window ALT+Number like a browser | |
bind -n M-0 select-window -t 0 | |
bind -n M-1 select-window -t 1 | |
bind -n M-2 select-window -t 2 | |
bind -n M-3 select-window -t 3 | |
bind -n M-4 select-window -t 4 | |
bind -n M-5 select-window -t 5 | |
bind -n M-6 select-window -t 6 | |
bind -n M-7 select-window -t 7 | |
bind -n M-8 select-window -t 8 | |
bind -n M-9 select-window -t 9 | |
# maximize current pane | |
bind + run 'cut -c3- ~/.tmux.conf | sh -s _maximize_pane "#{session_name}" #D' | |
# pane resizing | |
bind -r H resize-pane -L 2 | |
bind -r J resize-pane -D 2 | |
bind -r K resize-pane -U 2 | |
bind -r L resize-pane -R 3 | |
# window navigation | |
#unbind n | |
#unbind p | |
#bind -r C-h previous-window # select previous window | |
#bind -r C-l next-window # select next window | |
bind Tab last-window # move to last active window | |
# toggle mouse | |
bind m run "cut -c3- ~/.tmux.conf | sh -s _toggle_mouse" | |
# -- urlview ------------------------------------------------------------------- | |
bind U run "cut -c3- ~/.tmux.conf | sh -s _urlview #{pane_id}" | |
# -- facebook pathpicker ------------------------------------------------------- | |
bind F run "cut -c3- ~/.tmux.conf | sh -s _fpp #{pane_id}" | |
# -- list choice (tmux < 2.4) -------------------------------------------------- | |
# vi-choice is gone in tmux >= 2.4 | |
run -b 'tmux bind -t vi-choice h tree-collapse 2> /dev/null || true' | |
run -b 'tmux bind -t vi-choice l tree-expand 2> /dev/null || true' | |
run -b 'tmux bind -t vi-choice K start-of-list 2> /dev/null || true' | |
run -b 'tmux bind -t vi-choice J end-of-list 2> /dev/null || true' | |
run -b 'tmux bind -t vi-choice H tree-collapse-all 2> /dev/null || true' | |
run -b 'tmux bind -t vi-choice L tree-expand-all 2> /dev/null || true' | |
run -b 'tmux bind -t vi-choice Escape cancel 2> /dev/null || true' | |
# -- edit mode (tmux < 2.4) ---------------------------------------------------- | |
# vi-edit is gone in tmux >= 2.4 | |
run -b 'tmux bind -ct vi-edit H start-of-line 2> /dev/null || true' | |
run -b 'tmux bind -ct vi-edit L end-of-line 2> /dev/null || true' | |
run -b 'tmux bind -ct vi-edit q cancel 2> /dev/null || true' | |
run -b 'tmux bind -ct vi-edit Escape cancel 2> /dev/null || true' | |
# -- copy mode ----------------------------------------------------------------- | |
bind Enter copy-mode # enter copy mode | |
run -b 'tmux bind -t vi-copy v begin-selection 2> /dev/null || true' | |
run -b 'tmux bind -T copy-mode-vi v send -X begin-selection 2> /dev/null || true' | |
run -b 'tmux bind -t vi-copy C-v rectangle-toggle 2> /dev/null || true' | |
run -b 'tmux bind -T copy-mode-vi C-v send -X rectangle-toggle 2> /dev/null || true' | |
run -b 'tmux bind -t vi-copy y copy-selection 2> /dev/null || true' | |
run -b 'tmux bind -T copy-mode-vi y send -X copy-selection-and-cancel 2> /dev/null || true' | |
run -b 'tmux bind -t vi-copy Escape cancel 2> /dev/null || true' | |
run -b 'tmux bind -T copy-mode-vi Escape send -X cancel 2> /dev/null || true' | |
run -b 'tmux bind -t vi-copy H start-of-line 2> /dev/null || true' | |
run -b 'tmux bind -T copy-mode-vi H send -X start-of-line 2> /dev/null || true' | |
run -b 'tmux bind -t vi-copy L end-of-line 2> /dev/null || true' | |
run -b 'tmux bind -T copy-mode-vi L send -X end-of-line 2> /dev/null || true' | |
# copy to macOS clipboard | |
if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | pbcopy"' | |
if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | reattach-to-user-namespace pbcopy"' | |
# copy to X11 clipboard | |
if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xsel -i -b"' | |
if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1"' | |
# copy to Windows clipboard | |
if -b 'command -v clip.exe > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | clip.exe"' | |
if -b '[ -c /dev/clipboard ]' 'bind y run -b "tmux save-buffer - > /dev/clipboard"' | |
# -- buffers ------------------------------------------------------------------- | |
#bind b list-buffers # list paste buffers | |
#bind p paste-buffer # paste from the top paste buffer | |
#bind P choose-buffer # choose which buffer to paste from | |
# -- user defined overrides ---------------------------------------------------- | |
if '[ -f ~/.tmux.conf.local ]' 'source ~/.tmux.conf.local' | |
# -- 8< ------------------------------------------------------------------------ | |
run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' | |
run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-time 3000 \; display "This configuration will soon require tmux >= 2.4" \; set -u display-time || true' | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment