如何设置全局覆盖的键绑定,并优先于该键的所有其他绑定?我想覆盖所有主要/次要模式映射,并确保我的绑定始终有效.
这当然不起作用:
(global-set-key "\C-i" 'some-function)
Run Code Online (Sandbox Code Playgroud)
它起作用text-mode
,但是当我使用时lisp-mode
,C-i
它会反弹lisp-indent-line
.
我可以lisp-mode
单独完成并在每个其他模式中覆盖此绑定,但必须有一个更简单的方法.每次我为新文件类型安装新模式时,我都必须返回并检查以确保所有的键绑定都没有被新模式覆盖.
我想这样做是因为我想模仿我已经学习并从其他编辑器根深蒂固的绑定.
我正在寻找一种算法来生成集合的排列,这样我就可以在Clojure中创建它们的惰性列表.即我想迭代一个排列列表,其中每个排列都不计算,直到我请求它,并且所有排列不必一次存储在内存中.
或者我正在寻找一种给定某个集合的算法,它将返回该集合的"下一个"排列,以这种方式在自己的输出上重复调用该函数将循环遍历原始集合的所有排列,一些订单(订单无关紧要).
有这样的算法吗?我见过的大多数排列生成算法都倾向于一次性生成它们(通常是递归的),这些算法不能扩展到非常大的集合.Clojure(或其他函数式语言)中的实现会有所帮助,但我可以从伪代码中找出它.
你会如何标记缓冲区中与其他行完全重复的所有行?通过标记它们,我的意思是突出显示它们或添加角色或其他东西.我想保留缓冲区中行的顺序.
之前:
foo
bar
foo
baz
Run Code Online (Sandbox Code Playgroud)
后:
foo*
bar
foo*
baz
Run Code Online (Sandbox Code Playgroud) 在Common Lisp中你可以这样做:
(defun foo (bar &key baz quux)
(list bar baz quux))
(foo 1 :quux 3 :baz 2) ; => (1 2 3)
Run Code Online (Sandbox Code Playgroud)
Clojure没有关键字参数.一种选择是:
(defn foo [bar {:keys [baz quux]}]
(list bar baz quux))
(foo 1 {:quux 3 :baz 2}) ; => (1 2 3)
Run Code Online (Sandbox Code Playgroud)
这是太多的嵌套括号,必须一直打字和阅读.它还需要将显式散列映射作为参数而不是平面列表传递.
什么是最惯用的Clojure相当于关键字参数,看起来没有人引发标点炸弹?
如何在拆分窗口中打开多个文件.如果我不清楚,每个文件有一个分区.
我想做点什么.:sp app/views/*.erb
并在他们自己的分割窗口中打开~7个文件.
有人可以建议解释同性恋概念的文章,特别是使用Clojure.为什么Clojure是homoiconic,但在其他语言如Java中很难做到这一点?
在Vim中我可以:set wrapscan
这样,当我做一个增量搜索,光标跳到第一个匹配的第一个匹配是否高于或低于该光标.
在Emacs的,如果我开始通过搜索C-s
,搜索失败说做不到我的搜索,如果第一场比赛光标上面.如果我C-s
再次点击它然后包装搜索,说Wrapped I-search.默认情况下如何在Vim中包装和跳转光标,而不必C-s
第二次?
根据Emacs文档,每次打开文件时,Emacs都会更改default-directory
为包含该文件的目录.
然后,如果光标位于该缓冲区中并且您(例如)启动SLIME,则它将default-directory
用作SLIME 的当前工作目录.如果您尝试打开一个新文件,它将打开文件default-directory
作为起点.
我希望能够M-x cd
或以其他方式cd
访问目录,然后永远不会让Emacs将我当前的工作目录更改为除该目录之外的任何内容,直到我告诉它.我希望它在所有缓冲区中都是全局的,所以无论何时我正在做涉及当前工作目录的事情,我都知道它的设置是什么,无论我的光标在哪里.有没有办法做到这一点?
我正在尝试并行过滤元素.对于每个元素,我需要执行距离计算以查看它是否足够接近目标点.不要因为这样做已经存在数据结构,我现在只做初步实验.
无论如何,我想运行一些非常基本的实验,我生成随机向量并过滤它们.这是我的实现,完成所有这些
(defn pfilter [pred coll]
(map second
(filter first
(pmap (fn [item] [(pred item) item]) coll))))
(defn random-n-vector [n]
(take n (repeatedly rand)))
(defn distance [u v]
(Math/sqrt (reduce + (map #(Math/pow (- %1 %2) 2) u v))))
(defn -main [& args]
(let [[n-str vectors-str threshold-str] args
n (Integer/parseInt n-str)
vectors (Integer/parseInt vectors-str)
threshold (Double/parseDouble threshold-str)
random-vector (partial random-n-vector n)
u (random-vector)]
(time (println n vectors
(count
(pfilter
(fn [v] (< (distance u v) threshold))
(take vectors (repeatedly random-vector)))))))) …
Run Code Online (Sandbox Code Playgroud) Emacs有Paredit,它可以主动阻止你输入不平衡的括号(C-Q (
强制插入文字或其他疯狂).插入打开的paren也会插入一个关闭的paren.在paren上的后退可以删除开始和关闭的paren,也可以两者都不删除.有一些快捷方式可以在新的parens中包含一个简单的单词,从当前封闭的parens中掏出一个单词,扩展parens来啜饮更多附近的单词,等等.
就像是
imap ( ()<Left>
Run Code Online (Sandbox Code Playgroud)
可以让你开始在Vim.但是,在Vim中模仿Paredit的其他更强大功能的最佳方法是什么?
clojure ×4
emacs ×4
vim ×3
lisp ×2
algorithm ×1
binding ×1
common-lisp ×1
duplicates ×1
parentheses ×1
search ×1