0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

テキストをコピーさせてくれない不親切なVimと対抗手段

Posted at

一部の環境の 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

コピー妨害の様子

以下のように、謎のインジケータが出る。

Tera Term でのコピー妨害

また、このとき、以下の通常のテキスト選択と比べると、選択場所を表す背景色が薄くなっていることに気づく。

Tera Term での通常のテキスト選択

妨害を受けている際、Alt+C を押してもコピーが行われない上、「編集」メニューの「コピー」もグレーアウトされていて選択できない。

Tera Term で妨害によりコピーメニューが使えない

コピー妨害の突破方法

「編集」メニュー内の「表示画面を選択」を押す。

Tera Term の「表示画面を選択」

すると、「VISUAL」インジケータは出てしまうもの、画面内のテキストを選択できる。

「表示画面を選択」を押した状態

この状態で Alt+C を押せば、テキストをコピーできる。
コピーしたテキストを一旦任意のテキストエディタに貼り付け、あらためて欲しい部分をコピーすればよい。

コピーしたテキスト

コピーした後、「編集」メニュー内の「選択を解除」を押し、画面の左上から右下までをマウスで選択するような操作をすることで、画面の様子をある程度戻すことができる。
しかし、白くなったところが残ってしまい、完全には戻せなかった。

選択を解除した様子

まとめ

一部の環境では、SSH 接続で Vim を使用すると、テキストの一部を選択してのコピーができなくなるようである。
しかし、このような環境でも、画面全体のテキストを取り出す操作を行うことで、間接的にコピーを行うことができることがあることがわかった。

場合によっては、Vim からテキストをコピーすることにこだわらず、lesscat などでテキストファイルの内容を画面に出力し、コピーするという選択肢もあるだろう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?