「Tmux」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
 
(→‎256色: 同期)
 
(7人の利用者による、間の39版が非表示)
1行目: 1行目:
  +
{{lowercase title}}
[[Category:ターミナルエミュレータ]]
 
  +
[[Category:ターミナルマルチプレクサ]]
 
[[en:Tmux]]
 
[[en:Tmux]]
 
[[es:Tmux]]
 
[[es:Tmux]]
 
[[ru:Tmux]]
 
[[ru:Tmux]]
[[tr:Tmux]]
+
[[zh-hans:Tmux]]
[[zh-CN:Tmux]]
 
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|dtach}}
 
{{Related|GNU Screen}}
 
{{Related|GNU Screen}}
 
{{Related articles end}}
 
{{Related articles end}}
   
[http://tmux.sourceforge.net/ Tmux] はターミナルマルチプレクサです: 一つのスクリーンから別々のプログラムが動作する多数のターミナル (またはウィンドウ) を作成・アクセス・制御することができます。tmux はスクリーンから分離させてバックグラウンドで動作させることができ、後でまた繋ぎ直すことができます。
+
[http://tmux.github.io/ tmux] はターミナルマルチプレクサ: 一つのスクリーンから別々のプログラムが動作する多数のターミナル (またはウィンドウ) を作成・アクセス・制御することができます。tmux はスクリーンから分離させてバックグラウンドで動作させることができ、後でまた繋ぎ直すことができます。」です。
   
Tmux は [[Screen Tips|GNU Screen]] の代わりになるものとして BSD ライセンスで配布されています。似ているところもありますが、プログラムには様々な違いが存在します。[http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ tmux の FAQ ページ] を見て下さい。
+
tmux は [[GNU Screen]] の代わりになるものとして ISC ライセンスで配布されています。似ているところもありますが、プログラムには様々な違いが存在します。[https://github.com/tmux/tmux/wiki/FAQ tmux の FAQ ページ] を見て下さい。
   
 
== インストール ==
 
== インストール ==
[[公式リポジトリ]]にある {{Pkg|tmux}} パッケージを[[インストール]]してください。
+
{{Pkg|tmux}} パッケージを[[インストール]]してください。任意で {{Aur|tmux-bash-completion-git}} をインストールすることで tmux の bash 補完を使うことができます
   
 
== 設定 ==
 
== 設定 ==
  +
ユーザーごとの設定ファイルは {{ic|~/.tmux.conf}} に、グローバルな設定ファイルは {{ic|/etc/tmux.conf}} に配置されます。デフォルトの設定ファイルは {{Ic|/usr/share/tmux/}} にあります。
 
  +
デフォルトでは、tmux はユーザ毎の設定として {{ic|~/.tmux.conf}} を探します。しかし、{{ic|~/.config/tmux/tmux.conf}} も使用可能です (このパスはハードコードされていて、{{ic|$XDG_CONFIG_HOME}} は無視されます)。グローバルな設定ファイルは {{ic|/etc/tmux.conf}} を使用できます。しかし、デフォルトでは Arch のパッケージはこのファイルを同梱していません。
   
 
=== キーバインド ===
 
=== キーバインド ===
24行目: 26行目:
   
 
ウィンドウを複数のペインに分割した後、ペインのサイズを変更するには、プレフィックスキー (例: {{Ic|Ctrl-b}}) を押してから、Ctrl を押しながら、Left/Right/Up/Down を押します。ペイン間の移動も同じ方法で行い、矢印キーの代わりに ''o'' を使います。
 
ウィンドウを複数のペインに分割した後、ペインのサイズを変更するには、プレフィックスキー (例: {{Ic|Ctrl-b}}) を押してから、Ctrl を押しながら、Left/Right/Up/Down を押します。ペイン間の移動も同じ方法で行い、矢印キーの代わりに ''o'' を使います。
 
{{Tip|[[GNU_Screen|screen]] と同じキーバインドを使いたい場合は {{ic|/usr/share/tmux/screen-keys.conf}} を設定ファイルにコピーしてください。}}
 
   
 
キーバインドは {{ic|tmux.conf}} の bind と unbind コマンドで変更することができます。例えばデフォルトのプレフィックスキーである {{Ic|Ctrl-b}} を {{Ic|Ctrl-a}} に変更するには設定ファイルに以下のコマンドを追加します:
 
キーバインドは {{ic|tmux.conf}} の bind と unbind コマンドで変更することができます。例えばデフォルトのプレフィックスキーである {{Ic|Ctrl-b}} を {{Ic|Ctrl-a}} に変更するには設定ファイルに以下のコマンドを追加します:
35行目: 35行目:
 
}}
 
}}
   
