主に、公式のREADMEの転載です。
elixirコマンドやiexコマンドを呼び出す
コマンドチートシート
elixirコマンドの呼び出し
キーバインド | 関数名 | 概要 |
---|---|---|
C-c a e b |
alchemist-execute-this-buffer | 現在のバッファを実行 |
C-c a e f |
alchemist-execute-file | ファイル名を指定して実行 |
C-c a e e |
alchemist-execute | 対象ファイルを、任意のオプションをつけて実行 |
iexコマンドの呼び出し
キーバインド | 関数名 | 概要 |
---|---|---|
C-c a i i |
alchemist-iex-run | iexプロセスを開始する |
C-c a i p |
alchemist-iex-project-run | プロジェクトの依存モジュールをロードしつつiexプロセスを開始する?(iex -S mix) |
C-c a i l |
alchemist-iex-send-current-line | 現在の行をiexに渡す |
C-c a i c |
alchemist-iex-send-current-line-and-go | 現在の行をiexに渡し、iexバッファにカーソルを移動する |
C-c a i r |
alchemist-iex-send-region | マークされたリージョンをiexに渡す |
C-c a i m |
alchemist-iex-send-region-and-go | マークされたリージョンをiexに渡し、iexバッファにカーソルを移動する |
C-c a i b |
alchemist-iex-compile-this-buffer | 現在のバッファをコンパイルする |
C-c a i R |
alchemist-iex-reload-module | 現在のバッファを再コンパイルし、iexプロセス内でリロードする |
使い方
実験用に、[こんな] (https://gist.github.com/ak-ymst/3e3cfd619e9aa2cefe65)ファイルを用意する。
defmodule Hello do
def world do
IO.puts "Hello world from function"
end
end
Hello.world
IO.puts "Hello world from inlinet"
このファイルを、コマンドラインから実行すると...
$ elixir hello.ex
Hello world from function
Hello world from inlinet
$
この通り、特におもしろみのない結果が表示されます。
同じことを、emacs上で行いたい場合はファイルをemacsで開いた状態でC-c a e b
と入力すれば、別バッファが開き、そこに結果が出力されます。
また、対話式の実行環境であるiexを使って、行単位に実行して見たい時は、まずC-c a i i
(あるいはC-c a i p
)でiexプロセス開始し, 実行したい行にカーソルを合わせた状態でC-c a i l
と入力します。
図は9行目をiexに渡して実行したところです。
C-c a i l
の代わりにC-c a i c
を入力すると、コマンド実行後、結果バッファの方にカーソルが移動します。
ただし、この状態で8行目を実行しようとすると…
iex(3)> Hello.world
** (UndefinedFunctionError) undefined function Hello.world/0 (module Hello is not available)
とエラーになります。
モジュールがロードされてないわけなので当然ですね。
なので, 1行目から6行目までをリージョン指定して、C-c a i r
その後、もう一度8行目を実行すれば、エラーは発生しないことが確認できると思われます。
ちなみに、コマンド表には見当たりませんでしたが、alchemist-iex-send-last-sexpという
直前のブロック全体をiexに渡す関数(lisp-modeでいうC-jみたいなものか?)も定義されているので
モジュールの定義とうはこちらを使ったほうが楽かもしれません。
phoenixプロジェクトに関連したコマンド
コマンドチートシート
キーバインド | 関数名 | 概要 |
---|---|---|
C-c a n w |
alchemist-phoenix-find-web | webディレクトリのファイルを開く |
C-c a n c |
alchemist-phoenix-find-controllers | controllersディレクトリのファイルを開く |
C-c a n l |
alchemist-phoenix-find-channels | channelsディレクトリのファイルを開く |
C-c a n t |
alchemist-phoenix-find-templates | templatesディレクトリのファイルを開く |
C-c a n m |
alchemist-phoenix-find-models | modelsディレクトリのファイルを開く |
C-c a n v |
alchemist-phoenix-find-views | viewsディレクトリのファイルを開く |
C-c a n s |
alchemist-phoenix-find-static | staticディレクトリのファイルを開く |
C-c a n r |
alchemist-phoenix-router | router.exを開く |
C-c a n R |
alchemist-phoenix-routes |
mix phoenix.route を実行する |
使い方
まず、C-c a n r
とC-c a n R
について。
これらは単純で、前者は現在のウィンドウにrouter.exバッファを開き、後者は別のウィンドウにmix phoenix.route
の結果を出力する。
ちょっとつまずいたのは、それ以外のコマンド。
例えば、C-c a n c
(alchemist-phoenix-find-controllers)は公式の説明では
List all controllers in web/controllers directory.
と書かれています。
一見、diredか何かでweb/controllersディレクトリを開くのかのような説明ですが、実際にコマンドを実行してみると。
とミニバッファに表示されるだけ。
なんとなく、ここに開きたいコントローラの名前を入力してやればいいのかな?とpost_controller.exと入力してTABを押してみると[No match]と表示さる。
実際に開いてみても、まっさらなバッファが作られるだけ。
いったんバッファを閉じて、もう一度C-c a n c
と入力し、今度はミニバッファに何も入力していない状態でTABを押してみると...
ここまで補完される。
更にTABを押すと、新しいバッファが開き、候補リストが表示される。
ファイルを候補リストから選択するか、あるいはファイルのプロジェクトルートからのパスをミニバッファで指定してやることで、ようやくコントローラのファイルを開くことができました。
他のmodel等のコマンドに関しても基本的には同じ操作のようです。
(ただし、templateファイルを開くC-c a n t
に関しては動作が確認できませんでした)
ちなみに、結局プロジェクトルートからのパスを指定してファイル開いているだけなので、コントローラを開くコマンドでモデルも開けるのでは?と試したところ、実際に開くことはできましたが、入力補完が働かず全部手動で正確に入力してやる必要があり、とても使い物にはなりませんでした。
ファイルの種類を細かく分類せず、webディレクトリ以下のすべてのファイルを開く対象としている
C-c a n w
コマンドを使えばすべてのファイルに対して入力補完が効くので、ファイル開きたいときは、このコマンド一本でいいような気もします。
(その場合、限定版のC-x C-f
と同じなのでは?という気もしますが)
その他MixとかTestとかとの連携
READMEには、他にもMIXコマンドの呼び出しやテストの実行などについての説明がいろいろと書かれていましたが
まだ動作の確認が取れていないので、今回はここまで。
これらの機能(特にテスト関連)についても、色々便利そうなことが書いてあるので、動作確認できたらまた記事まとめます。