spurra
spurra

Reputation: 1025

tmux - Force repeat prefix key for every command

Right now my tmux keybindings are set such that prefix + h/j/k/l (i.e vim-style bindings) are used to move focus of the panes left/down/up/right. However, sometimes when I switch to a pane running vim and I immediately start navigating with h/j/k/l, I get stuck in "tmux mode" where it will continue switching panes instead of navigating in vim. I have similar issues when switching to a normal terminal pane and listing files (i.e by using "l"). To avoid this, I would like to force tmux to require the prefix key for every pane switch I do.

Is there a way to do this?

Edit: In case its needed, here is my .tmux.conf

# Bind CTRL+a to the prefix button
set -g prefix C-a
unbind C-b
bind C-a send-prefix
bind a send-prefix
# Remove the delay of escape key
set -s escape-time 0
# Bind PREFIX + r to reload the .conf file
unbind r
bind r source-file ~/.tmux.conf
# Quick pane cycling
unbind ^A
bind ^A select-pane -t :.+

set -g base-index 1
setw -g pane-base-index 1

set-option -g default-shell "/bin/bash"
# List of tmux plugins
set -g @plugin 'tmux-plugins/tmux-resurrect'
# Plugin manager
run '~/.tmux/plugins/tpm/tpm'
# Enable mouse support on tmux
set -g mouse on
# Rebind the pane switching to vim-like shortcuts
bind -r k select-pane -U
bind -r j select-pane -D
bind -r h select-pane -L
bind -r l select-pane -R
unbind Up
unbind Down
unbind Left
unbind Right
unbind C-Up
unbind C-Down
unbind C-Left
unbind C-Right
# Set the tmux colors to default
set -g default-terminal screen-256color

Upvotes: 1

Views: 2870

Answers (2)

Phlippie Bosman
Phlippie Bosman

Reputation: 5720

I disagree with @filbranden's assertion that "Requiring the prefix for every pane switch is the normal behavior". This demonstrably false: on a fresh install, you can create a window with two panes, type the prefix (C-b), and then jump between the panes as many times as you like by pressing arrow keys.

This answer on StackExchange seems correct. The feature that results in the prefix not being required is controlled by setting the option repeat-time. It is set to 500 by default (which is why the default behaviour is that the prefix is not required).

To disable this behaviour, simply add this line to your config:

set-option -g repeat-time 0

Upvotes: 2

filbranden
filbranden

Reputation: 8908

This is being caused by your use of -r when creating the key bindings for h/j/k/l.

From the entry for bind-key in the tmux man page:

The -r flag indicates this key may repeat, see the repeat-time option.

And about the repeat-time option:

Allow multiple commands to be entered without pressing the prefix-key again in the specified time milliseconds (the default is 500). Whether a key repeats may be set when it is bound using the -r flag to bind-key. Repeat is enabled for the default keys bound to the resize-pane command.

Just drop the -r from those four commands to have it require the prefix key every time.

Upvotes: 4

Related Questions