BeforeLISPsJust Part of the Past~ #1 vim as a Lisp front end~
あるvimmerの嘆きVIM
あるvimmerの嘆きC-M-x がうらやましい…VIM
VIMvimmerの嘆きVIM
vim as a Lisp front end• Send whole buffer to interpreter• slime.vim - screen –X stuff• slimv - a swank client for vim• li...
Send whole bufferfunction! LispEval()execute “w”execute “r !sbcl –noinform < %”endfunctionau Filetype lisp nmap <C-j> :cal...
Send whole bufferfunction! LispEval()execute “w”execute “r !sbcl –noinform < %”endfunctionau Filetype lisp nmap <C-j> :cal...
Send whole buffer• C-jで編集中のファイルをsbclに送って結果を書き戻す• 確認したらuで消す• 編集 -> C-j -> u -> 編集 -> … というサイクル• 利点– 仕組みが圧倒的にわかりやすい– 対話環境を備え...
Schemeでもfunction! GoshEval ()execute "w“execute "r !gosh -i < %“endfunctionau Filetype scheme nmap <C-j> :call GoshEval<CR>
Haskellでもfunction! HaskellEval()execute "w“execute "r !ghci < %”endfunctionau Filetype haskell nmap <C-j> :call HaskellEva...
OCamlでもfunction! OCamlEval()execute "w“execute "r !ocaml < %“endfunctionau Filetype ocaml nmap <C-j> :call OCamlEval()<CR>
マイナー言語でもfunction! JoCamlEval()execute "w“execute "r !jocaml < %“endfunctionau Filetype ocaml nmap <C-j> :call JoCamlEval()...
screen –X stuff• screen –Xでscreenにscreen commandを送信できる– sessionは-Sで指定• 省略した場合は現在のsession– windowは-pで指定 (番号 or 名前)• 省略した場合は...
slime.vim• screen –X stuffを利用してフォームをscreenに起動してあるREPLに送るvim script• 利点– 内容を全部把握できる• 空行を除くと全体で20行しかない上に、動機から仕組みまで解説した作者のブログ...
slime.vimインストールと使い方• slime.vimを~/.vim/plugin/に配置• Lispソースを開いて評価したいフォーム上でC-c C-c– 起動して1回目ならREPLの起動しているsession名とwindowを聞かれる•...
slimv• vim用のSWANKクライアントSWANKserverVIMslimv TCP
環境とインストール環境– python enabledなvim (7.0以上)– python 2.4以上インストール– 展開して中身を.vim内にコピー
入手先やドキュメント• リポジトリ– https://bitbucket.org/kovisoft/slimv• リリース (Vim online)– http://www.vim.org/scripts/script.php?script_i...
キーバンド系列の設定<Leader>に1キー続ける2stroke系列と2キー続ける3stroke系列がある– 例) SWANKに接続2stroke : <Leader>c3stroke : <Leader>rc– let g:slimv_key...
その他の重要な設定項目<Leader>– デフォルトはカンマ(,)だが、後方ジャンプと衝突する– let g:slimv_leader = ‘’処理系– let g:slimv_impl = ‘sbcl’– デフォルトはCLISPparedit...
よく使うキーバインド• <Leader>c : SWANK serverに接続• <Leader>d : トップレベルフォームを評価• <Leader>r : 選択範囲を評価• <Leader>e : 式を評価• <Leader>1 : MAC...
その他• screen上だとSWANKもscreen上で起動するのでおすすめ• Common Lispだけでなく、MIT schemeやClojureでも使える• <Leader>d– <Leader>dはたまにうまく動作しない• 例) トップ...
limp• slimeを実装目指したもう1つのvim script• REPLを見ながら作業できない• REPL画面との切り替えがF12– HHKユーザには辛いキー• Vim onlineで配布しているが0.3.4のまま2008年6月から更新さ...
Upcoming SlideShare
Loading in...5
×

Before LIPSs Just Before the Past #1 ~vim as a Lisp front end~

3,383
-1

Published on

