ESM アジャイル事業部 開発者ブログ

永和システムマネジメント アジャイル事業部の開発者ブログです。

入力したコマンドをクリップボードへ自動コピーしたい

こんにちは。永和システムマネジメントの内角低め担当、畠山です。

今回は、ターミナルで入力したコマンドを自動的にクリップボードへコピーする zsh フックを書いたのでご紹介します。

これまでは「コマンドを入力→手作業でコマンドをコピー→作業ログへペースト」の3ステップで作業ログを記録していましたが、今回の zsh フックを使うことで「コマンドを入力→作業ログへペースト」の2ステップで作業ログを記録することができます。

~/.zshrc へ以下のスクリプトを追加すればOKです。

(注)私の環境は macOS なのでクリップボードへのコピーに pbcopy コマンドを使っています。macOS 以外の方は自分の環境に合わせたコマンドに置き換えてください。

# 入力したコマンドをクリップボードへコピーするフック関数
function preexec_copy_command() {
  if [ -n "$COPY_COMMAND" ]; then
    # 実行するコマンドをクリップボードへコピー
    echo -n $1 | pbcopy
  fi
}

# 自動コピー開始
function copy_start() {
  export COPY_COMMAND=1
}

# 自動コピー停止
function copy_stop() {
  export COPY_COMMAND=
}

# `add-zsh-hook` をロード
autoload -Uz add-zsh-hook

# preexec 時(コマンド実行直前)に preexec_copy_command を実行するようフックを追加
add-zsh-hook preexec preexec_copy_command

copy_start でコマンドの自動コピーを開始し、copy_stop で自動コピー停止します。

# 自動コピー開始
$ copy_start

# 自動コピー停止
$ copy_stop

使ってる様子はこんな感じ。入力する度にコマンドがクリップボードへ自動コピーされます。

うちのシェルはzshじゃないよーという方も、お使いのシェルに何かしらのフック機構があると思うので、そちらで試してみると良いかも。