[V-REP] スクリプトエディタを外部エディタに変更する
vrepでは標準でLua用のスクリプトエディタが使用できます。このエディタは関数を補完をしてくれたり、引数のヒントを与えてくれたりと割と便利です。しかし異なるシーン間のスクリプトを見比べる事ができなかったり、ショートカットが基本的なものしかなかったりと少々不便に感じることがあります。なにより日本語が入力できないのは痛過ぎます。そこで他のエディタを使用出来るようにします。
デメリットとして、エディタ上でのスクリプト名の表示が全てembscript_*.luaになってしまい区別がつきにくいこと、自分で設定しなければ補完もヒントも無くなってしまうこと、が挙げられますがそこは自分で何とかするという事で…。
任意のエディタを指定する
サイドツールバーにあるUser settingsをクリックします。
External script editeorにチェックを入れ、Selectから使用したいエディターを選択します。
vrepを再起動後、Scene hierarchyのスクリプトアイコンをダブルクリックすれば、設定したエディタで編集ができます。
注:外部エディタで編集した場合、外部エディタ側で保存しなければvrep側には変更が適用されません。
emacsにする場合(Linux)
emacsのバージョンやファイル名は適宜読み替えてください。
vrepでの設定(スクリプトを開くたびにemacsのバッファに開く)
vrepのエディタをemacsにする場合の手順です。
まずemacsの絶対パスを確認し、インストールされているemacsを確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ which emacs /user/bin/emacs $ ls /usr/bin/ | grep emacs b2m.emacs-23.3* ebrowse.emacs-23.3* emacs@ emacs-23.3* emacs.emacs-23.3* emacsclient@ emacsclient.emacs-23.3* etags.emacs-23.3* gctags.emacs-23.3* grep-changelog.emacs-23.3* rcs-checkin.emacs-23.3* |
このまま /usr/bin/emacs-23.3を設定してもいいのですが、そうした場合新たにスクリプトを編集するたびにemacsが起動することになってしまい非常に面倒です。そこで既に開いているemacsのバッファに開くように設定します。
そこでExternal script editeorには /usr/bin/emacsclient.emacs-23.3を設定しておきます。
emacsでの設定(補完を使えるようにする)
emacsclientを使おうを参考にemacsclientの設定をします。ini.elに以下を記述します。
1 2 3 4 |
;; emacsclient用にサーバを起動 (require 'server) (unless (server-running-p) (server-start))</pre> |
これでemacsを事前に起動しておけば、emacsclientが実行されるたびに既に起動しているemacs内で編集ができます。
これだけだと関数の補完や色分けがされず不便です。そこでauto-complete.elとlua-modeをemacsにインストールしておきます。
それぞれインストールしたらauto-completeでluaが有効になるようにします。以下のようにauto-complete.el中にlua-modeと記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
(defcustom ac-modes '(emacs-lisp-mode lisp-interaction-mode c-mode cc-mode c++-mode java-mode clojure-mode scala-mode scheme-mode ocaml-mode tuareg-mode perl-mode cperl-mode python-mode ruby-mode ecmascript-mode javascript-mode js-mode js2-mode php-mode css-mode makefile-mode sh-mode fortran-mode f90-mode ada-mode lua-mode xml-mode sgml-mode) "Major modes `auto-complete-mode' can run on." :type '(repeat symbol) :group 'auto-complete) |
次に辞書リストを作ります。次のようなシェルを実行して関数名を列挙したファイルを作ります。
1 2 3 |
#!/bin/bash url="http://www.coppeliarobotics.com/helpFiles/en/apiFunctions.htm" curl ${url} | grep ^\<h3 | cut -d\" -f4 > vrep-apifunction-dict$(date +%y%m%d) |
そして作成したファイルを適当な場所に設置します。
最後にinit.elに次のような記述をします。ac-user-dictionary-filesで先程作成したファイルの場所を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 |
;; vrep-mode(なんちゃって) ;; ユーザー辞書の追加 (defun vrep-mode () (setq ac-user-dictionary-files '("~/.emacs.d/auto-complete/user-dict/vrep-apifunction-dict140717")) ) ;; ファイル名がembScript_*であればvrep-mode関数を実行する (defun check-vrep () (cond ((string-match "embScript_+" (file-name-nondirectory buffer-file-truename)) (vrep-mode))) ) ;; ファイルオープン時にluaであればcheck-vrepを実行 (add-hook 'lua-mode-hook 'check-vrep) |
これでembscript_*.luaファイルが読み込まれると、先ほど追加した関数が補完されるようになります。
注:auto-completeの辞書に追加しているので、一回有効になるとemacsを一度終了するまでどのファイルでもsim〜で補完が行われるで気をつけてください。
メジャーモードに辞書を追加も可能なので、v-repモードでも自作すれば指定したファイルでのみ有効にすることも可能です。誰かv-repモード作ってくれませんかね…。
コメントを残す