2

Skim wikiから、このスクリプトを実行しようとしています。

#!/bin/bash

file="$1"
line="$2"

[ "${file:0:1}" == "/" ] || file="${PWD}/$file"

exec osascript \
  -e "set ESC to ASCII character 27" \
  -e "tell application \"Vim\" to activate" \
  -e "tell application \"System Events\"" \
  -e "  tell process \"Vim\"" \
  -e "    keystroke ESC & \":set hidden\" & return " \
  -e "    keystroke \":if bufexists('$file')\" & return " \
  -e "    keystroke \":exe \\\":buffer \\\" . bufnr('$file')\"  & return " \
  -e "    keystroke \":else \" & return " \
  -e "    keystroke \":    edit ${file// /\\\\ }\" & return " \
  -e "    keystroke \":endif\" & return " \
  -e "    keystroke \":$line\" & return " \
  -e "    keystroke \"zO\" " \
  -e "  end tell" \
  -e "end tell"

コマンドラインから実行しようとすると、次のようになります。

# Go to line 20 of some_file
$ ./that_script "some_file" 20

次のエラーが発生します。

56:64: execution error: File Vim wasn’t found. (-43)

試み

私はあらゆる種類を試しました:

tell application \"vim\" to activate <-- File vim wasn't found
tell application \"/usr/bin/vim\" to activate <-- this raises a 10810 error
tell application \"/path/to/my/own/compiled/vim\" <-- this raises a 10810 error

目的

GUIではなくターミナルから実行されているVimインスタンスと「通信」しようとしています。

4

1 に答える 1

4

+clientserver他の質問から)作業ができたので、ここではもう答えは必要ないと思いますが、とにかくここにあります:

AppleScriptは通常、コマンドラインプログラムを処理しません。

AppleScriptを使用してMacVim(tell application "MacVim" to activate)と通信することはできますが、CLIVimにアクセスすることはできません。AppleScriptはGUIアプリ専用です。

現在、ほとんどの(「すべて」を書くのをためらっています)Mac OS X GUIアプリケーションは、「辞書」と呼ばれるAppleScriptの最小限のインターフェイスを公開しています。アプリをアクティブ化し、ウィンドウの数を取得し、アクティブなドキュメントを印刷し、ファイルを開くことができます…そしてキーストロークをシミュレートします。

この例のスクリプトは、多かれ少なかれ機能しますが、GUIVimでのみ機能します。Mac OS X用のこのようなアプリは少数あり、このスクリプトはVim.appと呼ばれるアプリで動作するように設計されています。Vim必要に応じてに変更できMacVimますが、CLIVimで動作させることはできません。

于 2012-04-20T07:21:32.747 に答える