最初からlisp環境には"あきらめが鬼なっていた"vimmerだがclojure環境はスゴイ揃ってる。

EvalToplevel

<LocalLeader>et

カーソルがあるとこのトップレベルのS式をreplに送る。

EvalFile

<LocalLeader>ef

ファイル全体をreplに送る。

EvalBlock

<LocalLeader>eb

VISUALモードで選択した部分をreplに送る。

EvalLine

<LocalLeader>el

カーソルのある行をreplに送る。

EvalParagraph

<LocalLeader>ep

カーソルのあるカッコ内をreplに送る。

RequireFile

<LocalLeader>rf

ファイルを:reloadフラグを付けて読み込む。

RequireFileAll

<LocalLeader>rF

ファイルを:reload-allフラグを付けて読み込む。

RunTests

<LocalLeader>rt

ファイルを:reloadフラグを付けて読み込んで、clojure.contrib.test-isのrun-testsでテスト実行する。

MacroExpand

<LocalLeader>me

カーソルのある一番内側のマクロを展開する。

MacroExpand1

<LocalLeader>m1

MacroExpandと同じだけどmacroexpand-1を使う。(一回だけ展開する奴)

DocLookupWord

<LocalLeader>lw

カーソルのあるとこのwordのdocを探して表示する。

DocLookupInteractive

<LocalLeader>li

プロンプトに任意の文字を入れてdocを探して表示する。

FindDoc

<LocalLeader>fd

入力したパターンを元にdocを探して表示する。(find-doc)

JavadocLookupWord

<LocalLeader>jw

カーソルのあるとこのwordのjavadocを外部ブラウザで開く。

JavadocLookupInteractive

<LocalLeader>ji

プロンプトに任意の文字を入れてjavadocを探して外部ブラウザで表示する。

SourceLookupWord

<LocalLeader>sw

カーソルのあるとこのwordのソースを表示する。ソースはCLASSPATHが通ってる必要がある。

SourceLookupInteractive

<LocalLeader>si

プロンプトに任意の文字を入れてソースを探して表示する。ソースはCLASSPATHが通ってる必要がある。

GotoSourceWord

<LocalLeader>gw

カーソルのある場所のwordのソースに飛ぶ。ソースはPATHが通ってる必要がある。CLOJURE_SOURCE_DIRS環境変数でPATHに追加しておく。

GotoSourceInteractive

<LocalLeader>gi

プロンプトに任意の文字を入れてソースに飛ぶ。ソースはPATHが通ってる必要がある。CLOJURE_SOURCE_DIRS環境変数でPATHに追加しておく。

MetaLookupWord

<LocalLeader>mw

カーソルのある場所のwordのメタデータを表示する。

MetaLookupInteractive

<LocalLeader>mi

プロンプトに任意の文字を入れてメタデータを表示する。

StartRepl

<LocalLeader>sr

新しいバッファに新しいreplをスタートする。同時に複数のreplがあるかも。

StartLocalRepl

<LocalLeader>sR

新しいバッファに新しいreplをスタートする。現在のバッファのnamespaceで初期化される。

AddToLispWords

<LocalLeader>aw

カーソルのある場所のwordをバッファのlispwordsオプションに追加する。これはフォームのインデントに使われる。

  • leiningen = rubygems + bundler
  • clojars.org = rubygems.org
  • nailgun = SWANK
  • vimclojure = SLIME

Clojure + Leiningen

leiningen入れるとclojureも入る。

% curl -O https://raw.github.com/technomancy/leiningen/stable/bin/lein
% chmod +x lein
% lein repl
Using JLine for console I/O; install rlwrap for optimum experience.
REPL started; server listening on localhost:29973.

rlwrap入れたほうが良いと出るので入れる。

% brew install rlwrap
% lein repl
REPL started; server listening on localhost:58951.
user=> 1234
1234
user=> (+ 1 2)
3
user=> (exit)

うん。

VimClojure

vimの場合はVimClojureというのが定番ぽい。VimClojureはSyntax Highlightingとかだけでも使えるんだけど、NailgunというCLで言えばSWANK的なものへのインターフェースが同伴されていて、clojureファイルを開くと同時にNailgun Serverに接続することが出来る。

Nailgun ServerもClientも別個にインストールする必要がある。

