diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf new file mode 100644 index 0000000..94a827f --- /dev/null +++ b/tmux/.tmux.conf @@ -0,0 +1,112 @@ +#################################### +## BINDINGS ## +#################################### + +# Change default Prefix key to Ctrl+Space +unbind C-b +set -g prefix C-Space + +# Reload config with Prefix+R +unbind r +bind r source-file ~/.tmux.conf \; display "Reloaded ~/.tmux.conf" + +# mouse mode +set -g mouse on +bind m set -g mouse on \; display 'Mouse: ON' +bind M set -g mouse off \; display 'Mouse: OFF' + +# Increase history limit +set -g history-limit 100000 + +# shorter escape time +set -sg escape-time 0 +set -sg repeat-time 600 + +# Copy Mode (Prefix+[) +set-window-option -g mode-keys vi # Vim keys to navigate (Ctrl+u, Ctrl+d, /) +# unbind -T copy-mode-vi Space; # Begin-selection +# unbind -T copy-mode-vi Enter; # Copy-selection +# bind -T copy-mode-vi v send-keys -X begin-selection # select text with 'v' +# bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel --clipboard" # copy text with 'y' + +# Vim integrations +set -g -a terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q' # fix cursor mode +# 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 -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L" +bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D" +bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U" +bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R" +bind -n C-\\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l" + +## PANES +# Split panes with v and h +unbind v +unbind h +unbind % # Split vertically +unbind '"' # Split horizontally +bind v split-window -h -c "#{pane_current_path}" +bind h split-window -v -c "#{pane_current_path}" + +# Navigating panes with Ctrl+{hjkl} +bind -n C-h select-pane -L +bind -n C-j select-pane -D +bind -n C-k select-pane -U +bind -n C-l select-pane -R + +# pane resize with left/right/up/down +bind -r Left resize-pane -L 5 +bind -r Right resize-pane -R 5 +bind -r Up resize-pane -U 5 +bind -r Down resize-pane -D 5 + +# swap panes with <> +bind > swap-pane -D +bind < swap-pane -U + +## WINDOWS +# Windows start at 1 not 0 +set -g base-index 1 +set-window-option -g pane-base-index 1 + +# Window operations +unbind n # Move to next window +unbind w # Change current window interactively +bind n command-prompt "rename-window '%%'" +bind w new-window -c "#{pane_current_path}" +bind -n M-j previous-window # Alt+j +bind -n M-k next-window # Alt+k + +#################################### +## DESIGN ## +#################################### + +# default statusbar colors +set-option -g status-style fg=yellow,bg=black + +# default window title colors +set-window-option -g window-status-style fg=brightblue,bg=default +# set-window-option -g window-status-style dim + +# active window title colors +set-window-option -g window-status-current-style fg=brightred,bg=default +#set-window-option -g window-status-current-style bright + +# pane border +set-option -g pane-border-style fg=black +set-option -g pane-active-border-style fg=brightgreen + +# message text +set-option -g message-style fg=brightred,bg=black + +# pane number display +set-option -g display-panes-active-colour blue +set-option -g display-panes-colour brightred + +# clock +set-window-option -g clock-mode-colour brightgreen + +# bell +set-window-option -g window-status-bell-style fg=black,bg=red \ No newline at end of file