一部の環境の Vim では、SSH接続し、端末上でテキストをクライアントのクリップボートにコピーしようとしてマウスで選択すると、「VISUAL」という謎のインジケータが出てきてしまい、コピーさせてくれない。
たとえば、Dockerの node:22
イメージで使いやすい Vim が、このような不親切設計になっている。
以下のようにすると再現できる。
まず、Docker をインストールし、node:22
イメージで Bash を起動する。
sudo docker run -it --entrypoint /bin/bash node:22
起動したコンテナ内で、Vim をインストールする。
apt-get update
apt-get install -y vim
インストールした Vim で、適当なテキストファイルを開く。
vim test.txt
少なくとも、
- Windows 11 のコマンド プロンプトでの
ssh
コマンド - Tera Term 5.4.0
でこの不親切設計の害を確認できた。
コマンド プロンプト
コピー妨害の様子
以下のように、謎のインジケータが出る。
この状態で、少なくとも以下の操作によるテキストのコピーに失敗した。
- Ctrl+C
- 右クリック
- Enterキー
- Menuキーによるコンテキストメニュー
- コマンド パレットの「コンテキスト メニューの表示」によるコンテキストメニュー
- コマンド パレットの「テキストをコピーする」
コンテキストメニュー
通常時は、Menuキー (キーボード上の、四角の中に横線が数本書かれたキー) を押すと、コンテキストメニューが現れ、そこに「コピー」ボタンがある。
しかし、妨害を受けていると、「コピー」ボタンが現れず、コピーできない。
コマンド パレット
タブの右にある「v」ボタンをクリックし、「コマンド パレット」を選択する。
すると、以下のようなコマンドリストが出てくる。
「コマンド名を入力する…」の欄に「コピー」と入力し、「テキストをコピーする」を選択する。
すると、通常時であれば選択したテキストをコピーできるが、妨害を受けているとコピーできない。
コピー妨害の突破方法
タブを右クリックし、「テキストのエクスポート」を選択する。
すると、保存先のファイルを選択するダイアログが開き、画面に表示されているテキストをテキストファイルに保存できる。
このテキストファイルを任意のテキストエディタで開き、欲しい部分をコピーすることで、テキストをコピーできる。
Tera Term
コピー妨害の様子
以下のように、謎のインジケータが出る。
また、このとき、以下の通常のテキスト選択と比べると、選択場所を表す背景色が薄くなっていることに気づく。
妨害を受けている際、Alt+C を押してもコピーが行われない上、「編集」メニューの「コピー」もグレーアウトされていて選択できない。
コピー妨害の突破方法
「編集」メニュー内の「表示画面を選択」を押す。
すると、「VISUAL」インジケータは出てしまうもの、画面内のテキストを選択できる。
この状態で Alt+C を押せば、テキストをコピーできる。
コピーしたテキストを一旦任意のテキストエディタに貼り付け、あらためて欲しい部分をコピーすればよい。
コピーした後、「編集」メニュー内の「選択を解除」を押し、画面の左上から右下までをマウスで選択するような操作をすることで、画面の様子をある程度戻すことができる。
しかし、白くなったところが残ってしまい、完全には戻せなかった。
まとめ
一部の環境では、SSH 接続で Vim を使用すると、テキストの一部を選択してのコピーができなくなるようである。
しかし、このような環境でも、画面全体のテキストを取り出す操作を行うことで、間接的にコピーを行うことができることがあることがわかった。
場合によっては、Vim からテキストをコピーすることにこだわらず、less
や cat
などでテキストファイルの内容を画面に出力し、コピーするという選択肢もあるだろう。