Skip to content

Instantly share code, notes, and snippets.

@fayimora
Last active June 25, 2023 10:31
Show Gist options
  • Save fayimora/a6dcff707d6b10068b12d30c770bdd2a to your computer and use it in GitHub Desktop.
Save fayimora/a6dcff707d6b10068b12d30c770bdd2a to your computer and use it in GitHub Desktop.

Revisions

  1. fayimora revised this gist Jun 25, 2023. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions tmux.conf
    Original file line number Diff line number Diff line change
    @@ -15,10 +15,10 @@ bind-key ^S split-window -p 50 -c "#{pane_current_path}"

    # Pane resize in all four directions using vi bindings.
    # Can use these raw but I map them to shift-ctrl-<h,j,k,l> in iTerm.
    bind -r H resize-pane -L 5
    bind -r J resize-pane -D 5
    bind -r K resize-pane -U 5
    bind -r L resize-pane -R 5
    # bind -r H resize-pane -L 5
    # bind -r J resize-pane -D 5
    # bind -r K resize-pane -U 5
    # bind -r L resize-pane -R 5

    # Smart pane switching with awareness of Vim splits.
    # See: https://github.com/christoomey/vim-tmux-navigator
  2. fayimora created this gist Jun 25, 2023.
    152 changes: 152 additions & 0 deletions tmux.conf
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,152 @@
    # Ring the bell if any background window rang a bell
    set -g bell-action any

    # Default termtype. If the rcfile sets $TERM, that overrides this value.
    set -g default-terminal screen-256color

    # Keep your finger on ctrl, or don't
    bind-key ^D detach-client

    # Create splits and vertical splits
    bind-key v split-window -h -p 50 -c "#{pane_current_path}"
    bind-key ^V split-window -h -p 50 -c "#{pane_current_path}"
    bind-key s split-window -p 50 -c "#{pane_current_path}"
    bind-key ^S split-window -p 50 -c "#{pane_current_path}"

    # Pane resize in all four directions using vi bindings.
    # Can use these raw but I map them to shift-ctrl-<h,j,k,l> in iTerm.
    bind -r H resize-pane -L 5
    bind -r J resize-pane -D 5
    bind -r K resize-pane -U 5
    bind -r L resize-pane -R 5

    # 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 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
    # bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
    # bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
    # bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'

    # tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
    # if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
    # "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'"
    # if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
    # "bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'"

    # bind-key -T copy-mode-vi 'C-h' select-pane -L
    # bind-key -T copy-mode-vi 'C-j' select-pane -D
    # bind-key -T copy-mode-vi 'C-k' select-pane -U
    # bind-key -T copy-mode-vi 'C-l' select-pane -R
    # bind-key -T copy-mode-vi 'C-\' select-pane -l

    # Use vi keybindings for tmux commandline input.
    # Note that to get command mode you need to hit ESC twice...
    # set -g status-keys vi

    # Use vi keybindings in copy and choice modes
    # setw -g mode-keys vi

    # easily toggle synchronization (mnemonic: e is for echo)
    # sends input to all panes in a given window.
    bind e setw synchronize-panes on
    bind E setw synchronize-panes off

    # set first window to index 1 (not 0) to map more to the keyboard layout...
    set-option -g base-index 1
    set-window-option -g pane-base-index 1
    set-window-option -g mouse on

    # color scheme (styled as vim-powerline)
    set -g status-left-length 52
    set -g status-right-length 451
    set -g status-style fg=white,bg=colour234
    set -g pane-border-style fg=colour245
    set -g pane-active-border-style fg=colour39
    set -g message-style fg=colour16,bg=colour221,bold
    set -g status-left '#[fg=colour235,bg=colour252,bold] ❐ #S #[fg=colour252,bg=colour238,nobold]⮀#[fg=colour245,bg=colour238,bold] #(whoami) #[fg=colour238,bg=colour234,nobold]⮀'
    set -g window-status-format '#[fg=colour235,bg=colour252,bold] #I #(pwd="#{pane_current_path}"; echo ${pwd####*/}) #W '
    set -g window-status-current-format '#[fg=colour234,bg=colour39]⮀#[fg=black,bg=colour39,noreverse,bold] #{?window_zoomed_flag,#[fg=colour228],} #I #(pwd="#{pane_current_path}"; echo ${pwd####*/}) #W #[fg=colour39,bg=colour234,nobold]⮀'
    set-option -g status-interval 2

    # Patch for OS X pbpaste and pbcopy under tmux.
    set-option -g default-command "which reattach-to-user-namespace > /dev/null && reattach-to-user-namespace -l $SHELL || $SHELL"

    # Screen like binding
    unbind C-b
    set -g prefix C-a
    bind a send-prefix

    # No escape time for vi mode
    set -sg escape-time 0

    # Screen like binding for last window
    unbind l
    bind C-a last-window

    # Bigger history
    set -g history-limit 10000

    # New windows/pane in $PWD
    bind c new-window -c "#{pane_current_path}"

    # Fix key bindings broken in tmux 2.1
    set -g assume-paste-time 0

    # force a reload of the config file
    unbind r
    bind r source-file ~/.tmux.conf \; display "Reloaded!"

    source-file ~/.fig/tmux

    set -g @plugin 'tmux-plugins/tpm'
    set -g @plugin 'aserowy/tmux.nvim'

    #
    is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"

    bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' { if -F '#{pane_at_left}' '' 'select-pane -L' }
    bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' { if -F '#{pane_at_bottom}' '' 'select-pane -D' }
    bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' { if -F '#{pane_at_top}' '' 'select-pane -U' }
    bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' { if -F '#{pane_at_right}' '' 'select-pane -R' }

    bind-key -T copy-mode-vi 'C-h' if -F '#{pane_at_left}' '' 'select-pane -L'
    bind-key -T copy-mode-vi 'C-j' if -F '#{pane_at_bottom}' '' 'select-pane -D'
    bind-key -T copy-mode-vi 'C-k' if -F '#{pane_at_top}' '' 'select-pane -U'
    bind-key -T copy-mode-vi 'C-l' if -F '#{pane_at_right}' '' 'select-pane -R'

    # is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"

    bind -n 'M-h' if-shell "$is_vim" 'send-keys M-h' 'resize-pane -L 1'
    bind -n 'M-j' if-shell "$is_vim" 'send-keys M-j' 'resize-pane -D 1'
    bind -n 'M-k' if-shell "$is_vim" 'send-keys M-k' 'resize-pane -U 1'
    bind -n 'M-l' if-shell "$is_vim" 'send-keys M-l' 'resize-pane -R 1'

    bind-key -T copy-mode-vi M-h resize-pane -L 1
    bind-key -T copy-mode-vi M-j resize-pane -D 1
    bind-key -T copy-mode-vi M-k resize-pane -U 1
    bind-key -T copy-mode-vi M-l resize-pane -R 1

    # navigation
    set -g @tmux-nvim-navigation true
    set -g @tmux-nvim-navigation-cycle true
    set -g @tmux-nvim-navigation-keybinding-left 'C-h'
    set -g @tmux-nvim-navigation-keybinding-down 'C-j'
    set -g @tmux-nvim-navigation-keybinding-up 'C-k'
    set -g @tmux-nvim-navigation-keybinding-right 'C-l'

    # resize
    set -g @tmux-nvim-resize true
    set -g @tmux-nvim-resize-step-x 1
    set -g @tmux-nvim-resize-step-y 1
    set -g @tmux-nvim-resize-keybinding-left 'M-h'
    set -g @tmux-nvim-resize-keybinding-down 'M-j'
    set -g @tmux-nvim-resize-keybinding-up 'M-k'
    set -g @tmux-nvim-resize-keybinding-right 'M-l'


    run '~/.tmux/plugins/tpm/tpm'

    # Local config
    # if-shell "[ -f ~/.tmux.conf.user ]" 'source ~/.tmux.conf.user'