Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterm2 with tmux intergration not using keybindings from .tmux.conf

Tags:

iterm2

tmux

I have been using tmux in iTerm2 for a while now but I have not been using the tmux integration that now comes with iTerm2.

I started looking at using the tmux intergration as it allows you to use the shell intergration inside tmux.

The problem i am encountering is that after i do tmux -CC none of the key bindings inside my .tmux.conf work... I cant even get any of the defaults to work. I would really like to use tmux integration but cant unless i can get the key bindings in my .tmux.conf to work.

Some of the bindings that are not working are;

  • Rebound the prefix key to C-s
  • bind-key \ split-window -v -c '#{pane_current_path}'
  • bind-key - split-window -h -c '#{pane_current_path}'

These are just a couple of examples but basically nothing seems to be working...

My .tmux.conf is

# improve colors
set-option -g default-terminal "screen-256color"

# set base Prefix key to ctrl-s
unbind C-b
set -g prefix C-s
bind-key -r C-s send-prefix

# reload the source config
bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded"

# 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"
bind-key -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l"

set-option -g status-keys "emacs"

#change colour of status bar
set-option -g status-bg '#666666'
set-option -g status-fg '#aaaaaa'

# set window split
bind-key - split-window -v  -c '#{pane_current_path}'
bind-key \ split-window -h  -c '#{pane_current_path}'

# set text in status bar
set -g status-interval 1
set -g status-justify centre # center align window list
set -g status-left-length 50
set -g status-right-length 140
set -g status-left '#[fg=green]#H #[fg=black]• #[fg=green,bright]#(uname -r | cut -c 1-6)#[default]'
set -g status-right '#[fg=green,bg=default,bright]#(tmux-mem-cpu-load -i 1) #[fg=red,dim,bg=default]#(battery -at) #[fg=white,bg=default]%a%l:%M:%S %p#[default] #[fg=blue]%Y-%m-%d'

# Fine adjustment (1 or 2 cursor cells per bump)
bind -n S-Left resize-pane -L 2
bind -n S-Right resize-pane -R 2
bind -n S-Down resize-pane -D 1
bind -n S-Up resize-pane -U 1

# new window opens in same directory
bind c new-window -c "#{pane_current_path}"

# set window numbering to start from 1
set -g base-index 1
set -g renumber-windows on

# allow to take a pane and put it into new window
bind-key b break-pane -d

# allows ctrl-j to open tree of tmux sessions
bind-key C-j choose-tree

# Use vim keybindings in copy mode
setw -g mode-keys vi

# Setup 'v' to begin selection as in Vim
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

# History
set -g history-limit 10000

# Mouse mode
set-option -g mouse on

# Rename Tab
set-option -g set-titles on

# Terminal notifier doesnt work with tmux
set -g default-command "which reattach-to-user-namespace > /dev/null && reattach-to-user-namespace -l $SHELL || $SHELL -l"

set-option -sg escape-time 10
like image 672
hvenables Avatar asked Mar 16 '17 12:03

hvenables


People also ask

How do you use tmux on iTerm2?

The first key combination (ctrl+b) puts tmux into command mode. The percent tells tmux to split the window vertically. Even moving between the vertical panes takes two keyboard interactions. The first is ctrl+b which puts tmux into command mode.

Does iTerm2 come with tmux?

iTerm2 is integrated with tmux, allowing you to enjoy a native user interface with all the benefits of tmux's persistence.

How do you bind keys in tmux?

tmux may be controlled from an attached client by using a key combination of a prefix key, 'C-b' (Ctrl-b) by default, followed by a command key. The default command key bindings are: C-b Send the prefix key (C-b) through to the application. C-o Rotate the panes in the current window forwards.


Video Answer


1 Answers

Copying my answer at https://stackoverflow.com/a/47171067/4200039 over:

Someone reported a similar bug at iTerm2 Tmux Integration Default Keybindings not working in 2015. The response from the developer George Nachman suggests that keybindings are not supported:

One of the main goals of the tmux integration is that you use iTerm2's keystrokes, not tmux's. If there's a specific workflow that you can't accomplish natively, let me know--there is a lot of power in the ability to remap keys in iTerm2.

This should be flagged as a duplicate of iTerm 2 not honoring key bindings declared in .tmux.conf but I can't flag it until it has an accepted or upvoted answer.

like image 116
Ben Creasy Avatar answered Nov 14 '22 13:11

Ben Creasy