{{Tip|Quote special characters to use them as prefix. You may also use {{ic|Alt}} instead of {{ic|Ctrl}}. For example: {{ic|set -g prefix m-'\'}}}}
+
{{Tip|特殊文字はクォートで囲ってプレフィックスとして使ってください。{{ic|Ctrl}} の代わりに {{ic|Alt}} (Meta) を使うこともできます。例: {{ic|set -g prefix m-'\'}}}}
   
  +
さらに、ウィンドウ間の移動をする方法には以下のものもあります:
Additional ways to move between windows include the following:
 
   
  +
Ctrl-b l (直前に選択されていたウィンドウに移動します)
Ctrl-b l (Move to the previously selected window)
 
  +
Ctrl-b w (すべてのウィンドウ、及びウィンドウの番号の一覧を表示します)
Ctrl-b w (List all windows / window numbers)
 
  +
Ctrl-b <ウィンドウの番号> (指定された番号のウィンドウに移動する。なお、デフォルトでは 0 - 9 の番号が割り当てられています)
Ctrl-b <window number> (Move to the specified window number, the default bindings are from 0 – 9)
 
  +
Ctrl-b q (ペインの番号を表示する。表示された番号を入力すると対応するペインに移動できます)
Ctrl-b q (Show pane numbers, when the numbers show up type the key to goto that pane)
 
   
  +
Tmux にはウィンドウを探す機能とそれへのキー割り当てがあり、多数のウィンドウを容易に行き来することができます:
Tmux has a find-window option & key binding to ease navigation of many windows:
 
   
  +
Ctrl-b f <ウィンドウの名前> (名前でウィンドウを検索する)
Ctrl-b f <window name> (Search for window name)
 
  +
Ctrl-b w (ウィンドウの一覧からウィンドウを選択する)
Ctrl-b w (Select from interactive list of windows)
 
   
==== スクロ ====
+
==== コピモード ====
   
  +
tmux ウィンドウには複数のモードが存在します。デフォルトのモードではウィンドウにアタッチされたターミナルに直接アクセスすることができ、もうひとつのモードはコピーモードです。コピーモードではバッファを移動することができ履歴をスクロールすることが可能です。vi または emacs スタイルのキーバインドが使えます。VISUAL や EDITOR に ‘vi’ が含まれていない場合、デフォルトでは emacs のキーバインドが使われます。
To enter scroll mode do the either of the following:
 
  +
  +
コピーモードに入るには以下を実行:
 
 
 
Ctrl-b [
 
Ctrl-b [
   
  +
デフォルトエディタと同じようにバッファを操作することができます。
This will put you in scroll mode and then you can use arrow keys or page up and page down keys.
 
   
  +
コピーモードを終了するには、以下のキーバインドのどちらかを使います:
Ctrl-b PageUp
 
   
  +
vi モード:
This will immediately put you in scroll mode and page up.
 
  +
q
  +
emacs モード:
  +
Esc
   
 
=== URL のブラウズ ===
 
=== URL のブラウズ ===
 
tmux の中で URL をブラウズするには {{AUR|urlview}} をインストールして設定する必要があります。
 
tmux の中で URL をブラウズするには {{AUR|urlview}} をインストールして設定する必要があります。
   
  +
新しいターミナルの中で:
Inside a new terminal:
 
 
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; run-shell "$TERMINAL -e urlview /tmp/tmux-buffer"
 
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; run-shell "$TERMINAL -e urlview /tmp/tmux-buffer"
   
  +
新しい tmux ウィンドウの中で (新しいターミナルは不要です):
Or inside a new tmux window (no new terminal needed):
 
 
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; new-window -n "urlview" '$SHELL -c "urlview < /tmp/tmux-buffer"'
 
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; new-window -n "urlview" '$SHELL -c "urlview < /tmp/tmux-buffer"'
   
 
=== 適切なターミナルの設定 ===
 
=== 適切なターミナルの設定 ===
If you are using a 256 colour terminal, you will need to set the correct term in tmux. You can do this in {{ic|tmux.conf}}:
 
   
  +
==== 256色 ====
set -g default-terminal "screen-256color"
 
  +
  +
256色のターミナルを使っている場合、tmux で適切なターミナル (''tmux'' または ''tmux-256color'') を設定する必要があります。設定ファイルで以下のように設定できます:
  +
  +
{{hc|tmux.conf|set -g default-terminal "tmux-256color"}}
  +
  +
また、tmux の表示がおかしくなってしまう場合、[[.bashrc]] に以下のエイリアスを追加することで tmux はターミナルが256色をサポートしていると仮定するようになります:
  +
  +
alias tmux="tmux -2"
  +
  +
==== 24ビットカラー ====
  +
  +
Tmux はバージョン 2.2 から24ビットカラーをサポートしています [https://github.com/tmux/tmux/commit/427b8204268af5548d09b830e101c59daa095df9] 使用しているターミナルが24ビットカラーをサポートしている場合 ([https://gist.github.com/XVilka/8346728 gist] を参照) ターミナルを {{ic|terminal-overrides}} 設定に追加してください。例えば、[[Termite]] を使っているのであれば以下のように追加します:
  +
  +
set -ga terminal-overrides ",xterm-termite:Tc"
  +
  +
他のターミナルの場合、{{ic|xterm-termite}} を適切なターミナルのタイプに置き換えてください ({{ic|$TERM}} に保存されています)。{{ic|Tc}} の terminfo 拡張について詳しくは {{man|1|tmux}} ページを見てください。
  +
  +
==== xterm-keys ====
  +
{{ic|tmux.conf}} で xterm-keys を有効にするには、以下の行を追加してください:
  +
  +
set-option -g xterm-keys on
   
  +
{{ic|tmux.conf}} で xterm-keys を有効にしたら、新しいエスケープコードがアプリケーションから認識されるようにカスタム terminfo を作成して宣言する必要があります。{{ic|tic}} で以下のコードをコンパイルして TERM に "xterm-screen-256color" を指定してください:
If you enable xterm-keys in your {{ic|tmux.conf}}, then you need to build a custom terminfo to declare the new escape codes or applications will not know about them. Compile the following with {{ic|tic}} and you can use "xterm-screen-256color" as your TERM:
 
   
 
# A screen- based TERMINFO that declares the escape sequences
 
# A screen- based TERMINFO that declares the escape sequences
95行目: 120行目:
   
 
=== 他の設定 ===
 
=== 他の設定 ===
  +
スクロールバックバッファを10000行に設定:
Set scrollback to 10000 lines with
 
 
set -g history-limit 10000
 
set -g history-limit 10000
  +
  +
ターミナルエミュレータの設定を上書き:
  +
set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
  +
set -ga terminal-override ',rxvt-uni*:XT:Ms=\E]52;%p1%s;%p2%s\007'
  +
  +
マウスを切り替える:
  +
bind-key m set-option -g mouse on \; display 'Mouse: ON'
  +
bind-key M set-option -g mouse off \; display 'Mouse: OFF'
   
 
=== systemd で自動起動 ===
 
=== systemd で自動起動 ===
   
  +
起動時に tmux サーバーを立ち上げることには複数の利点が存在します。特に、新しい tmux セッションを起動する場合、既にサービスが動作していれば起動時間が短縮されます。
There are some notable advantages to starting a tmux server at startup.
 
Notably, when you start a new tmux session, having the service already running reduces any delays in the startup.
 
   
  +
さらに、tmux セッションのカスタマイズは維持され、たとえログインしなくても tmux セッションを永続化することができます (tmux の設定をスクリプトで管理している場合やユーザーの tmux セッションを共有する場合などに有用です)
Furthermore, any customization attached to your tmux session will be retained and your tmux session can be made to persist even if you have never logged in, if you have some reason to do that (like a heavily scripted tmux configuration or shared user tmux sessions).
 
   
The service below starts ''tmux'' for the specified user (i.e. start with {{ic|tmux@''username''.service}}):
+
以下のサービスは特定のユーザーで ''tmux'' を起動します ({{ic|tmux@''username''.service}} で起動と同じ):
   
 
{{hc|/etc/systemd/system/tmux@.service|<nowiki>
 
{{hc|/etc/systemd/system/tmux@.service|<nowiki>
121行目: 153行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
{{Tip|{{ic|1=WorkingDirectory=''custom_path''}} を追加して、作業ディレクトリをカスタマイズできます。 {{ic|~}} に設定すると、{{ic|1=User=}} で指定されたユーザーのホームディレクトリが使用されます。}}
{{Tip|You may want to add {{ic|1=WorkingDirectory=''custom_path''}} to customize working directory.}}
 
   
  +
または、({{ic|1=User=%I}} を使わずに) 上記のファイルを [[systemd/ユーザー]]ディレクトリに配置することもできます、例: {{ic|~/.config/systemd/user/tmux.service}} この方法だと [[systemd/ユーザー#systemd のユーザーインスタンスを自動起動|ユーザーインスタンスの自動起動]] を有効にしていない場合、ログイン時に tmux サービスが起動します。
Alternatively, you can place this file within your [[systemd/User]] directory (without {{ic|1=User=%I}}), for example {{ic|~/.config/systemd/user/tmux.service}}. This way the tmux service will start when you log in.
 
   
 
== セッションの開始 ==
 
== セッションの開始 ==
  +
{{ic|~/.tmux.conf}} に以下のように記述することでウィンドウがプリロードされた状態で tmux でセッションを開くことができます:
You can have tmux open a session with preloaded windows by including those details in your {{ic|~/.tmux.conf}}:
 
   
 
new -n WindowName Command
 
new -n WindowName Command
132行目: 164行目:
 
neww -n WindowName Command
 
neww -n WindowName Command
   
  +
ウィンドウが分割された状態でセッションを起動するには (マルチペイン)、分割したい neww の下に splitw コマンドを追加してください:
To start a session with split windows (multiple panes), include the splitw command below the neww you would like to split; thus:
 
   
 
new -s SessionName -n WindowName Command
 
new -s SessionName -n WindowName Command
140行目: 172行目:
 
selectp -t 0
 
selectp -t 0
   
  +
上記の場合、ウィンドウが2つ開いて、2番目のウィンドウは foo/bar という名前で縦に半分に分割されます (50%)。bar の上で foo が実行されます。フォーカスはウィンドウ 2 (foo/bar) のトップペイン (foo) になります。
would open 2 windows, the second of which would be named foo/bar and would be split vertically in half (50%) with foo running above bar. Focus would be in window 2 (foo/bar), top pane (foo).
 
   
  +
{{Note|{{ic|.conf}} で base-index を 1 に指定しないかぎり、セッション・ウィンドウ・ペインの番号は 0 から割り振られます。}}
{{Note|Numbering for sessions, windows and panes starts at zero, unless you have specified a base-index of 1 in your {{ic|.conf}} }}
 
   
  +
複数のセッションを管理したい場合、設定ファイルから別のセッションファイルを読み込んでください:
To manage multiple sessions, source separate session files from your conf file:
 
   
 
# initialize sessions
 
# initialize sessions
150行目: 182行目:
 
bind B source-file ~/.tmux/bar
 
bind B source-file ~/.tmux/bar
   
== トラブルシュティング ==
+
== X クリップボドの統合 ==
   
  +
{{Tip|tmux のプラグイン [https://github.com/tmux-plugins/tmux-yank tmux-yank] は同じような機能を提供します。}}
=== スクロールの問題 ===
 
If you have issues scrolling with Shift-Page Up/Down in your terminal, the following will remove the smcup and rmcup capabilities for any term that reports itself as anything beginning with {{ic|xterm}}:
 
   
  +
tmux のセレクションを X クリップボード (や X プライマリ/セカンダリセレクション) にコピーしたり、その逆ができます。以下の tmux 設定ファイルのスニペットは {{Pkg|xsel}} プログラムを使って X クリップボード/セレクションと tmux のセレクションを効果的に統合します:
set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
 
   
  +
# Emacs style
This tricks the terminal emulator into thinking Tmux is a full screen application like pico or mutt[http://superuser.com/questions/310251/use-terminal-scrollbar-with-tmux], which will make the scrollback be recorded properly. Beware however, it will get a bit messed up when switching between windows/panes. Consider using Tmux's native scrollback instead.
 
  +
bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
  +
bind-key C-y run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
   
  +
# Vim style
=== Fix reverse-video/italic mode in urxvt ===
 
  +
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
If your reverse-video and italic modes are reversed, you may follow these instructions. This happens for example in vim when italics are replaced by highlighting, or in less when the search highlighting is replaced by italics. This is because the screen terminfo doesn't define italics, and the italics escape of urxvt happens to be the standout escape defined in the terminfo. In this solution, you may replace {{ic|1=screen_terminfo="screen"}} by {{ic|1=screen_terminfo="screen-256color"}}.
 
  +
bind-key p run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
   
  +
{{pkg|xclip}} を使うことも可能です。xsel と違って現在のロケールに適合しない生のビットストリームの出力も上手く処理されます。ただし、tmux のバッファを読み込んだ後に xclip は標準出力を閉じないため、{{ic|xclip}} ではなく {{ic|xsel}} を使う方が簡単です。xclip では tmux からコピー作業の完了を知ることができないため、xclip が終了するまで待機することになり、tmux が反応しなくなってしまいます。以下のように {{ic|xclip}} の {{ic|STDOUT}} を {{ic|/dev/null}} にリダイレクトすれば解決します:
mkdir $HOME/.terminfo/
 
screen_terminfo="screen"
 
   
  +
# Vim style
Create a new terminfo adding the italic escape code:
 
  +
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null"
 
  +
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"
infocmp "$screen_terminfo" | sed \
 
-e 's/^screen[^|]*|[^,]*,/screen-it|screen with italics support,/' \
 
-e 's/%?%p1%t;3%/%?%p1%t;7%/' \
 
-e 's/smso=[^,]*,/smso=\\E[7m,/' \
 
-e 's/rmso=[^,]*,/rmso=\\E[27m,/' \
 
-e '$s/$/ sitm=\\E[3m, ritm=\\E[23m,/' > /tmp/screen.terminfo
 
 
Compile this terminfo:
 
 
tic /tmp/screen.terminfo
 
 
Then, you must add the following line in your tmux.conf. If you already defined {{ic|1=default-terminal}}, just replace it.
 
 
set -g default-terminal "screen-it"
 
 
The source of this solution can be found at [http://tmux.svn.sourceforge.net/viewvc/tmux/trunk/FAQ], in the section entitled "vim displays reverse video instead of italics, while less displays italics (or just regular text) instead of reverse. What's wrong?".
 
 
=== Shift+F6 が Midnight Commander で動作しない ===
 
 
If the {{ic|Shift+F6}} key combination is not working with either {{ic|1=TERM=screen}} or {{ic|1=TERM=screen-256color}}, then from inside tmux, run this command:
 
infocmp > screen (or screen-256color)
 
 
Open the file in a text editor, and add the following to the bottom of that file:
 
kf16=\E[29~,
 
 
Then compile the file with {{ic|tic}}. The keys should be working now.
 
 
=== tmux が実行できない - 1;2c と表示して終了する ===
 
You run {{ic|tmux}} as ''normal'' user and it immediately exits and print to terminal {{ic|1;2c}}. It happens because {{ic|tmux}} can't create pseudo-terminal file in /dev/pts. You should ensure your user file creation mode on {{ic|/dev/pts}} filesystem in {{ic|/etc/fstab}}. It should be set to 620.
 
{{hc|/etc/fstab|<nowiki>
 
# <file system> <dir> <type> <options> <dump> <pass>
 
devpts /dev/pts devpts gid=5,mode=620 0 0
 
</nowiki>}}
 
 
== ICCCM selection integration ==
 
 
{{Tip|The tmux plugin [https://github.com/tmux-plugins/tmux-yank tmux-yank] provides similar functionality.}}
 
 
It is possible to copy a tmux paste buffer to an [[Wikipedia:Inter-Client_Communication_Conventions_Manual|ICCCM]] selection, and vice-versa, by defining a shell command which interfaces tmux with an X11 selection interface. The following tmux config file snippet effectively integrates {{Ic|CLIPBOARD}} with the current tmux paste buffer using the program {{Pkg|xclip}}:
 
 
{{hc|~/.tmux.conf|
 
...
 
##CLIPBOARD selection integration
 
##Requires prefix key before the command key
 
#Copy tmux paste buffer to CLIPBOARD
 
bind C-c run "tmux save-buffer - <nowiki>|</nowiki> xclip -i -selection clipboard"
 
#Copy CLIPBOARD to tmux paste buffer and paste tmux paste buffer
 
bind C-v run "tmux set-buffer -- \"$(xclip -o -selection clipboard)\"; tmux paste-buffer"
 
}}
 
 
Alternatively you can use the program {{ic|xsel}}, provided by {{Pkg|xorg-xsel}}:
 
 
{{hc|~/.tmux.conf|
 
...
 
##CLIPBOARD selection integration
 
##Requires prefix key before the command key
 
#Copy tmux paste buffer to CLIPBOARD
 
bind C-c run "tmux show-buffer <nowiki>|</nowiki> xsel -i -b"
 
#Copy CLIPBOARD to tmux paste buffer and paste tmux paste buffer
 
bind C-v run "tmux set-buffer -- \"$(xsel -o -b)\"; tmux paste-buffer"
 
}}
 
 
It seems <code>xclip</code> does not close <code>STDOUT</code> after it has read from <code>tmux</code>'s buffer. As such, <code>tmux</code> doesn't know that the copy task has completed, and continues to /await <code>xclip</code>'s termination, thereby rendering the window manager unresponsive. To work around this, you can execute the command via <code>run-shell -b</code> instead of <code>run</code>, you can redirect <code>STDOUT</code> of <code>xclip</code> to <code>/dev/null</code>, or you can use an alternative command like <code>xsel</code>.
 
   
 
=== Urxvt の中クリック ===
 
=== Urxvt の中クリック ===
   
  +
{{Note|以下の設定を使うにはマウスのサポートを有効にする必要があります。}}
{{Note|To use this, you need to enable mouse support}}
 
   
  +
中マウスのクリックによって tmux で urxvt のコピーアンドペーストを有効にする非公式の perl 拡張が存在します (公式の [https://github.com/tmux/tmux/wiki/FAQ FAQ] に記載があります [https://github.com/tmux/tmux/wiki/FAQ#how-do-i-copy-a-selection-from-tmux-to-the-systems-clipboard])。
There is an unofficial perl extension (mentioned in the official [http://sourceforge.net/p/tmux/tmux-code/ci/master/tree/FAQ FAQ]) to enable copying/pasting in and out of urxvt with tmux via Middle Mouse Clicking.
 
   
  +
まず、perl スクリプトをダウンロードして urxvts の perl ライブラリに配置してください:
First, you will need to download the perl script and place it into urxvts perl lib:
 
   
 
{{bc|wget http://anti.teamidiot.de/static/nei/*/Code/urxvt/osc-xterm-clipboard
 
{{bc|wget http://anti.teamidiot.de/static/nei/*/Code/urxvt/osc-xterm-clipboard
243行目: 214行目:
 
}}
 
}}
   
  +
また、{{ic|.Xdefaults}} で perl スクリプトを有効にする必要があります:
You will also need to enable that perl script in your .Xdefaults:
 
   
 
{{hc|~/.Xdefaults|
 
{{hc|~/.Xdefaults|
251行目: 222行目:
 
}}
 
}}
   
  +
次に、tmux に新しい関数を指定してマウスのサポートを有効にします:
Next, you want to tell tmux about the new function and enable mouse support (if you haven't already). The third option is optional, to enable scrolling and selecting inside panes with your mouse:
 
   
 
{{hc|~/.tmux.conf|
 
{{hc|~/.tmux.conf|
 
...
 
...
 
set-option -ga terminal-override ',rxvt-uni*:XT:Ms<nowiki>=</nowiki>\E]52;%p1%s;%p2%s\007'
 
set-option -ga terminal-override ',rxvt-uni*:XT:Ms<nowiki>=</nowiki>\E]52;%p1%s;%p2%s\007'
set-window-option -g mode-mouse on
+
set -g mouse on
set-option -g mouse-select-pane on
 
 
...
 
...
 
}}
 
}}
   
  +
新しい中クリック機能を試すには全ての tmux インスタンスを終了してください。
That's it. Be sure to end all instances of tmux before trying the new MiddleClick functionality.
 
   
  +
tmux の中では Shift+中マウスクリックを使うことでクリップボードのセレクションが貼り付けられます。中マウスのクリックだけの場合、tmux のバッファが貼り付けられます。
While in tmux, Shift+MiddleMouseClick will paste the clipboard selection while just MiddleMouseClick will paste your tmux buffer.
 
Outside of tmux, just use MiddleMouseClick to paste your tmux buffer and your standard Ctrl-c to copy.
 
   
  +
== ヒントとテクニック ==
== Tips and tricks ==
 
 
=== デフォルトのセッションレイアウトで tmux を起動 ===
 
=== デフォルトのセッションレイアウトで tmux を起動 ===
  +
tmuxinator や [[tmuxp]] などのセッションマネージャを使うことで共通のセッション設定を簡単に管理できます。
To setup your default Tmux session layout, you install {{AUR|tmuxinator}} from [[AUR]]. Test your installation with
 
  +
  +
tmuxinator の場合、{{AUR|tmuxinator}} パッケージをインストールします。次のコマンドでインストールをテストできます:
   
 
tmuxinator doctor
 
tmuxinator doctor
   
  +
==== デフォルトのレイアウト値を取得 ====
==== Get the default layout values ====
 
  +
Tmux を通常通りに起動してウィンドウとペインのレイアウトを好きなように設定してください。設定が完了したら、以下のコマンドを実行することで現在のレイアウト値を取得できます (Tmux セッションの中から実行してください):
Start Tmux as usual and configure your windows and panes layout as you like. When finished, get the current layout values by executing (while you are still within the current Tmux session)
 
   
 
tmux list-windows
 
tmux list-windows
   
  +
3つのペインと2つのペインの2つのウィンドウからなるレイアウトの場合、出力は以下のようになります:
The output may look like this (two windows with 3 panes and 2 panes layout)
 
   
 
0: default* (3 panes) [274x83] [layout 20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]}] @2 (active)
 
0: default* (3 panes) [274x83] [layout 20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]}] @2 (active)
 
1: remote- (2 panes) [274x83] [layout e3d3,274x83,0,0[274x41,0,0,4,274x41,0,42,7]] @3
 
1: remote- (2 panes) [274x83] [layout e3d3,274x83,0,0[274x41,0,0,4,274x41,0,42,7]] @3
   
The Interesting part you need to copy for later use begins after '''[layout...''' and excludes '''... ] @2 (active)'''. For the first window layout you need to copy e.g. '''20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]}'''
+
コピーする必要があるのは '''[layout...''' の後から '''... ] @2 (active)''' を除いた部分です。1番目のウィンドウレイアウトであれば '''20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]}''' をコピーします。
   
 
==== デフォルトの tmux レイアウトを定義する ====
 
==== デフォルトの tmux レイアウトを定義する ====
   
  +
レイアウト値がわかったら現在の tmux セッションを終了してください。その後、Tmuxinator の設定ファイルを編集して Tmux のデフォルトセッションレイアウトを作成します (以下の例をそのままコピーするのではなく、上のセクションで確認したレイアウト値を使ってください):
Knowing this, you can exit the current tmux session. Following this, you create your default Tmux session layout by editing Tmuxinator's config file (Don't copy the example, get your layout values as described above)
 
   
 
{{hc|~/.tmuxinator/default.yml|<nowiki>
 
{{hc|~/.tmuxinator/default.yml|<nowiki>
305行目: 276行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
例では2つのウィンドウを "default" と "remote" として定義しています。適当なレイアウト値を決めてください。各ペインに対して最低でも1行は {{ic|-}} を使う必要があります。1番目のウィンドウペインでは、1番目のペインでコマンドライン "clear" を、2番目のペインで "vim" を、3番目のペインで "clear && emacs -nw" を実行します。2番目のウィンドウレイアウトには何も起動コマンドを定義していません。
The example defines two windows named "default" and "remote". With your determined layout values. For each pane you have to use at least one {{ic|-}} line. Within the first window panes you start the commandline "clear" in pane one, "vim" in pane two and "clear && emacs -nw" executes two commands in pane three on each Tmux start. The second window layout has two panes without defining any start commmands.
 
   
  +
新しいデフォルトレイアウトをテストするには:
Test the new default layout with (yes, it is "mux"):
 
   
 
mux default
 
mux default
313行目: 284行目:
 
==== デフォルトの tmux レイアウトで tmux を自動起動 ====
 
==== デフォルトの tmux レイアウトで tmux を自動起動 ====
   
  +
デフォルトの Tmux セッションレイアウトでターミナルセッションを起動したい場合、以下を編集してください:
If you like to start your terminal session with your default Tmux session layout edit
 
 
{{hc|~/.bashrc|<nowiki>
 
{{hc|~/.bashrc|<nowiki>
 
if [ -z "$TMUX" ]; then
 
if [ -z "$TMUX" ]; then
319行目: 290行目:
 
fi
 
fi
 
</nowiki>}}
 
</nowiki>}}
  +
  +
==== デフォルトセッションの代替アプローチ ====
  +
上記の方法を使用する代わりに、実行時にデフォルトのセッションを作成してそれにアタッチする bash スクリプトを作成します。
  +
次に、端末から実行して、その端末で事前に設計された構成を取得できます。
  +
  +
#!/bin/bash
  +
tmux new-session -d -n WindowName Command
  +
tmux new-window -n NewWindowName
  +
tmux split-window -v
  +
tmux selectp -t 1
  +
tmux split-window -h
  +
tmux selectw -t 1
  +
tmux -2 attach-session -d
   
 
=== urxvt で tmux を起動 ===
 
=== urxvt で tmux を起動 ===
  +
以下のコマンドで urxvt を起動することで tmux セッションも起動します。{{ic|.ratpoisonrc}} ファイルの exec コマンドなどから使うことができます。
Use this command to start urxvt with a started tmux session. I use this with the exec command from my .ratpoisonrc file.
 
 
{{bc|<nowiki>urxvt -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"</nowiki>}}
 
{{bc|<nowiki>urxvt -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"</nowiki>}}
   
=== シェルのログイン時に tmux を起動 ===
+
=== すべてのシェルのログイン時に tmux を起動 ===
   
  +
if [ -x "$(command -v tmux)" ] && [ -n "${DISPLAY}" ] && [ -z "${TMUX}" ]; then
Simply add the following line of bash code to your .bashrc before your aliases; the code for other shells is very similar:
 
  +
tmux attach || tmux >/dev/null 2>&1
  +
fi
   
  +
上記のスニペットは以下のことを行います:
{{hc|~/.bashrc|<nowiki>
 
# If not running interactively, do not do anything
 
[[ $- != *i* ]] && return
 
[[ -z "$TMUX" ]] && exec tmux
 
</nowiki>}}
 
   
  +
# tmux が実行可能であることを確認する。
{{note|This snippet ensures that tmux is not launched inside of itself (something tmux usually already checks for anyway). tmux sets $TMUX to the socket it is using whenever it runs, so if $TMUX isn't set or is length 0, we know we aren't already running tmux.}}
 
  +
# グラフィカルセッションが実行中であることを確認する (tmux をログインシェル内で起動したい場合は'''この条件式を削除してください'''。ただし、[[Xinit#ログイン時に X を自動起動|ログイン時の X の自動起動]]と干渉するかもしれません)。
  +
# まだ tmux セッション内にいないことを確認する。
  +
# これらの条件を満たす場合、アタッチする。アタッチに失敗した場合、新しいセッションを起動する。
   
  +
[[#systemd で自動起動|systemd を使用してユーザとしてセッションを維持している]]場合、if ブロック内のコマンドを以下のコマンドで置き換えることができます。このコマンドは、維持されているセッションにアタッチし、その他の接続済みクライアントをデタッチします:
Add the following snippet to start only one session(unless you start some manually), on login, try attach at first, only create a session if no tmux is running.
 
 
{{bc|<nowiki>
 
# TMUX
 
if which tmux >/dev/null 2>&1; then
 
#if not inside a tmux session, and if no session is started, start a new session
 
test -z "$TMUX" && (tmux attach || tmux new-session)
 
fi
 
</nowiki>}}
 
   
  +
if ! systemctl --user is-active --quiet tmux.service; then
The following snippet does the same thing, but also checks tmux is installed before trying to launch it. It also tries to reattach you to an existing tmux session at logout, so that you can shut down every tmux session quickly from the same terminal at logout.
 
  +
systemctl --user start tmux.service
{{bc|<nowiki>
 
  +
fi
# TMUX
 
if which tmux >/dev/null 2>&1; then
+
exec tmux attach-session -d -t "${USER}" >/dev/null 2>&1
# if no session is started, start a new session
 
test -z ${TMUX} && tmux
 
   
  +
=== 非ログインシェルを起動する ===
# when quitting tmux, try to attach
 
while test -z ${TMUX}; do
 
tmux attach || break
 
done
 
fi
 
</nowiki>}}
 
   
  +
Tmux は [http://comments.gmane.org/gmane.comp.terminal-emulators.tmux.user/5997 デフォルト] で [https://unix.stackexchange.com/questions/38175 ログインシェル] を起動するようになっていますが、これは複数の副作用があります:
Another possibility is to try to attach to existing deattached session or start a new session:
 
  +
* [[fortune]] を使っている場合、新しいパネルを作成するたびに引用句が表示されることがあります。
  +
* 新しいパネルを作成するたびに {{ic|~/.profile}} などのログインシェルの設定ファイルが解釈されるため、セッションの初期化時に実行するようにしていたコマンド (例: オーディオレベルの設定) が実行されてしまいます。
   
  +
この挙動を無効化するには、以下を {{ic|~/.tmux.conf}} に追加してください:
{{bc|<nowiki>
 
if [[ -z "$TMUX" ]] ;then
 
ID="`tmux ls | grep -vm1 attached | cut -d: -f1`" # get the id of a deattached session
 
if [[ -z "$ID" ]] ;then # if not available create a new one
 
tmux new-session
 
else
 
tmux attach-session -t "$ID" # if available attach to it
 
fi
 
fi
 
</nowiki>}}
 
 
{{note|Instead of using the bashrc file, you can launch tmux when you start your terminal emulator. (i. e. urxvt -e tmux)}}
 
 
=== Start a non-login shell ===
 
 
Users of [[Wikipedia:fortune (Unix)|fortune]] may notice quotes are printed when creating a new panel. This is because tmux starts a login shell [http://comments.gmane.org/gmane.comp.terminal-emulators.tmux.user/5997] [http://unix.stackexchange.com/questions/38175] by default.
 
 
To disable this behaviour, add to {{ic|~/.tmux.conf}}:
 
   
 
set -g default-command "${SHELL}"
 
set -g default-command "${SHELL}"
385行目: 340行目:
 
=== tmux のウィンドウをタブのように使う ===
 
=== tmux のウィンドウをタブのように使う ===
   
  +
以下の設定を {{ic|~/.tmux.conf}} に追加することで tmux のウィンドウをタブのように使うことができます ([[rxvt-unicode/ヒントとテクニック#urxvtq とタブ|urxvt のタブ拡張]]を参照)。仮想タブはターミナルエミュレータから独立しているという利点があります。
The following settings added to {{ic|~/.tmux.conf}} allow to use tmux windows like tabs, such as those provided by the reference of these hotkeys — [[rxvt-unicode#urxvtq_with_tabbing|urxvt's tabbing extensions]]. An advantage thereof is that these virtual “tabs” are independent of the terminal emulator.
 
   
 
#urxvt tab like window switching (-n: no prior escape seq)
 
#urxvt tab like window switching (-n: no prior escape seq)
394行目: 349行目:
 
bind -n C-right swap-window -t +1
 
bind -n C-right swap-window -t +1
   
  +
もちろん、ターミナルなど他のアプリケーションのホットキーと重複させてはいけません。そのような場合、ターミナルのタブ機能を無効化して置き換えるほうが良いでしょう。
Of course, those should not overlap with other applications' hotkeys, such as the terminal's. Given that they substitute terminal tabbing that might as well be deactivated, though.
 
   
It can also come handy to supplement the EOT hotkey {{ic|Ctrl+d}} with one for tmux's detach:
+
tmux detach EOT ホットキー {{ic|Ctrl+d}} を補完するのも便利です:
   
 
bind-key -n C-j detach
 
bind-key -n C-j detach
   
  +
=== 様々なウィンドウのセッションを同時に操作するクライアント ===
=== Clients simultaneously interacting with various windows of a session ===
 
   
In [http://mutelight.org/articles/practical-tmux Practical Tmux], Brandur Leach writes:
+
[http://mutelight.org/articles/practical-tmux Practical Tmux] で、Brandur Leach は以下のように書いています:
   
  +
: 複数のクライアントを一つのセッションにアタッチする際、Screen と tmux の挙動は少々異なっています。Screen では、各クライアントがセッションに接続され、セッションの中で別々のウィンドウが表示されます。tmux では、一つのセッションに接続された全てのクライアントが同じウィンドウを表示します。
: Screen and tmux's behaviour for when multiple clients are attached to one session differs slightly. In Screen, each client can be connected to the session but view different windows within it, but in tmux, all clients connected to one session must view the same window.
 
  +
: この問題は tmux の中でセッションを2つ生成して2番目のセッションを1番目のセッションのウィンドウに同期してから、2番目の新しいセッションを1番目のセッションに指定することで解決します。
: This problem can be solved in tmux by spawning two separate sessions and synchronizing the second one to the windows of the first, then pointing a second new session to the first.
 
   
  +
以下の “{{Ic|tmx}}” スクリプトは上記を実装しています — 2番目のパラメータが “1” の場合は “{{Ic|tmux new-window}}” を実行するように修正を加えています。{{Ic|tmx <base session name> [1]}} として呼び出すことで必要に応じてベースセッションが起動します。それ以外の場合は新しい “client” セッションはベースに接続され、任意で新しいウィンドウを追加してアタッチします。“zombie” になったときは終了するように設定します。
The script “{{Ic|tmx}}” below implements this — the version here is slightly modified to execute “{{Ic|tmux new-window}}” if “1” is its second parameter. Invoked as {{Ic|tmx <base session name> [1]}} it launches the base session if necessary. Otherwise a new “client” session linked to the base, optionally add a new window and attach, setting it to kill itself once it turns “zombie”.
 
   
 
{{hc|tmx|2=<nowiki>
 
{{hc|tmx|2=<nowiki>
414行目: 369行目:
 
#
 
#
 
# Modified TMUX start script from:
 
# Modified TMUX start script from:
# http://forums.gentoo.org/viewtopic-t-836006-start-0.html
+
# https://forums.gentoo.org/viewtopic-t-836006-start-0.html
 
#
 
#
 
# Store it to `~/bin/tmx` and issue `chmod +x`.
 
# Store it to `~/bin/tmx` and issue `chmod +x`.
444行目: 399行目:
 
if [[ -z "$TMUX" ]]; then
 
if [[ -z "$TMUX" ]]; then
 
echo "Launching copy of base session $base_session ..."
 
echo "Launching copy of base session $base_session ..."
# Session is is date and time to prevent conflict
+
# Session id is date and time to prevent conflict
 
session_id=`date +%Y%m%d%H%M%S`
 
session_id=`date +%Y%m%d%H%M%S`
 
# Create a new session (without attaching it) and link to base session
 
# Create a new session (without attaching it) and link to base session
459行目: 414行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
{{ic|~/.tmux.conf}} に以下の設定を追加すると便利です:
A useful setting for this is
 
   
 
setw -g aggressive-resize on
 
setw -g aggressive-resize on
   
  +
セッション全体に接続されている一番小さいクライアントではなく、表示している一番小さいクライアントにあわせてウィンドウのサイズが変更されるようになります。
added to {{ic|~/.tmux.conf}}. It causes tmux to resize a window based on the smallest client actually viewing it, not on the smallest one attached to the entire session.
 
   
  +
~/.bashrc に以下を追加する方法もあります [http://comments.gmane.org/gmane.comp.terminal-emulators.tmux.user/2632]:
An alternative taken from [http://sourceforge.net/mailarchive/forum.php?thread_name=CAPBqLKEC0MAFR%2BWUYqCuyd%3DKB47HK8CFSuAf%3Dd%3DW2H3F4fpMZw%40mail.gmail.com&forum_name=tmux-users] is to put the following ~/.bashrc:
 
   
 
{{hc|.bashrc|2=<nowiki>
 
{{hc|.bashrc|2=<nowiki>
479行目: 434行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
著者より:
Citing the author:
 
   
 
: "mksc foo" creates a always detached permanent client named "foo". It also calls "rsc foo" to create a client to newly created session. "rsc foo" creates a new client grouped by "foo" name. It has destroy-unattached turned on so when I leave it, it kills client.
 
: "mksc foo" creates a always detached permanent client named "foo". It also calls "rsc foo" to create a client to newly created session. "rsc foo" creates a new client grouped by "foo" name. It has destroy-unattached turned on so when I leave it, it kills client.
 
: Therefore, when my computer looses network connectivity, all "foo.something" clients are killed while "foo" remains. I can then call "rsc foo" to continue work from where I stopped.
 
: Therefore, when my computer looses network connectivity, all "foo.something" clients are killed while "foo" remains. I can then call "rsc foo" to continue work from where I stopped.
   
  +
=== ターミナルタイプにあわせて TERM 変数を修正する ===
=== Changing the configuration with tmux started ===
 
  +
[[#適切なターミナルの設定|tmux で TERM 変数を固定で設定]]する代わりに、ターミナルエミュレータのタイプにあわせて適切な TERM ({{ic|screen}} または {{ic|screen-256color}}) を設定することができます:
   
  +
{{hc|~/.tmux.conf|
By default tmux reads {{ic|~/.tmux.conf}} only if it was not already running. To have tmux load a configuration file afterwards, execute:
 
  +
## set the default TERM
  +
set -g default-terminal screen
  +
  +
## update the TERM variable of terminal emulator when creating a new session or attaching a existing session
  +
set -g update-environment 'DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY TERM'
  +
## determine if we should enable 256-colour support
  +
if "[[ ${TERM} =~ 256color || ${TERM} == fbterm ]]" 'set -g default-terminal screen-256color'
  +
}}
  +
  +
{{hc|1=~/.zshrc|2=
  +
## workaround for handling TERM variable in multiple tmux sessions properly from https://sourceforge.net/p/tmux/mailman/message/32751663/ by Nicholas Marriott
  +
if [[ -n ${TMUX} && -n ${commands[tmux]} ]];then
  +
case $(tmux showenv TERM 2>/dev/null) in
  +
*256color) ;&
  +
TERM=fbterm)
  +
TERM=screen-256color ;;
  +
*)
  +
TERM=screen
  +
esac
  +
fi
  +
}}
  +
  +
=== tmux を再起動せずに変更した設定を適用する ===
  +
  +
デフォルトでは tmux は起動時にしか {{ic|~/.tmux.conf}} を読み込みません。起動した後に設定ファイルを tmux に読み込ませるには、次を実行:
   
 
tmux source-file <path>
 
tmux source-file <path>
   
This can be added to {{ic|~/.tmux.conf}} as e. g.:
+
{{ic|~/.tmux.conf}} に以下のように追加することもできます:
   
 
bind r source-file <path>
 
bind r source-file <path>
   
  +
^: を実行してから以下を入力する方法もあります:
You can also do ^: and type :
 
 
source .tmux.conf
 
source .tmux.conf
   
  +
===既存のセッションに新しいセッションがアタッチされるたびにプログラムを実行するテンプレートスクリプト===
===Template script to run program in new session resp. attach to existing one===
 
   
  +
以下のスクリプトはプログラムが以前に実行されたかどうかチェックします。見つからなかった場合、新しい tmux セッションを作成してからウィンドウにアタッチしてプログラムを実行します。プログラムが見つかった場合はセッションにアタッチしてウィンドウを選択だけします:
This script checks for a program presumed to have been started by a previous run of itself. Unless found it creates a new tmux session and attaches to a window named after and running the program. If however the program was found it merely attaches to the session and selects the window.
 
   
 
#!/bin/bash
 
#!/bin/bash
513行目: 494行目:
 
exit 0
 
exit 0
   
  +
''nicklist'' プラグインを使って ''irssi'' を実行する派生版は [[Irssi#tmux で irssi と nicklist|irssi の ArchWiki ページ]]にあります。
A derived version to run ''irssi'' with the ''nicklist'' plugin can be found on [[Irssi#irssi_with_nicklist_in_tmux|its ArchWiki page]].
 
   
 
=== ターミナルエミュレータのウィンドウタイトル ===
 
=== ターミナルエミュレータのウィンドウタイトル ===
  +
tmux ウィンドウで SSH 接続を行うと、ターミナルエミュレータのウィンドウタイトルが {{ic|user@localhost}} のままで {{ic|user@server}} にならないことに気づくかもしれません。タイトルバーを接続先のホストにあわせて変えられるようにするには、{{ic|~/.tmux.conf}} に以下を設定します:
If you SSH into a host in a tmux window, you'll notice the window title of your terminal emulator remains to be {{ic|user@localhost}} rather than {{ic|user@server}}. To allow the title bar to adapt to whatever host you connect to, set the following in {{ic|~/.tmux.conf}}
 
   
 
set -g set-titles on
 
set -g set-titles on
 
set -g set-titles-string "#T"
 
set -g set-titles-string "#T"
   
For {{ic|set-titles-string}}, {{ic|#T}} will display {{ic|user@host:~}} and change accordingly as you connect to different hosts. You can also set many more options here.
+
{{ic|set-titles-string}} {{ic|#T}} {{ic|user@host:~}} を表示して、接続したホストによって表示が変わります。
   
 
=== 自動レイアウト ===
 
=== 自動レイアウト ===
  +
新しい分割を作成したり古い分割を解除する際に、現在選択されているレイアウトは適用されません。修正するには、以下のバインドを追加することで新しい、あるいは既存のペインに現在選択中のレイアウトが適用されるようになります:
When creating new splits or destroying older ones the currently selected layout isn't applied. To fix that, add following binds which will apply the currently selected layout to new or remaining panes:
 
   
 
bind-key -n M-c kill-pane \; select-layout
 
bind-key -n M-c kill-pane \; select-layout
 
bind-key -n M-n split-window \; select-layout
 
bind-key -n M-n split-window \; select-layout
  +
  +
=== Vim の colorscheme がロードされない ===
  +
  +
vim の colorscheme が tmux に読み込まれていない場合は、以下を参照してください: [https://stackoverflow.com/a/47994805/1766555] [https://github.com/vim/vim/issues/993#issuecomment-255651605]
   
 
=== Vim フレンドリな設定 ===
 
=== Vim フレンドリな設定 ===
   
[[vim|vim]] ユーザーに使いやすい設定は [https://gist.github.com/anonymous/6bebae3eb9f7b972e6f0] を見て下さい。
+
[[vim]] ユーザーに使いやすい設定は [https://gist.github.com/anonymous/6bebae3eb9f7b972e6f0] を見て下さい。
  +
  +
tmux 2.4 では、以下の部分を:
  +
bind -t vi-copy 'v' begin-selection
  +
bind -t vi-copy 'y' copy-selection
  +
bind -t vi-copy 'Space' halfpage-down
  +
bind -t vi-copy 'Bspace' halfpage-up
  +
  +
以下のように変更してください:
  +
bind-key -T copy-mode-vi 'v' send -X begin-selection
  +
bind-key -T copy-mode-vi 'y' send -X copy-selection
  +
bind-key -T copy-mode-vi 'Space' send -X halfpage-down
  +
bind-key -T copy-mode-vi 'Bspace' send -X halfpage-up
  +
  +
=== フレンドリーなペイン分割 ===
  +
  +
ペインを垂直方向に分割するためのデフォルトのキーバインドは {{ic|Ctrl}} + {{ic|b}}} {{ic|%}} であり、ペインを水平方向に分割するためのデフォルトのキーバインドは {{ic|Ctrl}} + {{ic|b}} {{ic|"}} キーボードのレイアウトによっては入力が難しく、覚えにくい場合もあります。
  +
  +
よりわかりやすいキーバインディングは、水平方向に分割する場合は {{ic|Ctrl}} + {{ic|b}} {{ic|h}} を使用し、ペインを垂直方向に分割する場合は {{ic|Ctrl}} + {{ic|b}} {{ic|v}} を使用することです。これは覚えておくと非常に便利です。
  +
  +
この変更を行うには、 {{ic|~/.tmux.conf}}に次の行を追加します。
  +
  +
=== システムの停止を禁止 ===
  +
  +
ホストがスリープ状態になると別のデバイスから接続したときに tmux がハングする場合は、セッションのシェルコマンドを禁止してロックします。
  +
  +
tmux new-session -A "systemd-inhibit --what=idle $SHELL"
  +
  +
== トラブルシューティング ==
  +
  +
=== スクロールの問題 ===
  +
ターミナルで Shift-Page Up/Down を使ってスクロールができない場合、以下の設定で {{ic|xterm}} から識別子が始まるターミナルで smcup と rmcup の機能を削除できます:
  +
  +
set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
  +
  +
上記の設定を使うとターミナルエミュレータは tmux のことを [[pico]] や [[mutt]] と同じようなフルスクリーンのアプリケーションと認識するようになり [https://superuser.com/questions/310251/use-terminal-scrollbar-with-tmux]、スクロールバックが正しく記録されるようになります。ただし、ウィンドウやペインを切り替えたときに多少表示が崩れるかもしれません。Tmux のネイティブのスクロールバックを使うことを推奨します。
  +
  +
=== マウスのスクロール ===
  +
  +
{{Note|以下の設定はセレクションバッファのコピー・ペーストと干渉します。セレクションバッファからコピー・ペーストするときは shift キーを押してください。}}
  +
  +
マウスホイールでスクロールしたい場合、{{ic|.tmux.conf}} で mode-mouse をオンにして下さい:
  +
set -g mouse on
  +
  +
スクロール履歴を設定するには:
  +
set -g history-limit 30000
  +
  +
tmux 2.1 からは、マウスホイールでスクロールするには {{ic|~/.tmux.conf}} に以下のどちらかあるいは両方を追加してみてください:
  +
bind -T root WheelUpPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M"
  +
bind -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M"
  +
  +
上記の設定では一行ずつしかスクロールしませんが、以下を追加することでページ単位でスクロールすることができます:
  +
bind -t vi-copy WheelUpPane page-up
  +
bind -t vi-copy WheelDownPane page-down
  +
bind -t emacs-copy WheelUpPane page-up
  +
bind -t emacs-copy WheelDownPane page-down
  +
  +
=== UTF-8 のマウスイベントをターミナルエミュレータがサポートしていない ===
  +
  +
ターミナルエミュレータが UTF-8 のマウスイベントに対応していない場合、tmux の {{ic|mouse on}} オプションを設定しても、ターミナルウィンドウの中で左クリックすると {{ic|[M#}} や {{ic|[Ma}} などの文字列がプロンプトに貼り付けられてしまいます。
  +
  +
この問題を解決するには以下を設定:
  +
  +
set -g mouse-utf8 off
  +
  +
=== Shift+F6 が Midnight Commander で動作しない ===
  +
  +
[[Midnight Commander#ショートカットが機能しない]]を参照してください。
   
 
== 参照 ==
 
== 参照 ==
   
* [https://bbs.archlinux.org/viewtopic.php?id=84157&p=1 BBS topic]
+
* [https://bbs.archlinux.org/viewtopic.php?id=84157&p=1 フォーラムスレッド]
* [http://www.dayid.org/os/notes/tm.html Screen and tmux feature comparison]
+
* [http://www.dayid.org/os/notes/tm.html Screen tmux の機能比較]
* [https://github.com/Lokaltog/powerline powerline], a dynamic statusbar for tmux
+
* [https://github.com/Lokaltog/powerline powerline] - tmux で使えるダイナミックステータスバー
* [https://github.com/tmux-plugins Plugins for tmux]
+
* [https://github.com/tmux-plugins tmux のプラグイン]
  +
* [https://github.com/gpakosz/.tmux Oh My Tmux!]
   
 
'''チュートリアル'''
 
'''チュートリアル'''
   
 
* [http://mutelight.org/articles/practical-tmux Practical Tmux]
 
* [http://mutelight.org/articles/practical-tmux Practical Tmux]
* [http://www.openbsd.org/faq/faq7.html#tmux Tmux FAQ (OpenBSD)]
+
* [http://www.openbsd.org/cgi-bin/man.cgi?query=tmux man ページ (OpenBSD)]
  +
* [http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer/ Tmux チュートリアル Part 1] と [http://blog.hawkhost.com/2010/07/02/tmux-%E2%80%93-the-terminal-multiplexer-part-2 Part 2]
* [http://www.openbsd.org/cgi-bin/man.cgi?query=tmux man page (OpenBSD)]
 
  +
* [https://leanpub.com/the-tao-of-tmux/read ''The Tao of tmux''] - [https://tmuxp.git-pull.com tmuxp] と [https://libtmux.git-pull.com libtmux] を開発した Tony Narlock による電子書籍
* [http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer/ Tmux tutorial Part 1] and [http://blog.hawkhost.com/2010/07/02/tmux-%E2%80%93-the-terminal-multiplexer-part-2 Part 2]
 

2023年10月29日 (日) 08:24時点における最新版

関連記事

tmux は「ターミナルマルチプレクサ: 一つのスクリーンから別々のプログラムが動作する多数のターミナル (またはウィンドウ) を作成・アクセス・制御することができます。tmux はスクリーンから分離させてバックグラウンドで動作させることができ、後でまた繋ぎ直すことができます。」です。

tmux は GNU Screen の代わりになるものとして ISC ライセンスで配布されています。似ているところもありますが、プログラムには様々な違いが存在します。tmux の FAQ ページ を見て下さい。

目次

インストール

tmux パッケージをインストールしてください。任意で tmux-bash-completion-gitAUR をインストールすることで tmux の bash 補完を使うことができます。

設定

デフォルトでは、tmux はユーザ毎の設定として ~/.tmux.conf を探します。しかし、~/.config/tmux/tmux.conf も使用可能です (このパスはハードコードされていて、$XDG_CONFIG_HOME は無視されます)。グローバルな設定ファイルは /etc/tmux.conf を使用できます。しかし、デフォルトでは Arch のパッケージはこのファイルを同梱していません。

キーバインド

デフォルトでは、コマンドのキーバインドには Ctrl-b が前に付きます。例えば、ウィンドウを縦に分割するには Ctrl-b+% を押します。

ウィンドウを複数のペインに分割した後、ペインのサイズを変更するには、プレフィックスキー (例: Ctrl-b) を押してから、Ctrl を押しながら、Left/Right/Up/Down を押します。ペイン間の移動も同じ方法で行い、矢印キーの代わりに o を使います。

キーバインドは tmux.conf の bind と unbind コマンドで変更することができます。例えばデフォルトのプレフィックスキーである Ctrl-bCtrl-a に変更するには設定ファイルに以下のコマンドを追加します:

unbind C-b
set -g prefix C-a
bind C-a send-prefix
ヒント: 特殊文字はクォートで囲ってプレフィックスとして使ってください。Ctrl の代わりに Alt (Meta) を使うこともできます。例: set -g prefix m-'\'

さらに、ウィンドウ間の移動をする方法には以下のものもあります:

Ctrl-b l (直前に選択されていたウィンドウに移動します)
Ctrl-b w (すべてのウィンドウ、及びウィンドウの番号の一覧を表示します)
Ctrl-b <ウィンドウの番号> (指定された番号のウィンドウに移動する。なお、デフォルトでは 0 - 9 の番号が割り当てられています)
Ctrl-b q  (ペインの番号を表示する。表示された番号を入力すると対応するペインに移動できます)

Tmux にはウィンドウを探す機能とそれへのキー割り当てがあり、多数のウィンドウを容易に行き来することができます:

Ctrl-b f <ウィンドウの名前> (名前でウィンドウを検索する)
Ctrl-b w (ウィンドウの一覧からウィンドウを選択する)

コピーモード

tmux ウィンドウには複数のモードが存在します。デフォルトのモードではウィンドウにアタッチされたターミナルに直接アクセスすることができ、もうひとつのモードはコピーモードです。コピーモードではバッファを移動することができ履歴をスクロールすることが可能です。vi または emacs スタイルのキーバインドが使えます。VISUAL や EDITOR に ‘vi’ が含まれていない場合、デフォルトでは emacs のキーバインドが使われます。

コピーモードに入るには以下を実行:

Ctrl-b [

デフォルトエディタと同じようにバッファを操作することができます。

コピーモードを終了するには、以下のキーバインドのどちらかを使います:

vi モード:

q

emacs モード:

Esc

URL のブラウズ

tmux の中で URL をブラウズするには urlviewAUR をインストールして設定する必要があります。

新しいターミナルの中で:

bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; run-shell "$TERMINAL -e urlview /tmp/tmux-buffer"

新しい tmux ウィンドウの中で (新しいターミナルは不要です):

bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; new-window -n "urlview" '$SHELL -c "urlview < /tmp/tmux-buffer"'

適切なターミナルの設定

256色

256色のターミナルを使っている場合、tmux で適切なターミナル (tmux または tmux-256color) を設定する必要があります。設定ファイルで以下のように設定できます:

tmux.conf
set -g default-terminal "tmux-256color"

また、tmux の表示がおかしくなってしまう場合、.bashrc に以下のエイリアスを追加することで tmux はターミナルが256色をサポートしていると仮定するようになります:

alias tmux="tmux -2"

24ビットカラー

Tmux はバージョン 2.2 から24ビットカラーをサポートしています [1] 使用しているターミナルが24ビットカラーをサポートしている場合 (gist を参照) ターミナルを terminal-overrides 設定に追加してください。例えば、Termite を使っているのであれば以下のように追加します:

set -ga terminal-overrides ",xterm-termite:Tc"

他のターミナルの場合、xterm-termite を適切なターミナルのタイプに置き換えてください ($TERM に保存されています)。Tc の terminfo 拡張について詳しくは tmux(1) ページを見てください。

xterm-keys

tmux.conf で xterm-keys を有効にするには、以下の行を追加してください:

set-option -g xterm-keys on

tmux.conf で xterm-keys を有効にしたら、新しいエスケープコードがアプリケーションから認識されるようにカスタム terminfo を作成して宣言する必要があります。tic で以下のコードをコンパイルして TERM に "xterm-screen-256color" を指定してください:

# A screen- based TERMINFO that declares the escape sequences
# enabled by the tmux config "set-window-option -g xterm-keys".
#
# Prefix the name with xterm- since some applications inspect
# the TERM *name* in addition to the terminal capabilities advertised.
xterm-screen-256color|GNU Screen with 256 colors bce and tmux xterm-keys,

# As of Nov'11, the below keys are picked up by
# .../tmux/blob/master/trunk/xterm-keys.c:
	kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H,
	kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~,
	kRIT=\E[1;2C,

# Change this to screen-256color if the terminal you run tmux in
# doesn't support bce:
	use=screen-256color-bce,

他の設定

スクロールバックバッファを10000行に設定:

set -g history-limit 10000

ターミナルエミュレータの設定を上書き:

set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
set -ga terminal-override ',rxvt-uni*:XT:Ms=\E]52;%p1%s;%p2%s\007'

マウスを切り替える:

bind-key m set-option -g mouse on \; display 'Mouse: ON'
bind-key M set-option -g mouse off \; display 'Mouse: OFF'

systemd で自動起動

起動時に tmux サーバーを立ち上げることには複数の利点が存在します。特に、新しい tmux セッションを起動する場合、既にサービスが動作していれば起動時間が短縮されます。

さらに、tmux セッションのカスタマイズは維持され、たとえログインしなくても tmux セッションを永続化することができます (tmux の設定をスクリプトで管理している場合やユーザーの tmux セッションを共有する場合などに有用です)

以下のサービスは特定のユーザーで tmux を起動します (tmux@username.service で起動と同じ):

/etc/systemd/system/tmux@.service
[Unit]
Description=Start tmux in detached session

[Service]
Type=forking
User=%I
ExecStart=/usr/bin/tmux new-session -s %u -d
ExecStop=/usr/bin/tmux kill-session -t %u

[Install]
WantedBy=multi-user.target
ヒント: WorkingDirectory=custom_path を追加して、作業ディレクトリをカスタマイズできます。 ~ に設定すると、User= で指定されたユーザーのホームディレクトリが使用されます。

または、(User=%I を使わずに) 上記のファイルを systemd/ユーザーディレクトリに配置することもできます、例: ~/.config/systemd/user/tmux.service この方法だと ユーザーインスタンスの自動起動 を有効にしていない場合、ログイン時に tmux サービスが起動します。

セッションの開始

~/.tmux.conf に以下のように記述することでウィンドウがプリロードされた状態で tmux でセッションを開くことができます:

new  -n WindowName Command
neww -n WindowName Command
neww -n WindowName Command

ウィンドウが分割された状態でセッションを起動するには (マルチペイン)、分割したい neww の下に splitw コマンドを追加してください:

new  -s SessionName -n WindowName Command
neww -n foo/bar foo
splitw -v -p 50 -t 0 bar
selectw -t 1 
selectp -t 0

上記の場合、ウィンドウが2つ開いて、2番目のウィンドウは foo/bar という名前で縦に半分に分割されます (50%)。bar の上で foo が実行されます。フォーカスはウィンドウ 2 (foo/bar) のトップペイン (foo) になります。

ノート: .conf で base-index を 1 に指定しないかぎり、セッション・ウィンドウ・ペインの番号は 0 から割り振られます。

複数のセッションを管理したい場合、設定ファイルから別のセッションファイルを読み込んでください:

# initialize sessions
bind F source-file ~/.tmux/foo
bind B source-file ~/.tmux/bar

X クリップボードの統合

ヒント: tmux のプラグイン tmux-yank は同じような機能を提供します。

tmux のセレクションを X クリップボード (や X プライマリ/セカンダリセレクション) にコピーしたり、その逆ができます。以下の tmux 設定ファイルのスニペットは xsel プログラムを使って X クリップボード/セレクションと tmux のセレクションを効果的に統合します:

# Emacs style
bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
bind-key C-y run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
# Vim style
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
bind-key p run "xsel -o | tmux load-buffer - ; tmux paste-buffer"

xclip を使うことも可能です。xsel と違って現在のロケールに適合しない生のビットストリームの出力も上手く処理されます。ただし、tmux のバッファを読み込んだ後に xclip は標準出力を閉じないため、xclip ではなく xsel を使う方が簡単です。xclip では tmux からコピー作業の完了を知ることができないため、xclip が終了するまで待機することになり、tmux が反応しなくなってしまいます。以下のように xclipSTDOUT/dev/null にリダイレクトすれば解決します:

# Vim style
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

Urxvt の中クリック

ノート: 以下の設定を使うにはマウスのサポートを有効にする必要があります。

中マウスのクリックによって tmux で urxvt のコピーアンドペーストを有効にする非公式の perl 拡張が存在します (公式の FAQ に記載があります [2])。

まず、perl スクリプトをダウンロードして urxvts の perl ライブラリに配置してください:

wget http://anti.teamidiot.de/static/nei/*/Code/urxvt/osc-xterm-clipboard
mv osc-xterm-clipboard /usr/lib/urxvt/perl/

また、.Xdefaults で perl スクリプトを有効にする必要があります:

~/.Xdefaults
...
*URxvt.perl-ext-common:		osc-xterm-clipboard
...

次に、tmux に新しい関数を指定してマウスのサポートを有効にします:

~/.tmux.conf
...
set-option -ga terminal-override ',rxvt-uni*:XT:Ms=\E]52;%p1%s;%p2%s\007'
set -g mouse on
...

新しい中クリック機能を試すには全ての tmux インスタンスを終了してください。

tmux の中では Shift+中マウスクリックを使うことでクリップボードのセレクションが貼り付けられます。中マウスのクリックだけの場合、tmux のバッファが貼り付けられます。

ヒントとテクニック

デフォルトのセッションレイアウトで tmux を起動

tmuxinator や tmuxp などのセッションマネージャを使うことで共通のセッション設定を簡単に管理できます。

tmuxinator の場合、tmuxinatorAUR パッケージをインストールします。次のコマンドでインストールをテストできます:

tmuxinator doctor

デフォルトのレイアウト値を取得

Tmux を通常通りに起動してウィンドウとペインのレイアウトを好きなように設定してください。設定が完了したら、以下のコマンドを実行することで現在のレイアウト値を取得できます (Tmux セッションの中から実行してください):

tmux list-windows

3つのペインと2つのペインの2つのウィンドウからなるレイアウトの場合、出力は以下のようになります:

0: default* (3 panes) [274x83] [layout 20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]}] @2 (active)
1: remote- (2 panes) [274x83] [layout e3d3,274x83,0,0[274x41,0,0,4,274x41,0,42,7]] @3                                         

コピーする必要があるのは [layout... の後から ... ] @2 (active) を除いた部分です。1番目のウィンドウレイアウトであれば 20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]} をコピーします。

デフォルトの tmux レイアウトを定義する

レイアウト値がわかったら現在の tmux セッションを終了してください。その後、Tmuxinator の設定ファイルを編集して Tmux のデフォルトセッションレイアウトを作成します (以下の例をそのままコピーするのではなく、上のセクションで確認したレイアウト値を使ってください):

~/.tmuxinator/default.yml
name: default
root: ~/
windows:
  - default:
      layout: 20a0,274x83,0,0{137x83,0,0,3,136x83,138,0[136x41,138,0,5,136x41,138,42,6]}
      panes:
        - clear
        - vim
        - clear && emacs -nw
  - remote:
      layout: 24ab,274x83,0,0{137x83,0,0,3,136x83,138,0,4}
      panes:
        - 
        - 

例では2つのウィンドウを "default" と "remote" として定義しています。適当なレイアウト値を決めてください。各ペインに対して最低でも1行は - を使う必要があります。1番目のウィンドウペインでは、1番目のペインでコマンドライン "clear" を、2番目のペインで "vim" を、3番目のペインで "clear && emacs -nw" を実行します。2番目のウィンドウレイアウトには何も起動コマンドを定義していません。

新しいデフォルトレイアウトをテストするには:

mux default

デフォルトの tmux レイアウトで tmux を自動起動

デフォルトの Tmux セッションレイアウトでターミナルセッションを起動したい場合、以下を編集してください:

~/.bashrc
 if [ -z "$TMUX" ]; then
   mux default          
 fi                     

デフォルトセッションの代替アプローチ

上記の方法を使用する代わりに、実行時にデフォルトのセッションを作成してそれにアタッチする bash スクリプトを作成します。 次に、端末から実行して、その端末で事前に設計された構成を取得できます。

#!/bin/bash
tmux new-session -d -n WindowName Command
tmux new-window -n NewWindowName
tmux split-window -v
tmux selectp -t 1
tmux split-window -h
tmux selectw -t 1
tmux -2 attach-session -d

urxvt で tmux を起動

以下のコマンドで urxvt を起動することで tmux セッションも起動します。.ratpoisonrc ファイルの exec コマンドなどから使うことができます。

urxvt -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"

すべてのシェルのログイン時に tmux を起動

if [ -x "$(command -v tmux)" ] && [ -n "${DISPLAY}" ] && [ -z "${TMUX}" ]; then
    tmux attach || tmux >/dev/null 2>&1
fi

上記のスニペットは以下のことを行います:

  1. tmux が実行可能であることを確認する。
  2. グラフィカルセッションが実行中であることを確認する (tmux をログインシェル内で起動したい場合はこの条件式を削除してください。ただし、ログイン時の X の自動起動と干渉するかもしれません)。
  3. まだ tmux セッション内にいないことを確認する。
  4. これらの条件を満たす場合、アタッチする。アタッチに失敗した場合、新しいセッションを起動する。

systemd を使用してユーザとしてセッションを維持している場合、if ブロック内のコマンドを以下のコマンドで置き換えることができます。このコマンドは、維持されているセッションにアタッチし、その他の接続済みクライアントをデタッチします:

if ! systemctl --user is-active --quiet tmux.service; then
    systemctl --user start tmux.service
fi
exec tmux attach-session -d -t "${USER}" >/dev/null 2>&1

非ログインシェルを起動する

Tmux は デフォルトログインシェル を起動するようになっていますが、これは複数の副作用があります:

  • fortune を使っている場合、新しいパネルを作成するたびに引用句が表示されることがあります。
  • 新しいパネルを作成するたびに ~/.profile などのログインシェルの設定ファイルが解釈されるため、セッションの初期化時に実行するようにしていたコマンド (例: オーディオレベルの設定) が実行されてしまいます。

この挙動を無効化するには、以下を ~/.tmux.conf に追加してください:

set -g default-command "${SHELL}"

tmux のウィンドウをタブのように使う

以下の設定を ~/.tmux.conf に追加することで tmux のウィンドウをタブのように使うことができます (urxvt のタブ拡張を参照)。仮想タブはターミナルエミュレータから独立しているという利点があります。

#urxvt tab like window switching (-n: no prior escape seq)
bind -n S-down new-window
bind -n S-left prev
bind -n S-right next
bind -n C-left swap-window -t -1
bind -n C-right swap-window -t +1

もちろん、ターミナルなど他のアプリケーションのホットキーと重複させてはいけません。そのような場合、ターミナルのタブ機能を無効化して置き換えるほうが良いでしょう。

tmux の detach で EOT ホットキー Ctrl+d を補完するのも便利です:

bind-key -n C-j detach

様々なウィンドウのセッションを同時に操作するクライアント

Practical Tmux で、Brandur Leach は以下のように書いています:

複数のクライアントを一つのセッションにアタッチする際、Screen と tmux の挙動は少々異なっています。Screen では、各クライアントがセッションに接続され、セッションの中で別々のウィンドウが表示されます。tmux では、一つのセッションに接続された全てのクライアントが同じウィンドウを表示します。
この問題は tmux の中でセッションを2つ生成して2番目のセッションを1番目のセッションのウィンドウに同期してから、2番目の新しいセッションを1番目のセッションに指定することで解決します。

以下の “tmx” スクリプトは上記を実装しています — 2番目のパラメータが “1” の場合は “tmux new-window” を実行するように修正を加えています。tmx <base session name> [1] として呼び出すことで必要に応じてベースセッションが起動します。それ以外の場合は新しい “client” セッションはベースに接続され、任意で新しいウィンドウを追加してアタッチします。“zombie” になったときは終了するように設定します。

tmx
#!/bin/bash

#
# Modified TMUX start script from:
#     https://forums.gentoo.org/viewtopic-t-836006-start-0.html
#
# Store it to `~/bin/tmx` and issue `chmod +x`.
#

# Works because bash automatically trims by assigning to variables and by 
# passing arguments
trim() { echo $1; }

if [[ -z "$1" ]]; then
    echo "Specify session name as the first argument"
    exit
fi

# Only because I often issue `ls` to this script by accident
if [[ "$1" == "ls" ]]; then
    tmux ls
    exit
fi

base_session="$1"
# This actually works without the trim() on all systems except OSX
tmux_nb=$(trim `tmux ls | grep "^$base_session" | wc -l`)
if [[ "$tmux_nb" == "0" ]]; then
    echo "Launching tmux base session $base_session ..."
    tmux new-session -s $base_session
else
    # Make sure we are not already in a tmux session
    if [[ -z "$TMUX" ]]; then
        echo "Launching copy of base session $base_session ..."
        # Session id is date and time to prevent conflict
        session_id=`date +%Y%m%d%H%M%S`
        # Create a new session (without attaching it) and link to base session 
        # to share windows
        tmux new-session -d -t $base_session -s $session_id
        if [[ "$2" == "1" ]]; then
		# Create a new window in that session
		tmux new-window
	fi
        # Attach to the new session & kill it once orphaned
	tmux attach-session -t $session_id \; set-option destroy-unattached
    fi
fi

~/.tmux.conf に以下の設定を追加すると便利です:

setw -g aggressive-resize on

セッション全体に接続されている一番小さいクライアントではなく、表示している一番小さいクライアントにあわせてウィンドウのサイズが変更されるようになります。

~/.bashrc に以下を追加する方法もあります [3]:

.bashrc
function rsc() {
  CLIENTID=$1.`date +%S`
  tmux new-session -d -t $1 -s $CLIENTID \; set-option destroy-unattached \; attach-session -t $CLIENTID
}

function mksc() {
  tmux new-session -d -s $1
  rsc $1
}

著者より:

"mksc foo" creates a always detached permanent client named "foo". It also calls "rsc foo" to create a client to newly created session. "rsc foo" creates a new client grouped by "foo" name. It has destroy-unattached turned on so when I leave it, it kills client.
Therefore, when my computer looses network connectivity, all "foo.something" clients are killed while "foo" remains. I can then call "rsc foo" to continue work from where I stopped.

ターミナルタイプにあわせて TERM 変数を修正する

tmux で TERM 変数を固定で設定する代わりに、ターミナルエミュレータのタイプにあわせて適切な TERM (screen または screen-256color) を設定することができます:

~/.tmux.conf
## set the default TERM
set -g default-terminal screen

## update the TERM variable of terminal emulator when creating a new session or attaching a existing session
set -g update-environment 'DISPLAY SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY TERM'
## determine if we should enable 256-colour support
if "[[ ${TERM} =~ 256color || ${TERM} == fbterm ]]" 'set -g default-terminal screen-256color'
~/.zshrc
## workaround for handling TERM variable in multiple tmux sessions properly from https://sourceforge.net/p/tmux/mailman/message/32751663/ by Nicholas Marriott
if [[ -n ${TMUX} && -n ${commands[tmux]} ]];then
        case $(tmux showenv TERM 2>/dev/null) in
                *256color) ;&
                TERM=fbterm)
                        TERM=screen-256color ;;
                *)
                        TERM=screen
        esac
fi

tmux を再起動せずに変更した設定を適用する

デフォルトでは tmux は起動時にしか ~/.tmux.conf を読み込みません。起動した後に設定ファイルを tmux に読み込ませるには、次を実行:

tmux source-file <path>

~/.tmux.conf に以下のように追加することもできます:

bind r source-file <path>

^: を実行してから以下を入力する方法もあります:

source .tmux.conf

既存のセッションに新しいセッションがアタッチされるたびにプログラムを実行するテンプレートスクリプト

以下のスクリプトはプログラムが以前に実行されたかどうかチェックします。見つからなかった場合、新しい tmux セッションを作成してからウィンドウにアタッチしてプログラムを実行します。プログラムが見つかった場合はセッションにアタッチしてウィンドウを選択だけします:

#!/bin/bash

PID=$(pidof $1)

if [ -z "$PID" ]; then
    tmux new-session -d -s main ;
    tmux new-window -t main -n $1 "$*" ;
fi
    tmux attach-session -d -t main ;
    tmux select-window -t $1 ;
exit 0

nicklist プラグインを使って irssi を実行する派生版は irssi の ArchWiki ページにあります。

ターミナルエミュレータのウィンドウタイトル

tmux ウィンドウで SSH 接続を行うと、ターミナルエミュレータのウィンドウタイトルが user@localhost のままで user@server にならないことに気づくかもしれません。タイトルバーを接続先のホストにあわせて変えられるようにするには、~/.tmux.conf に以下を設定します:

set -g set-titles on
set -g set-titles-string "#T"

set-titles-string#Tuser@host:~ を表示して、接続したホストによって表示が変わります。

自動レイアウト

新しい分割を作成したり古い分割を解除する際に、現在選択されているレイアウトは適用されません。修正するには、以下のバインドを追加することで新しい、あるいは既存のペインに現在選択中のレイアウトが適用されるようになります:

bind-key -n M-c kill-pane \; select-layout
bind-key -n M-n split-window \; select-layout

Vim の colorscheme がロードされない

vim の colorscheme が tmux に読み込まれていない場合は、以下を参照してください: [4] [5]

Vim フレンドリな設定

vim ユーザーに使いやすい設定は [6] を見て下さい。

tmux 2.4 では、以下の部分を:

bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
bind -t vi-copy 'Space' halfpage-down
bind -t vi-copy 'Bspace' halfpage-up

以下のように変更してください:

bind-key -T copy-mode-vi 'v' send -X begin-selection
bind-key -T copy-mode-vi 'y' send -X copy-selection
bind-key -T copy-mode-vi 'Space' send -X halfpage-down
bind-key -T copy-mode-vi 'Bspace' send -X halfpage-up

フレンドリーなペイン分割

ペインを垂直方向に分割するためのデフォルトのキーバインドは Ctrl + b} % であり、ペインを水平方向に分割するためのデフォルトのキーバインドは Ctrl + b " キーボードのレイアウトによっては入力が難しく、覚えにくい場合もあります。

よりわかりやすいキーバインディングは、水平方向に分割する場合は Ctrl + b h を使用し、ペインを垂直方向に分割する場合は Ctrl + b v を使用することです。これは覚えておくと非常に便利です。

この変更を行うには、 ~/.tmux.confに次の行を追加します。

システムの停止を禁止

ホストがスリープ状態になると別のデバイスから接続したときに tmux がハングする場合は、セッションのシェルコマンドを禁止してロックします。

tmux new-session -A "systemd-inhibit --what=idle $SHELL"

トラブルシューティング

スクロールの問題

ターミナルで Shift-Page Up/Down を使ってスクロールができない場合、以下の設定で xterm から識別子が始まるターミナルで smcup と rmcup の機能を削除できます:

set -ga terminal-overrides ',xterm*:smcup@:rmcup@'

上記の設定を使うとターミナルエミュレータは tmux のことを picomutt と同じようなフルスクリーンのアプリケーションと認識するようになり [7]、スクロールバックが正しく記録されるようになります。ただし、ウィンドウやペインを切り替えたときに多少表示が崩れるかもしれません。Tmux のネイティブのスクロールバックを使うことを推奨します。

マウスのスクロール

ノート: 以下の設定はセレクションバッファのコピー・ペーストと干渉します。セレクションバッファからコピー・ペーストするときは shift キーを押してください。

マウスホイールでスクロールしたい場合、.tmux.conf で mode-mouse をオンにして下さい:

set -g mouse on

スクロール履歴を設定するには:

set -g history-limit 30000

tmux 2.1 からは、マウスホイールでスクロールするには ~/.tmux.conf に以下のどちらかあるいは両方を追加してみてください:

bind -T root WheelUpPane   if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M"
bind -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M"

上記の設定では一行ずつしかスクロールしませんが、以下を追加することでページ単位でスクロールすることができます:

bind -t vi-copy    WheelUpPane   page-up
bind -t vi-copy    WheelDownPane page-down
bind -t emacs-copy WheelUpPane   page-up
bind -t emacs-copy WheelDownPane page-down

UTF-8 のマウスイベントをターミナルエミュレータがサポートしていない

ターミナルエミュレータが UTF-8 のマウスイベントに対応していない場合、tmux の mouse on オプションを設定しても、ターミナルウィンドウの中で左クリックすると [M#[Ma などの文字列がプロンプトに貼り付けられてしまいます。

この問題を解決するには以下を設定:

set -g mouse-utf8 off

Shift+F6 が Midnight Commander で動作しない

Midnight Commander#ショートカットが機能しないを参照してください。

参照

チュートリアル