Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
flex和bison的Emacs模式,或者删除这些模式的自动缩进?_Emacs_Elisp_Indentation_Bison_Flex Lexer - Fatal编程技术网

flex和bison的Emacs模式,或者删除这些模式的自动缩进?

flex和bison的Emacs模式,或者删除这些模式的自动缩进?,emacs,elisp,indentation,bison,flex-lexer,Emacs,Elisp,Indentation,Bison,Flex Lexer,Emacs在Flex和Bison中的自动缩进处理能力较差。事实上,它似乎不支持flex模式。那么,emacs用户如何处理这些问题呢?我喜欢VIm,但我不想切换,因为我在Emacs中更快更舒服 几个月前,我为Bison设计了一个第三方elisp模块,但当它的凹口破裂时,它就再也无法修复了。简言之,这是一次糟糕的黑客攻击 或者有没有一种方法可以关闭.l和.y文件的自动缩进功能(这样按一下就可以缩进一次)?如何仅为emacs更改此elisp设置 为elisp准备一份简洁的指南也会很有帮助。如果我有合适

Emacs在Flex和Bison中的自动缩进处理能力较差。事实上,它似乎不支持flex模式。那么,emacs用户如何处理这些问题呢?我喜欢VIm,但我不想切换,因为我在Emacs中更快更舒服

几个月前,我为Bison设计了一个第三方elisp模块,但当它的凹口破裂时,它就再也无法修复了。简言之,这是一次糟糕的黑客攻击

或者有没有一种方法可以关闭.l和.y文件的自动缩进功能(这样按一下就可以缩进一次)?如何仅为emacs更改此elisp设置


为elisp准备一份简洁的指南也会很有帮助。如果我有合适的文档,我不介意花几天时间编写我自己的flex和bison模式。

Emacs主要根据文件扩展名选择主要模式
.l
是一个有争议的扩展:有些人将其用于lex,另一些人用于lisp(还有一些其他罕见的用途)。Emacs将
.l
与lisp相关联,将
.lex
与lex相关联(它使用C模式)

如果使用的
.l
文件通常是lex而不是lisp,则可以更改
.l
文件与
.emacs
中的以下行关联的内容:

(add-to-list 'auto-mode-alist '("\\.l\\'" . c-mode))
您还可以在文件中声明您希望Emacs在打开文件时使用的模式。将以下代码段放在文件的第一行(通常在注释中):

这是一个更通用的特性,提供了其他语法和其他可能性;有关更多信息,请参阅Emacs手册中的“文件变量”



如果您想开始使用Emacs Lisp,请阅读(可能包含在您的Emacs或OS发行版中)。一旦您熟悉了该语言的基本知识,就可以转到《Emacs Lisp参考手册》中关于模式的章节。

附加提示:您可能会决定,您想要的是Emacs的通用行为——当它没有任何文件格式的特殊模式时,它会使用什么。这在emacs行话中称为基本模式:因此您可以使用
M-x基本模式
动态请求它,或者将
-*-mode:basical-*-
放在文件的第一行,或者自定义自动模式列表,如下所示:

(add-to-list 'auto-mode-alist '("\\.l\\'" . fundamental-mode))

另一种尝试可能是缩进文本模式(可能禁用了自动填充)。

我不确定“关闭.l和.y文件的自动缩进”是什么意思。modeline声称处于什么模式?您可以通过修改auto-mode-alist来调整它。对于bison,它似乎处于C模式。对于Flex,它处于Lisp模式。Bison的C模式是可以接受的,但Emacs似乎没有Lex或Flex模式。您可能已经看到了这一点,但如果没有,请让我向您介绍以下问题:我将在家中的Emacs设置中尝试此功能。。。我不完全确定,但我认为Flex/Lex在C模式下有问题(特别是在规则部分)。例如,如果行的第一个字符不是空白,Flex将其解释为要匹配的模式。在C模式下,如果我想把一些代码放在与规则相对应的位置,除非我强制缩进,否则我将无法将它移到右边,这是一个乏味的过程。有什么简单的解决方案或想法吗?@PlaZmaZ:我认为你不写一点代码就无法解决这个问题。lex或yacc模式将从C模式派生(在Emacs Lisp手册中查找“派生模式”)。CC模式有一个复杂的缩进引擎,我从来没有研究过;我认为“高级自定义”部分会引起您的兴趣。有关语法着色,请查找“字体锁定模式”。
(add-to-list 'auto-mode-alist '("\\.l\\'" . fundamental-mode))