Claude Media
Claude Code copyコマンドでコードブロックだけを送る

Claude Code copyコマンドでコードブロックだけを送る

Claude Codeの/copyは直前の応答をクリップボードへ送ります。コードブロックの選択、SSH越しにwキーでファイルへ書き出す使い方、200行超の表を丸ごとコピーする挙動までを扱います。

Claude Codeの/copyは、直前のAI応答をクリップボードへ送るコマンドです。応答にコードブロックがあればピッカーが開き、ブロック単位で選べます。SSH越しでクリップボードに何も届かないときは、wキーでの書き出しが逃げ道になります。

ややこしいのは、届いていなくても成功と表示される点です。トラブルの多くはコピーそのものではなく、その先のクリップボード転送で起きます。

直前の応答をコピーする基本操作

/copyを引数なしで実行すると、直前のAI応答全体がクリップボードに送られます。Nを渡すと、新しいほうからN番目の応答が対象です。/copy 2なら2つ前の応答になります。

対象になるのはAIの応答だけで、自分が打ったプロンプトは含まれません。一つ前の答えをもう一度使いたいとき、スクロールして探し直す手間が省けます。

/copy
/copy 2

v2.1.285でclaude --versionを実行すると2.1.285 (Claude Code)と表示されます。

コードブロックだけを選んでコピーする

応答にコードブロックが含まれていると、/copyはインタラクティブなピッカーを開きます。応答全体か、個々のコードブロックかをその場で選べます。長い解説文の中にコマンドが1行だけ埋まっている応答で、解説ごと貼り付けずに済むのが利点です。

環境構築の手順を尋ねると、応答は前置き・コマンドのブロック・注意点の3つに分かれがちです。全体をコピーすれば解説文まで貼り付けることになります。ピッカーで必要なブロックだけを選べば、切り出す作業は要りません。ブロックが複数あるときも、狙った1つだけを選べます。

ピッカーで「Always copy full response」を選ぶと、以後ピッカーは開かず応答全体がコピーされます。この設定は/configに「Skip the /copy picker」として表示されます。ピッカーが急に出なくなったときは、ここを確かめてください。

マウスのドラッグ選択でも同じことはできますが、折り返しの位置や余分な空白まで拾うことがあります。ドラッグ選択で行末に空白が混じる不具合の原因と対処は、ドラッグ選択で行末に空白が混じる原因と対処にまとめました。

SSH越しでコピーが届かないときの切り分け

SSHでリモートのマシンにつないでいると、Claude Codeは手元のマシンのクリップボードツールを呼べません。ローカルならpbcopy(macOS)、wl-copyかxclipかxsel(Linux)、Set-Clipboard(Windows・WSL)が使われます。SSH越しではこれらに手が届きません。

代わりにOSC 52というエスケープシーケンスで、手元のターミナルへクリップボード書き込みを頼みます。tmuxの外でSSH越しに/copyか画面上の選択コピーをすると、この経路になります。ターミナルがそれを受け付けるかどうかは、ターミナル側の判断です。

問題は、/copyがCopied to clipboardと表示するのは、テキストが実際に届いたかどうかと無関係な点です。表示だけで成功を判断できません。届かないときは次の順で切り分けます。

手順

SSHでコピーが届かないときの切り分け

  1. 1

    ターミナルがOSC 52に対応しているか確かめる

    iTerm2は設定を有効にするまで、macOSのTerminal.appは常に、OSC 52を受け付けません。ローカルで使えていてもSSH越しでは届かない理由がここにあります。

  2. 2

    ピッカーでwキーを押してファイルに書き出す

    選択した内容がクリップボードの代わりにファイルへ保存されます。ターミナルの設定に左右されません。

  3. 3

    ターミナルの選択機能を使う

    ドラッグ中にターミナル固有のキーを押し続けると、Claude Codeを通さずにターミナル自身が選択します。Terminal.appではFn、iTerm2ではOptionです。そのあとでCmd+Cなどの通常のコピー操作をします。

  4. 4

    リモート側でマウス操作を無効にする

    リモートマシンで環境変数CLAUDE_CODE_DISABLE_MOUSE=1を設定すると、セッション全体でターミナルが選択を担当します。ホイールスクロールは残し、クリックとドラッグだけを切りたいときは、CLAUDE_CODE_DISABLE_MOUSE_CLICKS=1が使えます。

/copyはコピーした内容をファイルにも書き出し、そのパスを表示します。クリップボードの書き込みが端末に届かなかったときの逃げ道として、公式のトラブルシューティングに明記されています。wキーは、ピッカーで選んだ範囲だけをこの形で保存する操作です。サーバー上で生成した設定ファイルやログの断片を残したいときに、クリップボードを経由せず済みます。

SSH接続そのものの手順はClaude Code SSH接続ガイドにまとめています。なお、VS Code系の統合ターミナルでは、OSC 52経由の書き込みで日本語や絵文字が文字化けする報告もあります。原因と対処はClaude Codeの/copyで日本語が文字化けする原因と対処法で扱っています。

サンドボックス内のpbcopyが効かないときも/copyが使える

SSHとは別の場面でも、/copyが役に立ちます。サンドボックスを有効にしていると、Claudeが実行するBashコマンドの中からpbcopyやxclip、wl-copyを呼んでも、システムのクリップボードに届かないことがあります。Claudeにテキストを渡させても、クリップボードは変わらないままになります。

このとき、まずClaudeに内容を応答として出力させ、それから/copyを実行します。/copyはサンドボックスの外にあるClaude Code本体のプロセスから書き込むので、サンドボックスの制限を受けません。pbcopy *などをexcludedCommandsに足しても、この呼び出し自体はサンドボックスの外に出ない、と公式は注意しています。

