199 lines
5.9 KiB
Bash
199 lines
5.9 KiB
Bash
######################
|
|
### SETTINGS ###
|
|
######################
|
|
# escape time
|
|
set -sg escape-time 0
|
|
|
|
# loud or quiet?
|
|
set -g visual-activity off
|
|
set -g visual-bell off
|
|
set -g visual-silence off
|
|
setw -g monitor-activity off
|
|
set -g bell-action none
|
|
|
|
# enable vi mode keys
|
|
setw -g mode-keys vi
|
|
|
|
# mouse control (clickable windows, panes, resizable panes)
|
|
setw -g mouse on
|
|
set -g mouse on
|
|
|
|
# clipboard control
|
|
set -g set-clipboard on
|
|
set -g history-limit 20000
|
|
set -g focus-events on
|
|
|
|
# screen colors
|
|
set -g default-terminal "tmux-256color"
|
|
|
|
# Start with index 1
|
|
set -g base-index 1
|
|
setw -g pane-base-index 1
|
|
|
|
# pane title
|
|
setw -g pane-border-status top
|
|
setw -g pane-border-format ' #{=/-20/…:pane_title} [#{=/-20/…:pane_current_command}] #(pgrep -P "#{pane_pid}" | tr "\n" " ")#{pane_current_path} #{?alternate_on,<Alt Mode> ,}'
|
|
#set -g pane-border-format "#P: #{pane_current_command}"
|
|
|
|
|
|
# Automatically set window title
|
|
set-window-option -g automatic-rename on
|
|
set-option -g set-titles on
|
|
|
|
######################
|
|
### KEYBINDS ###
|
|
######################
|
|
# Config that is very close to a i3 window manager's keybinding.
|
|
|
|
# Set new prefix
|
|
# Note : you can press super key by set M.
|
|
# (tested with tty only)
|
|
set -g prefix M-a
|
|
bind M-a send-prefix
|
|
|
|
# First remove *all* keybindings
|
|
unbind -a
|
|
|
|
# Basic bindings
|
|
bind ? list-keys
|
|
bind d detach-client
|
|
bind D choose-client
|
|
bind ø command-prompt
|
|
#bind \ show-messages
|
|
|
|
# Copy mode
|
|
bind v copy-mode
|
|
|
|
# clipboard control
|
|
bind p paste-buffer
|
|
bind -T copy-mode-vi v send-keys -X begin-selection
|
|
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
|
|
bind -T copy-mode-vi r send-keys -X rectangle-toggle
|
|
bind -T copy-mode-vi Escape send-keys -X cancel
|
|
|
|
# Rename window
|
|
bind , command-prompt "rename-window %%"
|
|
|
|
# Clock mode
|
|
bind t clock-mode
|
|
|
|
# Show pane numbers
|
|
bind i display-panes
|
|
|
|
# Config Reloads
|
|
bind r source-file ~/.tmux.conf \; refresh-client \; display-message "Config reloaded"
|
|
|
|
# resize controls
|
|
bind -r h resize-pane -L 2 \; display-message "Resize left"
|
|
bind -r l resize-pane -R 2 \; display-message "Resize right"
|
|
bind -r k resize-pane -U 2 \; display-message "Resize up"
|
|
bind -r j resize-pane -D 2 \; display-message "Resize down"
|
|
|
|
# zoom control
|
|
bind -n M-o resize-pane -Z
|
|
|
|
# split panes using | and -, make sure they open in the same path
|
|
bind | split-window -h -c "#{pane_current_path}"
|
|
bind - split-window -v -c "#{pane_current_path}"
|
|
bind § split-window -fh -c "#{pane_current_path}"
|
|
bind _ split-window -fv -c "#{pane_current_path}"
|
|
|
|
# Change layouts
|
|
bind o rotate-window
|
|
bind Space next-layout
|
|
bind M-- select-layout even-horizontal
|
|
bind M-| select-layout even-vertical
|
|
bind K swap-pane -d -t "{up-of}"
|
|
bind J swap-pane -d -t "{down-of}"
|
|
bind H swap-pane -d -t "{left-of}"
|
|
bind L swap-pane -d -t "{right-of}"
|
|
|
|
# Choose Window
|
|
bind w choose-window
|
|
|
|
# Change current pane to next window
|
|
bind 1 join-pane -t :1
|
|
bind 2 join-pane -t :2
|
|
bind 3 join-pane -t :3
|
|
bind 4 join-pane -t :4
|
|
bind 5 join-pane -t :5
|
|
bind 6 join-pane -t :6
|
|
bind 7 join-pane -t :7
|
|
bind 8 join-pane -t :8
|
|
bind 9 join-pane -t :9
|
|
bind 0 join-pane -t :10
|
|
|
|
# Switch windows alt+number
|
|
bind -n M-1 if-shell 'tmux select-window -t :1' '' 'new-window -t :1'
|
|
bind -n M-2 if-shell 'tmux select-window -t :2' '' 'new-window -t :2'
|
|
bind -n M-3 if-shell 'tmux select-window -t :3' '' 'new-window -t :3'
|
|
bind -n M-4 if-shell 'tmux select-window -t :4' '' 'new-window -t :4'
|
|
bind -n M-5 if-shell 'tmux select-window -t :5' '' 'new-window -t :5'
|
|
bind -n M-6 if-shell 'tmux select-window -t :6' '' 'new-window -t :6'
|
|
bind -n M-7 if-shell 'tmux select-window -t :7' '' 'new-window -t :7'
|
|
bind -n M-8 if-shell 'tmux select-window -t :8' '' 'new-window -t :8'
|
|
bind -n M-9 if-shell 'tmux select-window -t :9' '' 'new-window -t :9'
|
|
bind -n M-0 if-shell 'tmux select-window -t :10' '' 'new-window -t :10'
|
|
|
|
# Kill Selected Pane
|
|
bind Q kill-pane
|
|
|
|
# clear selected pane
|
|
bind-key b send-keys -R \; clear-history \; send-keys Enter
|
|
|
|
# present a menu of URLs to open from the visible pane. sweet.
|
|
bind u capture-pane \;\
|
|
save-buffer /tmp/tmux-buffer \;\
|
|
split-window -l 10 "urlview /tmp/tmux-buffer"
|
|
|
|
# Smart pane switching with awareness of Vim splits.
|
|
# See: https://github.com/christoomey/vim-tmux-navigator
|
|
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
|
|
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
|
|
bind-key -n M-h if-shell "$is_vim" "send-keys M-h" "select-pane -L"
|
|
bind-key -n M-j if-shell "$is_vim" "send-keys M-j" "select-pane -D"
|
|
bind-key -n M-k if-shell "$is_vim" "send-keys M-k" "select-pane -U"
|
|
bind-key -n M-l if-shell "$is_vim" "send-keys M-l" "select-pane -R"
|
|
#bind-key -n M-\ if-shell "$is_vim" "send-keys M-\\" "select-pane -l"
|
|
bind-key -T copy-mode-vi M-h select-pane -L
|
|
bind-key -T copy-mode-vi M-j select-pane -D
|
|
bind-key -T copy-mode-vi M-k select-pane -U
|
|
bind-key -T copy-mode-vi M-l select-pane -R
|
|
#bind-key -T copy-mode-vi M-\ select-pane -l
|
|
|
|
# fzf binding
|
|
set -g @tmux-fzf-launch-key 'f'
|
|
|
|
######################
|
|
### PLUGINS ###
|
|
######################
|
|
|
|
# various plugins
|
|
set -g @plugin 'tmux-plugins/tpm'
|
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
|
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
|
set -g @plugin 'tmux-plugins/tmux-continuum'
|
|
set -g @plugin 'sainnhe/tmux-fzf'
|
|
# note: fzf bound to 'F'
|
|
#set -g @plugin 'odedlaz/tmux-onedark-theme'
|
|
|
|
# solarized plugin and options
|
|
#set -g @plugin 'seebi/tmux-colors-solarized'
|
|
# set -g @colors-solarized '256' (the default)
|
|
# set -g @colors-solarized 'dark'
|
|
# set -g @colors-solarized 'light'
|
|
#set -g @colors-solarized 'base16'
|
|
|
|
# tmux themepack
|
|
set -g @plugin 'jimeh/tmux-themepack'
|
|
#set -g @themepack 'basic'
|
|
#set -g @themepack 'powerline/default/yellow'
|
|
#set -g @themepack 'powerline/default/orange'
|
|
#set -g @themepack 'powerline/block/blue'
|
|
#set -g @themepack 'powerline/block/cyan'
|
|
#set -g @themepack 'powerline/default/gray'
|
|
set -g @themepack 'powerline/double/yellow'
|
|
|
|
# keep at bottom
|
|
run -b '~/.tmux/plugins/tpm/tpm'
|