- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在为类似 Lisp 的语言编写一个简单模式,但在设置缩进时遇到了问题。我一直在关注 emacswiki mode tutorial .
但是,我不知道如何根据我的需要调整他们的示例缩进,因为他们不进行任何形式的计数。
基本上,每次我看到 {
或 (
时,我只需要在缩进计数中添加 2 个空格,即使在同一行上有多个,并且当我看到上面的闭包时减去 2 个空格。我是 elisp 的新手;我如何调整他们的示例以计算大括号和方括号?
为方便起见,这是他们使用的代码(对于非方括号语言):
(defun wpdl-indent-line ()
"Indent current line as WPDL code"
(interactive)
(beginning-of-line)
(if (bobp) ; Check for rule 1
(indent-line-to 0)
(let ((not-indented t) cur-indent)
(if (looking-at "^[ \t]*END_") ; Check for rule 2
(progn
(save-excursion
(forward-line -1)
(setq cur-indent (- (current-indentation) default-tab-width)))
(if (< cur-indent 0)
(setq cur-indent 0)))
(save-excursion
(while not-indented
(forward-line -1)
(if (looking-at "^[ \t]*END_") ; Check for rule 3
(progn
(setq cur-indent (current-indentation))
(setq not-indented nil))
; Check for rule 4
(if (looking-at "^[ \t]*\\(PARTICIPANT\\|MODEL\\|APPLICATION\\|WORKFLOW\\|ACTIVITY\\|DATA\\|TOOL_LIST\\|TRANSITION\\)")
(progn
(setq cur-indent (+ (current-indentation) default-tab-width))
(setq not-indented nil))
(if (bobp) ; Check for rule 5
(setq not-indented nil)))))))
(if cur-indent
(indent-line-to cur-indent)
(indent-line-to 0))))) ; If we didn't see an indentation hint, then allow no indentation
我怎样才能实现类似 lisp 的缩进(而且还带有花括号)?
最佳答案
如果你想为 Lisp 风格的语言做些简单的事情,我建议你从 (syntax-ppss)
开始,它返回 point 的“解析状态”。该状态的第一个元素是当前的嵌套深度。虽然我使用了“paren”这个词,但这并没有真正计算 parens,而是计算语法表定义为 paren-like 的那些字符,所以如果你设置你的语法表使得 { 和 } 被声明为 paren-like , 那么这些也将被计算在内。
所以你可以从类似的东西开始
(defun foo-indent-function ()
(save-excursion
(beginning-of-line)
(indent-line-to (* 2 (car (syntax-ppss))))))
不要将其定义为交互式,因为使用它的方式是通过添加
(set (make-local-variable 'indent-line-function) #'foo-indent-function)
在你的主模式函数中。
但也许更好的选择是简单地做:
(require 'smie)
...
(define-derived-mode foo-mode "Foo"
...
(smie-setup nil #'ignore)
...)
这将使用 4 步缩进(在 smie-indent-basic
中配置)。
关于emacs - 创建 emacs 模式 : defining indentation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22989800/
这很奇怪,我只是在变量设置中进行了更改以使用哈希代替......你知道: black = #000 替换为: colors = { 'black': #000 // and so o
这很奇怪,我只是在变量设置中进行了更改以使用哈希代替......你知道: black = #000 替换为: colors = { 'black': #000 // and so o
我有这行代码,在测试 pep8 错误时我得到:线太长。因此,为了尝试解决此问题,我使用了 slash('\') 但随后我将延续行过度缩进以进行视觉缩进。我该怎么做才能解决这个问题? 我尝试过的事情:
我在下面的代码中收到一个 continuation line under-indented for visual indent 错误: command = 'ffmpeg -i downloa
我就是想不通这是怎么回事…… #!/usr/bin/env python # # Bugs.py # from __future__ import division # No
我是一个 Emacs 用户,在配置编辑器方面没有任何技能。我从 haskell-mode 升级后从 2.4 到 2.7,我注意到两个变化: 缩进在某种程度上是不同的,在某种程度上我不太喜欢。我不能完全
我正在尝试制作一个嗅探DNS数据包的程序,然后将数据包的qname放入字典的“键”中,并将数据包的dst ip放入字典的“值”中,由于某种原因,我遇到了此错误在第6行 from scapy.all
为了进行比较: 在Sublime(以及Atom)中,如果我在已经有4个制表符空间的代码行下按Tab,Sublime将自动跳到上一行的相同制表符间距(4个制表符空间)。 在VS Code中,当尝试完成相
无论我以哪种方式编写以下函数都会引发错误。 @staticmethod def _generate_clone_spec(param1=None, p
我正在 Sublime 文本编辑器中使用 Python。我被添加PEP8 packages . 我将 128 添加到以下文件“pep8_ignore”中。添加128并保存后。 Preferences
我从这里得到了 Google java 风格: https://github.com/google/styleguide/blob/gh-pages/eclipse-java-google-style
刚刚使用 Sublime Text(使用 Sublime Linter)打开了一个文件,并注意到我以前从未见过的 PEP8 格式错误。正文如下: urlpatterns = patterns('',
我已安装 google-java-format插件 IntelliJ我已经启用了插件。当我格式化代码时,我的 java 代码缩进了 2 个空格。如何将 google java 格式化程序插件设置更改为
Haskell Parsec 的 indents 包提供了一种解析缩进式语言(如 Haskell 和 Python)的方法。它重新定义了 Parser类型,那么如何使用 Parsec 的 Text.P
我想让我的代码更有条理。因此,每当我从我的functions.php 文件中复制一个函数并将其粘贴到一个类中时,我需要将函数的每一行缩进一次或多次,以便于阅读并且看起来更美观。我的一些函数只不过是巨大
我直接从教科书中复制了这个 block ,并收到许多错误消息,但我无法解决其中的任何一个。我已经阅读并重读了我书中的这一部分,据我所知,这都是一个 block ,所以我很困惑为什么会有意外的缩进。我将
我直接从教科书中复制了这个 block ,并收到许多错误消息,但我无法解决其中的任何一个。我已经阅读并重读了我书中的这一部分,据我所知,这都是一个 block ,所以我很困惑为什么会有意外的缩进。我将
我一直在尝试找到一种也适合回溯缩进的递归下降解析器算法。但我一直让自己为此寻找麻烦的解决方案。 是否有任何资源也可以处理缩进? 谢谢 最佳答案 根据您的问题,我假设您正在为缩进敏感语言编写自己的递归下
有时,当我在 Sublime text2 中编辑 coffeescript 文件时,将其编译为 js 时出现错误: error: unexpected INDENT
我的main.sass中有这个: #thing { -moz-box-sizing: border-box; -webkit-box-sizing: border
我是一名优秀的程序员,十分优秀!