求めていたものを解決してくれてありがとう。
Leiningen には:injectionsと呼ばれる機能があり、vinyasaと組み合わせてこの効果を得ることができます。
~/lein/profiles.clj:
{:user {:plugins []
:dependencies [[im.chit/vinyasa "0.1.8"]]
:injections [(require 'vinyasa.inject)
(vinyasa.inject/inject
'clojure.core '>
'[[clojure.repl doc source]
[clojure.pprint pprint pp]])]}}
これは profile.clj にあるため、影響を受けるのはあなただけです。プロジェクトで作業する他の人は影響を受けません。
clojure.core にインジェクトするのは少し難しいと思うので、vinyasa の作者のアドバイスに従い、 という名前の名前空間にインジェクトします。これは、私が取り組んでいるすべてのプロジェクトのプロファイルによって作成されます。この名前空間は常に存在するため、これらの関数は、まだ clojure.core を参照していない新しく作成された名前空間でも機能します。
私の ~/.lein/profiles.clj:
{:user
{:plugins []
:dependencies [[spyscope "0.1.4"]
[org.clojure/tools.namespace "0.2.4"]
[io.aviso/pretty "0.1.8"]
[im.chit/vinyasa "0.4.7"]]
:injections
[(require 'spyscope.core)
(require '[vinyasa.inject :as inject])
(require 'io.aviso.repl)
(inject/in ;; the default injected namespace is `.`
;; note that `:refer, :all and :exclude can be used
[vinyasa.inject :refer [inject [in inject-in]]]
[clojure.pprint :refer [pprint]]
[clojure.java.shell :refer [sh]]
[clojure.repl :refer [doc source]]
[vinyasa.maven pull]
[vinyasa.reflection .> .? .* .% .%> .& .>ns .>var])]}}
次のように機能します。
hello.core> (./doc first)
-------------------------
clojure.core/first
([coll])
Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil.
nil
hello.core> (in-ns 'new-namespace)
#namespace[new-namespace]
new-namespace> (./doc first)
nil
new-namespace> (clojure.core/refer-clojure)
nil
new-namespace> (./doc first)
-------------------------
clojure.core/first
([coll])
Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil.
nil