😺

Raycast Script Commands で Neovim をどこからでも使えるようにした

に公開

実現したこと

下記の sh を Raycast の Script Commands から呼び出すことで、Neovim を開いて編集 → 自動で貼り付けが簡単にできるようになりました。

#!/bin/bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Quick Note
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖
# @raycast.packageName Quick Note

# Documentation:
# @raycast.author ayuzaka
# @raycast.authorURL https://raycast.com/ayuzaka

tmp_dir="${TMPDIR:-/tmp}"
tmp_file="${tmp_dir%/}/raycast-note-$(date +%Y%m%d%H%M%S).md"

# 空ファイルを作成して初期ハッシュを固定(未編集や :q! はペーストをスキップするため)
: > "$tmp_file"
initial_hash="$(shasum -a 256 "$tmp_file" | awk '{print $1}')"

# 起動前に前面アプリを記録(nvim 終了後に戻してペーストするため)
front_app="$(osascript -e 'tell application "System Events" to get name of first application process whose frontmost is true')"

# Ghostty を新規起動して nvim を開く
/Applications/Ghostty.app/Contents/MacOS/ghostty -e zsh -i -c "
nvim '$tmp_file'
final_hash=\"\$(shasum -a 256 '$tmp_file' | awk '{print \$1}')\"
if [ \"\$final_hash\" != '$initial_hash' ] && [ -s '$tmp_file' ]; then
  cat '$tmp_file' | pbcopy
  osascript -e 'tell application \"$front_app\" to activate'
  osascript -e 'tell application \"System Events\" to keystroke \"v\" using command down'
fi
"

実際の動きはこんな感じです。

モチベーション

2025年に導入したツールの内、特に良かったものに editprompt があります。
これは、Claude Code 等の CLI ツールでプロンプトを好きなエディタから入力できるツールです。
詳しくは、 README を見ていただきたいのですが、割り当てたショートカットキーを入力すると好きなエディタ(自分の場合は Neovim)が起動し、編集は Neovim で行うことができます。
Neovim を閉じるとその内容がプロンプトの入力欄に貼り付けられます。

そうすると、Slack のメッセージや Notion の編集、GitHub Issue の説明など、あらゆるものを Neovim で書ける環境を作りたくなりました。
Raycast の Script Commands が手軽で動作も安定していそうだったのと、普段から Raycast を愛用していたのもあり、これで作ることにしました。

構成

  • Raycast
  • Ghostty
    • ターミナルは何でも良かったのですが、メインは WezTerm なので、軽量な別ターミナルとして採用しました
  • Neovim

セットアップ

上記の .sh を任意のディレクトリに配置します。
Raycast の設定 > Extensions の「+」から「Add Script Directory」を選択し、上記で配置したディレクトリを選択することで、スクリプトを読み込むことができます。

sh でやっていることは次の通りです。

  • 一時ファイルを作成
  • 前面アプリを記録
  • Ghostty を起動して Neovim で編集
  • 編集があればクリップボードにコピーし、元のアプリに貼り付け

Raycast 側では、このスクリプトに Hotkey を設定できるので、好きなタイミングで呼び出すことが可能になります。

操作方法

ホットキーで起動すると、起動前の前面アプリを記録した上で Neovim が立ち上がります。
編集後に :wq などで終了すれば、元のアプリに自動で貼り付けることができます。
未編集や :q! の場合は貼り付けをスキップします。

まとめ

とりあえず neovim を開いて書きたい場合には、手軽にできるのでおすすめです。

Discussion