ドラッグ選択のコピーは/copyと設定も操作も別

フルスクリーンレンダリングでは、ドラッグで選択したテキストがマウスを離した時点で自動的にクリップボードへ送られます。この自動コピーを止めたいときは、/configの「Copy on select」を切ります。この項目はフルスクリーンレンダリングが有効なときだけ表示されます。切ったあとは、Ctrl+Shift+cで手動でコピーします。

kittyキーボードプロトコルに対応するkitty・WezTerm・Ghostty・iTerm2では、Cmd+cも使えます。選択範囲がある間は、Ctrl+cが中断ではなくコピーとして働きます。誤ってCtrl+cで中断してしまう心配が減ります。フルスクリーンレンダリング自体はClaude CodeのTUI(フルスクリーン)とはで扱っています。

コピーのたびに、どの経路を使ったかを知らせる通知が出ます。SSH越しのセッションでsent N chars via OSC 52と読めるなら、送信までは済んでいて、受け取るかどうかはターミナル次第だと分かります。/copyにはこの区別がないので、SSHでは選択コピーの通知のほうが状況を判断しやすい場面があります。

VS Code・Cursor・Devin Desktopでは、ネイティブ選択にShiftを使います。macOSでOptionを使いたいときは、terminal.integrated.macOptionClickForcesSelectionの有効化が要ります。

フルスクリーンレンダリング中でも、transcriptモードをCtrl+oで開いて[を押すと、会話がターミナルのネイティブなスクロールバックに書き出されます。そこではターミナル自身の検索や選択がそのまま使えます。

tmuxとGNU screenでの選択コピーの挙動

マウスでドラッグして選択する場合の話です。tmuxの中では、クリップボードへの書き込みに加えてtmux自身のペーストバッファにも書き込まれます。GNU screenの中でも、長い選択をクリップボードへ渡せます。

v2.1.219より前は、GNU screen上でおよそ570字を超える選択をコピーすると、base64化されたテキストがウィンドウにそのまま表示されました。v2.1.219以降では起きません。Claude Codeを更新していれば気にする必要はありません。

iTerm2でコピーが効かないとき

iTerm2は既定で、ターミナル内のアプリからのクリップボードアクセスを遮断しています。SSH越しの/copyや選択コピーが届かない原因になります。

Settings → General → Selectionの「Applications in terminal may access clipboard」を有効にします。iTerm2の中で/terminal-setupを実行すれば、この設定は自動でオンになります。tmuxの中から実行しても、iTerm2は検出されます。設定を反映するには、iTerm2の再起動が必要です。

設定で受け付けられるようになるのはiTerm2です。ほかのターミナルでは、Terminal.appのようにOSC 52自体に対応していないものがあります。その場合、設定を探しても見つからないので、前述のネイティブ選択キーかwキーに切り替えます。

状況別に選ぶコピーの経路

どの経路を使うかは、Claude Codeをどこで動かしているかで決まります。手元のMacやLinuxで動かしているなら、ネイティブのクリップボードツールが使われるので、ほとんど意識しなくて済みます。

SSHで別のマシンにつないでいるなら、OSC 52を受け付けるターミナルかどうかが分かれ目です。受け付けないTerminal.appを使っているなら、最初からwキーかネイティブ選択を前提にしておくと、届かないコピーで悩まずに済みます。

サンドボックスを有効にしていて、Claudeにクリップボードへ流させたいなら、応答として出力させてから/copyを使います。

コマンド1つ、設定ファイルの一部、ログの断片のように範囲が小さいものは、ピッカーで1ブロックだけ選ぶのが最短です。コードブロックの形になっていない文章を渡したいなら、応答全体をコピーして貼り付け先で削ります。

200行を超える表もまるごとコピーされる

Markdownの表が200行を超えると、ターミナルには先頭200行だけが表示され、末尾に… N more rows not shownの行が付きます。これは表示だけの制限です。会話には全行が残っていて、/copyは表示の制限を無視して全行をコピーします。

ターミナルに見えている200行しか手に入らないと思って、範囲選択をやり直す必要はありません。ただし、大きな表はターミナルで読みづらいので、Claudeにファイルへ書き出すよう頼むほうが扱いやすくなります。

この200行の制限はv2.1.208で入りました。それより前は全行を描画していたので、巨大な表を含むセッションを再開すると、再描画で固まることがありました。表示を絞りつつ/copyでは全行を渡す今の形は、描画の負荷とデータの取りこぼしの両方を避けています。

/copyと/exportの使い分け

似たコマンドに/exportがあります。ほかのコマンドとの並びはClaude Codeスラッシュコマンド一覧で確認できます。会話全体をプレーンテキストにするコマンドで、ファイル名を渡せばそのファイルへ書き込みます。渡さなければ、クリップボードへコピーするか、ファイルに保存するかを選ぶダイアログが開きます。

くらべる

/copy と /export の対象

1つの応答

/copy

直前の応答、またはN番目の応答だけが対象です。コードブロックを1つだけ選ぶこともできます。同僚にエラーの調査結果を1件だけ渡したいときに向きます。

会話全体

/export

セッションの記録を丸ごと書き出します。/export report.txtのようにファイル名を付ければ、議事録のように残せます。

まとめ

SSHで使う機会があるなら、最初に手元のターミナルがOSC 52を受け付けるかだけ確認しておきます。そうすれば、Copied to clipboardの表示に惑わされずに済みます。

この記事を共有:XはてブLinkedIn