在Emacs中显示当前缓冲区的语法表名称

在Emacs中显示当前缓冲区的语法表名称,emacs,elisp,Emacs,Elisp,如何找出当前缓冲区中使用的语法表 C-h s显示语法表本身,但其中没有提到它的名称……或者至少我在那里找不到它。我认为您混淆了Lisp变量及其语法表值。语法表没有名称 听起来您想要一个当前值为当前语法表的变量的名称。如果是这样,这通常是错误的 语法表根本不需要与变量相关联 但是,您可以做的是查看当前主模式是否有名为MODENAME mode syntax table的变量,其中MODENAME是主模式名称。每当主模式有自己的语法表时,通常都会遵循这一约定。请参阅Elisp手册,节点主要模式约定

如何找出当前缓冲区中使用的语法表


C-h s显示语法表本身,但其中没有提到它的名称……或者至少我在那里找不到它。

我认为您混淆了Lisp变量及其语法表值。语法表没有名称

听起来您想要一个当前值为当前语法表的变量的名称。如果是这样,这通常是错误的

语法表根本不需要与变量相关联

但是,您可以做的是查看当前主模式是否有名为
MODENAME mode syntax table
的变量,其中
MODENAME
是主模式名称。每当主模式有自己的语法表时,通常都会遵循这一约定。请参阅Elisp手册,节点
主要模式约定

如果是这种情况,那么只需检查
MODENAME mode syntax table
的值即可。如果没有这样的变量,那么至少你会发现。您还可以检查当前语法表是否等于该变量的值。如果没有这样的变量,您至少可以检查当前语法表是否等于variable
standard syntax table
的值

这就是您所能做的,以获得类似于“当前语法表的名称”的内容

但这听起来像是一个错误。瞧,也许你应该说一下你为什么要找表“name”。陈述你试图解决的真正问题(作为一个单独的问题)


Update:以可读形式显示给定语法变量的语法表的命令

(定义描述语法变量(变量)
描述给定语法变量的语法规范。
说明将插入帮助缓冲区,然后显示。“
(互动
(let((v(点处变量))
(启用递归微型缓冲区)
瓦尔)
(setq val(完成读取)(如果(符号v)
(格式
描述语法变量(默认值%s):“v)
描述语法变量:)
奥巴雷
(λ(vv)
(或(获取vv变量文档)
(和(边界vv)(非(关键字p vv()())))
t零零零
(和(符号v)(符号名称v)))
(列表(如果(等于val“”)v(内部val()())))
(帮助设置外部参照(列表#'descripe-syntax-variable)
(称为交互p’交互)
(带帮助窗口(帮助缓冲区)
(带当前缓冲区标准输出)
(setq变量(符号值变量))
(描述向量变量的内部描述语法值)
(while(setq变量(char表父变量))
(插入“\n父语法表为:”)
(描述向量变量“内部描述语法值(()()())”)

看起来syntax table实际上是一个ELisp变量的值。我能够使用C-HV
MODENAME模式语法表确认它。虽然它不能正确显示表格(如C-h s),但对我来说已经足够了,因为我只想确认是否有一个主模式的特殊表格。谢谢:)我添加了一些显示变量值的代码,就像
C-hs
一样。哇,这正是我需要的。尽管我最近才从Vim迁移到Emacs,这是我第一次体验函数式编程,但将这段代码放入我的
init.el
中就足够了,我能够使用
M-x descripe syntax variable
调用命令
descripe syntax variable
。非常感谢:)仅供参考-我所做的只是将
descripe syntax
的代码稍微调整为(a)提示输入变量(代码取自
descripe variable
)和(b)使用该变量的值,而不是当前缓冲区的语法表。关键是,在Emacs中定制自己的命令通常非常容易。