Introduce how to use vim as a lisp front end. In short, slimv is cool.
The contents is writte in Japanese.

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,383
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Before LIPSs Just Before the Past #1 ~vim as a Lisp front end~

  1. 1. BeforeLISPsJust Part of the Past~ #1 vim as a Lisp front end~
  2. 2. あるvimmerの嘆きVIM
  3. 3. あるvimmerの嘆きC-M-x がうらやましい…VIM
  4. 4. VIMvimmerの嘆きVIM
  5. 5. vim as a Lisp front end• Send whole buffer to interpreter• slime.vim - screen –X stuff• slimv - a swank client for vim• limp - another Lisp IDE for vim
  6. 6. Send whole bufferfunction! LispEval()execute “w”execute “r !sbcl –noinform < %”endfunctionau Filetype lisp nmap <C-j> :call LispEval()<CR>
  7. 7. Send whole bufferfunction! LispEval()execute “w”execute “r !sbcl –noinform < %”endfunctionau Filetype lisp nmap <C-j> :call LispEval()<CR>編集中のファイルをsbclに入力して結果を現在のバッファに書き戻すnormal modeのC-jを上記関数にマップ
  8. 8. Send whole buffer• C-jで編集中のファイルをsbclに送って結果を書き戻す• 確認したらuで消す• 編集 -> C-j -> u -> 編集 -> … というサイクル• 利点– 仕組みが圧倒的にわかりやすい– 対話環境を備えた言語なら大体使える• 欠点– とにかく効率が悪い。
  9. 9. Schemeでもfunction! GoshEval ()execute "w“execute "r !gosh -i < %“endfunctionau Filetype scheme nmap <C-j> :call GoshEval<CR>
  10. 10. Haskellでもfunction! HaskellEval()execute "w“execute "r !ghci < %”endfunctionau Filetype haskell nmap <C-j> :call HaskellEval<CR>
  11. 11. OCamlでもfunction! OCamlEval()execute "w“execute "r !ocaml < %“endfunctionau Filetype ocaml nmap <C-j> :call OCamlEval()<CR>
  12. 12. マイナー言語でもfunction! JoCamlEval()execute "w“execute "r !jocaml < %“endfunctionau Filetype ocaml nmap <C-j> :call JoCamlEval()<CR>
  13. 13. screen –X stuff• screen –Xでscreenにscreen commandを送信できる– sessionは-Sで指定• 省略した場合は現在のsession– windowは-pで指定 (番号 or 名前)• 省略した場合は現在のwindow• stuff commandで文字列を入力できる• screen –S lisp-session –p 0 –X stuff “’a^m”• なお、screenの文字列エスケープは大変複雑です。
  14. 14. slime.vim• screen –X stuffを利用してフォームをscreenに起動してあるREPLに送るvim script• 利点– 内容を全部把握できる• 空行を除くと全体で20行しかない上に、動機から仕組みまで解説した作者のブログ記事がある。– http://technotales.wordpress.com/2007/10/03/like-slime-for-vim/– 対話環境を備えた言語なら大体使える• 欠点– 事前にscreenをsession名付で起動したり、REPLを起動しておいたりするのがやや面倒– 補完やインデントまでサポートするように改良するのは大変。slime.vimという名前は盛りすぎ。
  15. 15. slime.vimインストールと使い方• slime.vimを~/.vim/plugin/に配置• Lispソースを開いて評価したいフォーム上でC-c C-c– 起動して1回目ならREPLの起動しているsession名とwindowを聞かれる• トップレベルフォームでは都合が悪い場合は範囲選択してC-c C-c• 送信先のsession/windowを変えたい場合はC-c v
  16. 16. slimv• vim用のSWANKクライアントSWANKserverVIMslimv TCP
  17. 17. 環境とインストール環境– python enabledなvim (7.0以上)– python 2.4以上インストール– 展開して中身を.vim内にコピー
  18. 18. 入手先やドキュメント• リポジトリ– https://bitbucket.org/kovisoft/slimv• リリース (Vim online)– http://www.vim.org/scripts/script.php?script_id=2531• チュートリアル– http://kovisoft.bitbucket.org/tutorial.html• ドキュメント– ~/.vim/doc/slimv.txt
  19. 19. キーバンド系列の設定<Leader>に1キー続ける2stroke系列と2キー続ける3stroke系列がある– 例) SWANKに接続2stroke : <Leader>c3stroke : <Leader>rc– let g:slimv_keybindings = 1 または 2• 1で2stroke (default), 2で3stroke– cross referenceはどちらの系列でも3stroke
  20. 20. その他の重要な設定項目<Leader>– デフォルトはカンマ(,)だが、後方ジャンプと衝突する– let g:slimv_leader = ‘’処理系– let g:slimv_impl = ‘sbcl’– デフォルトはCLISPparedit mode– let g:paredit_mode = 0 でoffにできる– デフォルトはonREPLに引数を渡す– let g:slimv_lisp = "sbcl --core $HOME/.sbcl/main.core --no-userinit"
  21. 21. よく使うキーバインド• <Leader>c : SWANK serverに接続• <Leader>d : トップレベルフォームを評価• <Leader>r : 選択範囲を評価• <Leader>e : 式を評価• <Leader>1 : MACROEXPAND-1• <Leader>v : 対話的評価– SLDB中では現在のフレーム内で評価• <Leader>a : Abort• <Leader>s : DESCRIBE• <Leader>y : 評価の中断
  22. 22. その他• screen上だとSWANKもscreen上で起動するのでおすすめ• Common Lispだけでなく、MIT schemeやClojureでも使える• <Leader>d– <Leader>dはたまにうまく動作しない• 例) トップレベルで‘a– 選択して<Leader>rがいつでも正しく動作する– (変な)リーダマクロを書いているときにはまることが多い
  23. 23. limp• slimeを実装目指したもう1つのvim script• REPLを見ながら作業できない• REPL画面との切り替えがF12– HHKユーザには辛いキー• Vim onlineで配布しているが0.3.4のまま2008年6月から更新されていない。– 作者のwebサイトは503。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×