我开始编写这段代码片段是为了实现 "git add -p" 命令:
(add-hook
'diff-mode-hook
(lambda()
(mapc (lambda(k)
(lexical-let ((kk k))
(define-key diff-mode-map k
(lambda()(interactive)
(if (region-active-p)
(replace-regexp "^." kk
nil
(region-beginning)
(region-end))
(insert kk)))))) (list " " "-" "+"))))
它按照我的意愿工作,只是“lexical-let”在中间部分的丑陋让我感到困扰。我必须添加它,因为嵌套的lambda函数无法看到变量“k”。是否有更好的编写此代码的方法?我希望有一个神奇的'lexic-lambda'函数,可以让我编写:
(add-hook
'diff-mode-hook
(lambda()
(mapc (lexical-lambda(k)
(define-key diff-mode-map k
(lexical-lambda()(interactive)
(if (region-active-p)
(replace-regexp "^." k
nil
(region-beginning)
(region-end))
(insert k)))))) (list " " "-" "+")))