【Ubuntu】【tmux】emacs系のキーバインドをする【SW】

tmux のキーバインドを emacs 系にするためのメモ

 

動作環境

  • Ubuntu16.04
  • Ubuntu18.04

 

キーの割り当て方針

個人的に、コマンドラインの操作 vi よりも emacs の方が移動しやすいので、tmux でも emacs 系の操作をしたい。
 

キー割り当て内容

操作内容 キー 備考
範囲選択をして切り取りをする (始点) C-Space  (終点) C-w
範囲選択をしてコピーをする (始点) C-Space  (終点) M-w
ペーストする C-y
画面の水平分割 C-x 2
画面の垂直分割 C-x 4
tmux終了 C-x C-c
バッファ選択 C-x b メニュ形式で選択する
バッファ終了 C-x k
移動モード開始 C-x [
移動モード終了 C-c

 

$HOME/.tmux.conf の設定内容 (tmux 2.6 以上の場合)

# ======================
# Setting For tmux
# ======================
# プレフィックスキー C-x
unbind C-b
set-option -g prefix C-x

set-option -g default-shell /usr/bin/fish

# 256色
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'

#全てのベルを無視
set-option -g bell-action none
# ウィンドウ番号基準値
set-option -g base-index 1
# ウィンドウの自動リネームoff
set-window-option -g automatic-rename off
#ウィンドウで動作があるとステータスラインでハイライト
set-window-option -g monitor-activity on

# コピー、選択モードのキーバインドemacs
set -g mode-keys emacs

# 設定ファイル再読み込み r
bind r source-file ~/.tmux.conf \; display-message "Reloaded config !!"

# Sync
bind S setw synchronize-panes on
bind E setw synchronize-panes off

# 直前のウィンドウ t
bind C-t last-window

# デタッチ d
bind d detach

# タイトル変更 A
bind A command-prompt "rename-window %%"

# ウィンドウ選択画面
bind b choose-window

# 新ウィンドウ作成
bind 5 new-window

# 分割していたペインそれぞれをWindowに
# bind 0 break-pane

# ペイン終了
bind k kill-pane

# ウィンドウ終了
bind C-c kill-window

# ペイン番号表示
#bind i display-panes

# ペインの縦分割
bind 2 split-window -v
# ペインの横分割
bind 4 split-window -h

# resize panes like vim
# feel free to change the "1" to however many lines you want to resize by, only
# one at a time can be slow
bind < resize-pane -L 1
bind > resize-pane -R 1
bind - resize-pane -D 1
bind + resize-pane -U 1

# history size
set-option -g history-limit 100000
set-option -g mouse on

bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M

#bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

# ステータスラインの設定 {{{
# powerline setting
set-option -g status on
set -g status-interval 1
# window list alignment
set-option -g status-justify "left"
set-option -g status-left-length 150
set-option -g status-right-length 150
set-option -g status-left "#(~/.tmux/tmux-powerline/powerline.sh left)"
set-option -g status-right "#(~/.tmux/tmux-powerline/powerline.sh right)"
# # }}}

# window-status を中央揃えで配置する
set-option -g status-justify "centre"
# # status line の背景色を指定する。
set-option -g status-fg white
set-option -g status-bg black
# 現在のウィンドウの色
set-window-option -g window-status-current-fg   white
set-window-option -g window-status-current-bg   blue

# Copy Mode Start
# To copy:
#ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
# tmux 2.0 の場合
#ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
# bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "
# bind-key -n -t emacs-copy C-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "

#ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
# tmux 2.6 の場合
#ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
bind-key -n -T copy-mode M-w send-keys -X copy-pipe-and-cancel "xclip -i -sel p -f | xclip -i -sel c "
bind-key -n -T copy-mode C-w send-keys -X copy-pipe-and-cancel "xclip -i -sel p -f | xclip -i -sel c "
   
# To paste:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"

 

$HOME/.tmux.conf の設定内容 (tmux 2.0 の場合)

本ページに記した $HOME/.tmux.conf については tmux のバージョンは 2.6 を想定しているが、2.0 の場合との差分は以下のみである。

bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "
bind-key -n -t emacs-copy C-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c "
bind-key -n -T copy-mode M-w send-keys -X copy-pipe-and-cancel "xclip -i -sel p -f | xclip -i -sel c "
bind-key -n -T copy-mode C-w send-keys -X copy-pipe-and-cancel "xclip -i -sel p -f | xclip -i -sel c "