まずは、これだけ覚えて始めよう。Tmux編
普段から、Pythonプログラムを作っています。Vimでファイルを開いて、編集して、保存して、プログラムを実行して、を繰り返します。そのとき画面が1つだけだと、ファイルのリストが画面から消えて見えなくなってしまいます。そこで、画面を分割してくれるコマンド 「Tmux」 を使います。
Tmux
Tmuxの公式ページに次のように説明されています。
tmux is a terminal multiplexer. It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.
1つのターミナルの画面(ウィンドウ)の中に、複数の画面(ペイン)を作ってそれぞれで別の作業ができ、それぞれの画面(ウィンドウ、ペイン)を行き来したり、画面(ペイン)を分割して、片方にヘルプを開き参照しながら、もう片方で入力したり、コマンドを実行したりすることができるアプリです。
さらにデタッチ(一時退避)をすれば、ターミナルを閉じてもバックグラウンドで起動し続け、後でターミナルを開いてリアタッチ(一時退避から戻る)すれば、デタッチしたときの状態で開かれます。読んでもピンと来ないと思いますが、PCで作業する場面を思い浮かべてください。特にノートPCのように画面が小さいといくつもアプリを開いて、行ったり来たりしたり画面をピタッと合うように調整するのも面倒です。Tmuxは、1つの画面でブラウザのタブ表示のようにいくつもの画面を持つことができ、上下、左右、T型、4分割することができ、分割の1つを必要なときに最大化することもできてとても便利です。また、キーボード操作だけで操作ができて、画面内を移動できるコピーモードでは、Vimのキーボード操作が使えるので、学習効率も高いです。
画面を分割して作業効率を高めよう
「tmux」 というコマンドのマニュアルページを見てみましょう。ターミナルで次のように入力して、エンターを押してください。
$ man tmux
すると、オプションの説明部分は省きますが、次のように記載されています。
NAME
tmux — terminal multiplexer
SYNOPSIS
tmux [-2CDluvV] [-c shell-command] [-f file]
[-L socket-name] [-S socket-path]
[-T features] [command [flags]]
DESCRIPTION
tmux is a terminal multiplexer: it enables a
number of terminals to be created, accessed,
and controlled from a single screen. tmux may
be detached from a screen and continue running
in the background, then later reattached.
When tmux is started it creates a new session with a single window and displays it on screen. A status line at the bottom of the screen shows information on the current ses‐ sion and is used to enter interactive com‐ mands. A session is a single collection of pseudo terminals under the management of tmux. Each session has one or more windows linked to it. A window occupies the entire screen and may be split into rectangular panes, each of which is a separate pseudo terminal (the pty(4) manual page documents the technical details of pseudo terminals). Any number of tmux instances may connect to the same session, and any number of windows may be present in the same session. Once all sessions are killed, tmux exits. Each session is persistent and will survive accidental disconnection (such as ssh(1) con‐ nection timeout) or intentional detaching (with the ‘C-b d’ key strokes). tmux may be reattached using: $ tmux attach In tmux, a session is displayed on screen by a client and all sessions are managed by a sin‐ gle server. The server and each client are separate processes which communicate through a socket in /tmp.
日本語のマニュアルページがなく、英語で書かれています。コマンドやプログラムは英語で書かれているので、マニュアルも基本英語となります。英語が苦手だとしても、がんばって英語を読むしかありません。わたしも全部が理解できるわけではありません。それでも、自分で必要なことをするのにスケルトンライナーを駆使したり、Pythonでプログラムを書いて動かすことが可能です。「やれば、できる」の精神で継続することが大切です。
PCを起動したら、ターミナルを開いて 「tmux」
わたしは、PCを起動してまず、ターミナルを開いて最大化します。そして、次のワンライナーを打ちます。(実際には1行です。表示の都合上行尾に「 \ 」を入れて改行しています。以降同じ)
$ tmux new ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
rename-window python ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; \
neww ; send-keys 'cdpn' C-m ; send-keys 'clear' C-m ; selectw -t 8
「tmux」を起動して、10個のウィンドウを作成して、カレントディレクトリをpnに移動、最初のウィンドウの名前をpython、次のウィンドウの名前をnewsboatに変更して、9番目のウィンドウを選択します。選択する、というのは、開いて作業できる状態になる、ということです。わたしのメモファイルから 「#tmux.*?vv」 で検索して表示してみましょう(みなさんが下のスケルトンライナーを入力しても実行エラーになりますが)。
と、その前に、「tmux」のキーボードショートカット「prefix + %」で画面を縦に分割しておきます。右側に分割された画面に「prefix + o」で移動します。移動した右側の画面の方でコマンドを打ち込んで実行します。
prefixキーは「Ctrl+b」がデフォルトです。わたしは、vimをよく使います。vimでの「Ctrl+b」は画面1つ戻る(スクロールする)キーボードショートカットです。tmux(多重端末)の中でvimを使うと「Ctrl+b」はtmuxのprefixなので機能してくれません。そこでわたしの場合は、「Ctrl+@」に変更しています。ちなみに、vimのキーボードショートカットにかぶらない、あるいは、その機能は使わなくても影響がないtmuxのprefixは、次のとおりです。お好みで1つ選んでください。
Ctrl+i
Ctrl+y
Ctrl+t
Ctrl+g
Ctrl+e
Ctrl+q
USキーボードの場合「@」は、「Shift+2」となって押しづらいので、これらのどれかにしています。このようにtmuxの中で端末(ターミナル)を開いて作業すると、画面を分割したり、ターミナルを複数起動せずに複数のウィンドウを開けて行き来できたり、tmuxをデタッチして、ターミナルを閉じても、バックグラウンドでデタッチする前までの状態を維持してくれたり、作業効率が格段によくなるので、ssh接続先のターミナルでも使いたくなります。
そうすると、接続元(ローカル)のtmuxの中から接続先(リモート)のtmuxを開くので、prefixが同じだと接続先のtmuxで、prefixが使えなくなりvimのときと同様に困ってしまいます。解決策は、上に挙げたいくつかのprefixのどれかに設定して重複しないようにします。コマンド:(以下、1行プログラムとかワンライナーと書くこともあります。わたしはこれを「スケルトンライナー」と命名しています)
$ python3 -c "$imt;ans_=py_vimgrep('^#tmux.*?vv');pr_joinn(ans_)"|w3m
すると、下のように検索結果が表示されます。
#使い方vv
#tmuxでtmuxのバッファをxselのクリップボードへコピーする方法vv
tmux show-buffer|xsel -ip (vimのregでは、*に格納される)
tmux show-buffer|xsel -ib (vimのregでは、+に格納される)
tmux show-buffer|pbcopy
--- 2021-05-11 15:58:33 +0900 ---
#使い方vv
#tmuxでペインを他のウインドウに移動する方法vv
別ウィンドウのペインを持ってくる
:join-pane -s [windowインデックス].[paneインデックス]
別ウィンドウにペインを移動する
:join-pane -t [windowインデックス]
--- 2022-06-11 20:17:23 +0900 ---
#使い方vv
#tmuxでクリップボードの内容をバッファに登録する方法vv
tmux set-buffer "$(xsel -ob)"
--- 2022-08-06 18:00:13 +0900 ---
#使い方vv
#tmuxでクリップボードの内容をバッファに登録する方法vv
tmux set-buffer "$(xsel -ob)"
--- 2022-08-28 18:01:25 +0900 ---
#使い方vv
#tmuxでバッファリストを表示する方法vv
tmux list-buffer|sed -e's/^buffer.*bytes: //g' -ne'1,$p'
--- 2022-08-28 18:01:31 +0900 ---
#使い方vv
#tmuxでバッファリストの最初を表示するshow-bufferは改行がないので、xargsを使うと改行をつけられるvv
tmux show-buffer|xargs
--- 2022-08-28 18:02:01 +0900 ---
#使い方vv
#tmuxでリモートからリモートのコピーをローカルのバッファに登録する方法vv
pst=$(xsel -ob);ssh bi@192.168.1.50 "/usr/bin/tmux set-buffer '${pst}'"
--- 2022-08-28 21:47:55 +0900 ---
#使い方vv
#tmuxでペインを入れ替える方法vv
Ctrl+b + Space ペインのレイアウト変更
Ctrl+b + Ctrl+o ペインの入れ替え
Ctrl+b + { ペインの入れ替え(順方向)
Ctrl+b + } ペインの入れ替え(逆方向)
--- 2023-01-10 22:48:03 +0900 ---
毎回使い方を参照するときにズラーッと表示されるとその中から目的の使い方を探すのに苦労します。 検索パターンの部分 「'^#tmux.?vv'」 のところを たとえば 「'^#tmux.?入れ替え'」 に変更して実行すると、 下のように結果が絞り込まれて、知りたい情報により早く効率よくたどり着けます。
スケルトンライナー:
$ python3 -c "$imt;ans_=py_vimgrep('^#tmux.*?入れ替え');pr_joinn(ans_)"|w3m
すると、下のように検索結果が表示されます。
#使い方vv
#tmuxでペインを入れ替える方法vv
Ctrl+b + Space ペインのレイアウト変更
Ctrl+b + Ctrl+o ペインの入れ替え
Ctrl+b + { ペインの入れ替え(順方向)
Ctrl+b + } ペインの入れ替え(逆方向)
--- 2023-01-10 22:48:03 +0900 ---
プログラミングやコマンドをすべて覚えていなくても、うろ覚えでも大丈夫です。デジタル化の効用です。コンピュータの中に後から検索して呼び出せるように記録をしておくことで、自分に必要な情報を自分のコンピュータの中からいつでも呼び出すことができるのです。調べるときにインターネットで検索したり、本や書類を開いて該当部分を探してたどり着くよりも、時間を省くことができるようになります。
大切なことは、後から検索してたどり着くことができる状態(構成、ルール)で必要な情報をファイルとして保存することです。さらに大切なことは、3つです。
なるべくテキストファイルを使うこと、
検索しやすいファイル名にすること、
そして、よく使いそうな情報はできるだけ1つのテキストファイルに保存する、です。