% vi ~/.vimrc
Bundle 'VimClojure'
let vimclojure#WantNailgun = 1
let vimclojure#NailgunClient = "ng"
:BundleInstall

Nailgun Client

% brew install nailgun

ngコマンドが使えるようになる。(上記のNailgunClientで指定してるのがコレ)

Nailgun Server

% lein plugin install org.clojars.autre/lein-vimclojure 1.0.0

lein plugin install xxx versionはleinのプラグインをインストールするのであって、ライブラリを入れてる訳じゃない。両方共clojars.orgにホストされてるので混同しないようにする。(依存ライブラリはproject.cljに書いて後述するlein depsで入れる)

lein helpするとlein vimclojureというサブコマンドが増えてる。

helloworld

% lein new helloworld
% cd helloworld
% tree
.
├── README
├── classes
├── lib
├── project.clj
├── src
│   └── helloworld
│       └── core.clj
└── test
    └── helloworld
        └── test
            └── core.clj
% lein deps

project.cljに書かれてるライブラリ(clojure処理系自身を含む)を取ってきてlibに入れてくれる。

% lein vimclojure
NGServer started on 127.0.0.1, port 2113.
% vi src/helloworld/core.clj

Terminal — vim — 80×24

あとはreplが開いてSLIMEみたいに評価できる。

vimのplugin管理ツール。pathogenだのなんだのとスルーしてきたけどいい加減効率も悪いので入れてみました。

% git submodule add git://github.com/gmarik/vundle.git .vim/vundle
set nocompatible
filetype off
set rtp+=~/.vim/vundle/
call vundle#rc()

Bundle 'rails.vim'
Bundle 'The-NERD-tree'
Bundle 'quickrun'
Bundle 'vim-ruby/vim-ruby'
Bundle 'Shougo/neocomplcache'

.vimrcにBundle 'foo'と書いておいて:BundleInstallでまるっとインストール。.vim/bundleを.gitignoreに入れておく。

そもそもvim良く分かってないのでゴチャゴチャしてしまって嫌だなあと思っていた俺の.vimディレクトリ以下がスッキリ!.vimrcとvundlerプラグインだけになった!

改めて自分の.vimrcを見て、本当に使ってるモノだけにしてみたらビックリするほどvimを活かしてないことが判明しました。ネオコンは"これからやる気だす"という意気込みの現れで、現在はまったく活用できておりません・・・。

参照:pathogen+git submodule から Vundle に乗り換える - Yarukidenized:ヤルキデナイズド

noremap ; :
noremap : ;

vimで上記のようにUSキーボードの時に:と;を入れ替える設定を教えてもらって使ってたんですが、幾つかのプラグインで違和感を感じつつも意識を殺してだましだましやってきました。

nmap pt :set paste

こういうのとか、

nmap nt :NERDTreeToggle

こういうのが動かなくなる。(こういうのよくやるでしょ?)

さっき設定見直してたら対処法がわかってスッキリした。

nmap pt ;set paste
nmap nt ;NERDTreeToggle

noremap ; :
noremap : ;

こんな感じで入れ替えは最後に書いて、キー設定は;でやる。

追記:

影響受けたくない奴は全部noremapすればいいそうです。

nnoremap pt :set paste
nnoremap nt :NERDTreeToggle

「どうせ大して変わらねえだろう」

という軽い気持ちでUSキーボードのパソコンを買ったんですが、違いの大きさに苦戦中です。USキーボードとvimについて現在の疑問を羅列してみました。

日本語変換キー

USキーボードではCmd+Spaceが日本語変換キーです。これは配置からいってどうにも押しづらい。KeyRemap4MacBookのCommand_R to Command_R(+ When you type Command_R only, send Command+Space)で右Cmdに割り当ててみましたが、コレ、完全に他のキーを押してない状態で右Cmdを押さないといけないのでかなり使い辛いです。普通みなさん何に割り当ててるんでしょうか?

vimのコロン

USキーボードではコロンはShiftを押す必要があります。vimで使いまくりのコロンが両手必須というのは厳しい。

noremap ; :
noremap : ;

という設定を教わって便利になりましたが、普通どうやってるんでしょうか?

他にもUSキーボード、vimユーザーなら普通はコレやってるぜ!というのがあったら教えていただければ嬉しいです。