我一直在阅读一些Emacs Lisp软件包,并且遇到了一些函数的约定 - 在库前缀之后,例如:
(defun eproject--combine-regexps (regexp-list)
Run Code Online (Sandbox Code Playgroud)
我想知道这是否是向图书馆声明"私人"功能的惯例,但到目前为止我还没有在Emacs编码指南中找到任何内容.
一些文献说"以下形式的第一个子形式......"或"评估形式......",而其他一些文献说"评估表达......",大多数文献似乎都使用这两个术语.这两个术语是否可以互换?意义上有区别吗?
短反引号和长反引号之间似乎存在一些差异.
(let ((x 123))
(dolist (res (list `(a `(b ,x))
`(a (backquote (b ,x)))
(backquote (a (backquote (b ,x))))
(backquote (a `(b ,x)))))
(print res)))
Run Code Online (Sandbox Code Playgroud)
输出:
(a (\` (b (\, x))))
(a (backquote (b 123)))
(a (backquote (b 123)))
(a (\` (b (\, x))))
Run Code Online (Sandbox Code Playgroud)
为什么它对x的行为有所不同?甚至不确定四个结果中的哪两个应该是令人惊讶的结果.
在Emacs中,打字后
M-x revert-buffer-with-coding-system
Run Code Online (Sandbox Code Playgroud)
我可以看到很多类型的'utf-8',例如,utf-8,utf-8-auto-unix,utf-8-emacs-unix等.
我想知道他们之间有什么区别.
我用谷歌搜索了他们但找不到合适的答案.
PS
我问这个问题是因为几个月前我遇到了编码问题.我在Emacs和我的〜/ .emacs中编写了一个php程序,我设置了
(prefer-coding-system 'utf-8)
Run Code Online (Sandbox Code Playgroud)
但是当在浏览器中浏览php页面时,我发现由于编码问题导致浏览器无法正确显示内容,即使我已经写过
<meta name="Content-Type" content="text/html; charset=UTF-8" />
Run Code Online (Sandbox Code Playgroud)
在页面中.
但是在我使用notepad ++将文件存储在utf-8中后,浏览器可以正确显示内容.
所以我想了解更多有关Emacs编码的信息.
http://www.aiai.ed.ac.uk/~jeff/lisp/cl-pitfalls将此列为Common Lisp陷阱之一
您认为会修改CDR的破坏性功能可能会修改CAR.(例如,NREVERSE.)
我不确定我应该采取什么预防措施.我可以从NREVERSE修改CDR的事实中采取的常规预防措施是仅当列表(参数)不与我的变量稍后可能引用的任何其他列表共享尾部时使用NREVERSE(除了变量我保存返回值)至).我应该从NREVERSE可以修改CAR的事实中采取什么预防措施?这件事需要注意什么?
以下emacs lisp文件是关于当Alice foo在她的init文件中使用词法绑定的局部变量并且Bob 在他的init文件中定义foo为全局特殊变量defvar并且Alice将Bob的init文件代码的一部分借入她自己的init文件时发生的事情.知道这foo会变得特别.
;; -*- lexical-binding: t; -*-
;; Alice init file
;; Alice defining alice-multiplier
(defun alice-multiplier-1 (foo)
(lambda (n) (* n foo)))
(defun alice-multiplier-2 (num)
(let ((foo num))
(lambda (n) (* n foo))))
;; Alice using alice-multiplier
(print
(list
:R1 (mapcar (alice-multiplier-1 10) (list 1 2 3))
:R2 (mapcar (alice-multiplier-2 10) (list 1 2 3))))
;; from Bob's code
;; ...
(defvar foo 1000)
;; ...
;; Alice using alice-multiplier …Run Code Online (Sandbox Code Playgroud) 它改变
(a b c d (1 2 |3 4) ha ha ha)
Run Code Online (Sandbox Code Playgroud)
成
|(1 2 (a b c d 3 4 ha ha ha))
Run Code Online (Sandbox Code Playgroud)
这种转变有什么用?
"标记是否处于活动状态"只是意味着与Emacs中的"区域处于活动状态"相同,无论是否启用了瞬态标记模式?因此激活标记与激活区域相同?
我感到很困惑,因为在很多地方似乎可以互换地使用两个短语,而region-active-p的定义似乎采取的立场是,当且仅当启用了瞬态标记模式且标记处于活动状态时,该区域才被认为是活动的.
(defun region-active-p ()
"Return t if Transient Mark mode is enabled and the mark is active.
Some commands act specially on the region when Transient Mark
mode is enabled. Usually, such commands should use
`use-region-p' instead of this function, because `use-region-p'
also checks the value of `use-empty-active-region'."
(and transient-mark-mode mark-active))
Run Code Online (Sandbox Code Playgroud)
是什么关系
区域突出显示(即区域的背景颜色不同)
地区活跃
马克是活跃的
当启用瞬态标记模式时,以及何时禁用它?
有些人使用双短划线表示函数可能会发生变化: 函数名中的双减号( - )约定在Emacs Lisp中是什么意思
internal功能名称中包含的含义是否相似?
两个例子
where-is-internal
internal-make-var-non-special
Run Code Online (Sandbox Code Playgroud)
该函数where-is-internal具有详细的文档字符串,并在手册中也有提及.是where-is-internal一个例外吗?
-internal作为后缀和internal-作为前缀之间有区别吗?
更令人困惑的是,还有一些函数名称internal--(带有双短划线)作为前缀.
假设我有这个代码
(hello world)
(hi world)
Run Code Online (Sandbox Code Playgroud)
然后我想到我应该用以下形式包装它:
(let (acc)
<>
(nreverse acc))
Run Code Online (Sandbox Code Playgroud)
导致此代码:
(let (acc)
(hello world)
(hi world)
(nreverse acc))
Run Code Online (Sandbox Code Playgroud)
这是我通常做包装的方式.首先,我在待包装的表单之前写一个不完整的外部表单,如下所示:
(let (acc))
(hello world)
(hi world)
Run Code Online (Sandbox Code Playgroud)
然后我按两次C-)(paredit-forward-slurp-sexp)来啜饮东西:
(let (acc)
(hello world)
(hi world))
Run Code Online (Sandbox Code Playgroud)
然后我(nreverse acc)在最后添加完成.
现在我想知道如果我开始首先编写这样的完整外部表单模板?
(let (acc)
(nreverse acc))
(hello world)
(hi world)
Run Code Online (Sandbox Code Playgroud)
或者像这样
(hello world)
(hi world)
(let (acc)
(nreverse acc))
Run Code Online (Sandbox Code Playgroud)
是否有一个简短的paredit或非paredit命令序列,我可以按此完成从那开始的工作?
我可以移动点,剪切两个待包装的表格,移动点,粘贴表格.但我想知道是否有更方便的方式.
我对如何进行包装感到满意,但感觉我可能会错过一些其他整齐的编辑技巧,这些技巧可以从不同的开始找到.