首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Emacs Lisp中,如何检查是否定义了变量?

在Emacs Lisp中,您可以使用boundp函数来检查一个变量是否已经定义。boundp函数接受一个变量名作为参数,并返回一个布尔值,表示该变量是否已经定义。

例如,要检查变量my-variable是否已经定义,可以使用以下代码:

代码语言:lisp
复制
(if (boundp 'my-variable)
    "my-variable is defined"
  "my-variable is not defined")

如果my-variable已经定义,则会输出"my-variable is defined",否则输出"my-variable is not defined"。

在Emacs Lisp中,还可以使用symbol-value函数来获取变量的值,如果变量未定义,则会抛出一个错误。因此,您也可以使用以下代码来检查变量是否定义:

代码语言:lisp
复制
(condition-case nil
    (symbol-value 'my-variable)
  (void-variable "my-variable is not defined"))

如果my-variable已经定义,则会返回其值,否则会输出"my-variable is not defined"。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在Bash检查变量是否已设置

更多好文请关注↑ 问: Bash 如何知道变量是否已设置? 例如,我如何检查用户是否给函数提供第一个参数? function a { # if $1 is set ?...由于这种语法与用法保证它只会扩展成不需要引用的内容(因为它要么扩展为 "x"(其中不含单词分隔符,因此无需引号),要么不扩展任何内容),所以可以省略引号(即我们可以写作 然而,虽然引号可以安全地省略...首位作者还在使用这种解决方案的代码旁添加了注释,并附上了指向本答案的 URL,现在该答案也包含了为什么可以安全省略引号的解释。...该方式使用了 Bash 手册 Shell Parameter Expansion 章节的 {parameter:+word} 形式,省略冒号的情况下( {parameter+word} ),则仅测试参数是否存在...另外,如果使用的 Bash 版本为 4.0 及以上版本,则可使用 -v varname 来测试变量是否设置。

15810

一名Clojurian的Emacs配置

这就不得不提起Clojure这门lisp方言,出于对lisp和函数式编程的痴迷,我选择基于JVM的Clojure作为自己的偏好语言,而emacs天生为lisp而生。...接下来,只需要使用c-h v和c-h f查看elisp定义变量函数就能很快上手自行配置。...这种时候,我心中就蹦跶出一句话“世界上本没有矛盾,如果出现检查你都有哪些前提条件,就会发现其中一个是错的”。这种非异常的知识点很难通过搜索引擎找到满意的答案,而阅读文档恰恰是最合适的解决方式。...按照惯例,我~/.emacs.d目录下建立一个lisp目录用于存放所有自定义的模块文件,随后init.el中加入下面这句代码,意在把lisp目录加到emacs的加载路径列表里。...(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory)) 看似,接下来就可以每个独立的模块文件编写各种功能的配置

2.7K20

Emacs Lisp

; 第一步首先启动Emacs: (windows可以双击emacs图标,Linux可以输入% emacs & ), ;; 然后键盘上键入q 跳过系统欢迎的信息, ;; 先观察Emacs屏幕的底部...;; 缓冲区也叫做工作区,Emacs打开一个文件,实际只是Emacs构造该文件的一个副本,放到缓冲区, ;; Emacs对该文件的编辑也是针对该副本的编辑,唯有保存改动时,Emacs才会把缓冲区的内容复制到原文件中去...;; 为了实验本教程lisp命令,我们要让Emacs工作lisp-interaction-mode工作模式下, ;; 这个模式可以让我们缓冲区中和Emacs进行互动,并且直接执行Lisp命令,得到结果..." my-name)) ;; ^ 把光标停在这里,再键入C-x C-e 执行defun命令来定义函数 ;; 通过defun命令,你已经Emacs安装了这个hello函数,这个函数就成为了Emacs的一部分...下面的一系列命令 ;; let函数首先定义local-name变量的值为“you” ;; 然后接着执行括号其它的语句块部分,这个功能和progn类似 (let ((local-name "you"

2.3K40

Emacs Lisp2

Emacs: (windows可以双击emacs图标,Linux可以输入% emacs & ),;; 然后键盘上键入q 跳过系统欢迎的信息,;; 先观察Emacs屏幕的底部,会给出一堆关于当前的工作情况的信息...;; 缓冲区也叫做工作区,Emacs打开一个文件,实际只是Emacs构造该文件的一个副本,放到缓冲区,;; Emacs对该文件的编辑也是针对该副本的编辑,唯有保存改动时,Emacs才会把缓冲区的内容复制到原文件中去...;; 为了实验本教程lisp命令,我们要让Emacs工作lisp-interaction-mode工作模式下,;; 这个模式可以让我们缓冲区中和Emacs进行互动,并且直接执行Lisp命令,得到结果...));; ^ 把光标停在这里,再键入C-x C-e 执行defun命令来定义函数;; 通过defun命令,你已经Emacs安装了这个hello函数,这个函数就成为了Emacs的一部分,知道你退出Emacs...;; minibuff,还会有一条错误信息 "Search failed: Hello".;; 把(search-forward "Hello")一句换成如下就不会有错误信息;; (search-forward

95440

Emacs Lisp

; 第一步首先启动Emacs: (windows可以双击emacs图标,Linux可以输入% emacs & ), ;; 然后键盘上键入q 跳过系统欢迎的信息, ;; 先观察Emacs屏幕的底部...;; 缓冲区也叫做工作区,Emacs打开一个文件,实际只是Emacs构造该文件的一个副本,放到缓冲区, ;; Emacs对该文件的编辑也是针对该副本的编辑,唯有保存改动时,Emacs才会把缓冲区的内容复制到原文件中去...;; 为了实验本教程lisp命令,我们要让Emacs工作lisp-interaction-mode工作模式下, ;; 这个模式可以让我们缓冲区中和Emacs进行互动,并且直接执行Lisp命令,得到结果..." my-name)) ;; ^ 把光标停在这里,再键入C-x C-e 执行defun命令来定义函数 ;; 通过defun命令,你已经Emacs安装了这个hello函数,这个函数就成为了Emacs的一部分...下面的一系列命令 ;; let函数首先定义local-name变量的值为“you” ;; 然后接着执行括号其它的语句块部分,这个功能和progn类似 (let ((local-name "you"

2.2K30

Emacs 28 新特性介绍

这篇文章就来介绍 Emacs 28 ,笔者个人觉得比较实用的功能,完整列表可参考 NEWS[3] ( M-x view-emacs-news ),最后会介绍如何在 macOS 上编译。...• project 更新一堆实用的命令,后面会单独写一篇文章介绍 28 的 project 使用方式。...positional 参数已经被淘汰 编译方式 看了上面那么多新功能,读者可能已经按捺不住内心的喜悦,这里就来介绍如何在 macOS 编译 28 版本,其他操作系统方式类似。...测试 # 直接打开 Emacs open nextstep/Emacs.app # Finder 打开 Emacs,方便拖到 /Applications open -R nextstep/Emacs.app...如果遇到下面的错误 xml.c:26:10: fatal error: 'libxml/tree.h' file not found 可以第二步下载依赖后,导出下面的环境变量即可 export CPATH

91230

Emacs 折腾记

我工作倒并没有用得到 Lisp 的地方,但是最近眼前晃过的一些书,比如《计算机程序的构造和解释》、《码农》杂志第 13 期,都对这门古老的语言推崇备至,还有垠神也撰文《Lisp 已死,Lisp 万岁!...搜索网友们对此的经验之谈的时候,自然而然地,目光逐渐聚集到 Emacs 这个使用 Emacs Lisp 作为扩展语言的神的编辑器上。...Update: 后来经验证,发现实际上是 sbcl 安装过程写的环境变量没有生效导致的,sbcl 安装过程中会设置两个环境变量,新建一个 SBCL_HOME 值为 sbcl 安装路径, PATH...然后如何运行当前 py 文件这件事上遇到些问题。 Vim 我一直是用 :!... ~/.emacs 文件添加 (require 'smooth-scrolling) (setq smooth-scroll-margin 3) 这个 3 表示距离屏幕上下边缘还有 3

1.8K10

Clojure 开发那些事

除了最基本的圆括号()外,方括号[]与花括号{} Clojure 用的也比其他 Lisp 方言中多。...Emacs + Cider 的组合相比 Intellj + Cursive 最大的优势就是对宏的支持,Cider 提供对宏展开的快捷键,但在 Cursive 我没找到,不过宏也是比较高级的功能,初学者应用用不到...最后还是建议初学者不要用 Emacs,学习成本太大,而且很容易就把注意力转移到编辑器的学习上,等到学习一段时间后尝试不迟。...其实,使用第三方类库之余,多去了解其实现,代码从 Github 上 Clone 下来,慢慢看,Clojure 里面提供很多实用的小方法,像partition, juxt, group-by等等不一而足...nrepl Clojure 的 REPL 可以连接到远程服务器上的进程,直接对进程的函数或变量进行修改,这是非常便利的,对于很多运行时的错误可以采用这种方式解决,Emacs 与 Intellj 里面都提供连接远程

1.5K20

使用 RustC 开发 Emacs 插件

Emacs 25 版本后,支持动态模块(dynamic modules),这为 Emacs 插件的开发打开了新的一扇大门,任何能够编译生成符合 Emacs ABI 要求的语言都可以使用。...本文就来介绍,如何使用 C/Rust 两种语言来进行 Emacs 动态模块的开发。本文所有代码可在 emacs-dynamic-module 这里找到。...为了简化数据类型 C 与 ELisp 之间的转化,Emacs 提供一系列函数,比如: Elisp–>C 更多类型转化可参考官方文档: •Conversion Between Lisp and Module...Values 这里着重介绍下如何将 C 里面的函数导出到 ELisp emacs_value c_add(emacs_env *env, ptrdiff_t nargs, emacs_value..."defalias"), 2, args); } emacs_module_init 调用 define_elisp_function 即可将 c-add 导出到 ELisp ,使用示例: (c-add

77620

Emacs Tree-sitter 初体验

Tree-sitter 简介 Emacs 29 的一大亮点就是原生支持 tree-sitter[1](后文简称 ts),它的官网是这么定义的: Tree-sitter is a parser generator... Emacs ,之前都是采用正则的方式去解析语言的语法结构,这种方式虽然大多数情况是没有问题的,但主要有以下几个问题: 正则比较消耗 CPU,导致对大文件进行高亮时容易导致 Emacs 卡主,参见:.../configure --with-tree-sitter 不同平台的包管理器都有预编译好的动态文件, macOS 上可以用如下命令: brew install tree-sitter 编译完 Emacs...,需要开启 Emacs 对应的 mode 来使用,比如 c-mode 对应的 c-ts-mode ,Emacs 为不同的语言重新实现一个以 ts-mode 结尾的新 mode, 29 版本,主要有如下...c-mode 时,会自动替换成 c-ts-mode ,到这里 tree-sitter 就算安装成功

97910

Emacs 折腾记

搜索网友们对此的经验之谈的时候,自然而然地,目光逐渐聚集到 Emacs 这个使用 Emacs Lisp 作为扩展语言的神的编辑器上。... ~/.emacs 文件里加上: M-x slime 就可以进入到 REPL 进行 Common Lisp 的学习。... ~/.emacs 文件里添加: 这样自动补全之类的就没有问题了。 然后如何运行当前 py 文件这件事上遇到些问题。 Vim 我一直是用 :!...配置这个倒是简单,安装 Markdown-mode 插件,然后 ~/.emacs 添加: (autoload 'markdown-mode "markdown-mode" "Major mode... ~/.emacs 文件添加 这个 3 表示距离屏幕上下边缘还有 3 行的时候再移动光标即自动滚屏,方便随时能看到当前编辑行的上下文,可以根据自己的使用习惯调整。

1.3K20

30岁文转码:我用了三年时间从哲学家变成知名软件项目核心开发

不少网友也表达对 Prot 的祝贺和敬意: Prot 是我遇到过的最能言善辩、谦逊、谨慎和健康的人之一。想到他没有任何技术背景的情况下接触 EmacsLisp 并刚刚开始贡献,这简直是疯了。...此外,Emacs 还是自文档化的,意味着它能理解变量的值何时发生变化、并在对应的帮助缓冲区通知用户。同理,Emacs 也能反映出各类函数的新值与当前状况的关联。...Emacs 通过自身及第三方包 / 自定义代码全面满足我的一切需求。如果大家愿意稍微学学 Elisp,那 Emacs 可以说是蕴藏着无穷无尽的可能。...因此,Emacs 得以将各种界面连通起来,而且完全不会因为上下文切换而引起任何冲突。 Emacs 的最后一项优势,就是易用性和规模化使用时的便捷性。例如,我想用自定义代码制作本次演讲的演示内容。...Emacs 则可以实时评估代码,而且开放完整的源代码及相关说明文档。正是有这样的开放性,我才能了解如何定义函数,再通过反复试验编写出人生第一条自定义 Elisp。

35430

Lisp语言简介_c++是什么语言

大家好,又见面,我是你们的朋友全栈君 摘自维基百科,原链接为:http://zh.wikipedia.org/zh/LISP 因为Clojure是Lisp的一种的方言,所以我们可以先来了解一下Lisp...Unix/Linux系统,还有一种和Emacs一起的Emacs Lisp(而Emacs正是用Lisp作为扩展语言进行功能扩展的)非常流行,并建立了自己的标准。...如果一个表达式是一个表,那么我们把表的第一个元素叫做操作符,其余的元素叫做自变量。... Lisp 我们习惯用原子 t 表示真,而用空表 () 表示假。...> (atom ‘a)t> (atom ‘(a b c))()> (atom ‘())t 现在我们有第一个需要求出自变量值的操作符,让我们来看看 quote 操作符的作用——通过引用(quote)一个表

2.2K20

Emacs 29.1 版本发布

29.1 已经 2023-07-30[1] 发布 作为日常使用 Emacs 进行开发的重度用户,困扰笔者的一个问题时,同时打开多个项目时, xref 会错乱,这十分烦人,忍受一段时间后,最终去 SO...multisession: 这个包提供不同会话间持久化变量的功能。...region,否则就是当前行 ensure-empty-lines : 确保当前行上面是空行 find-sibling-file: 寻找“兄弟”文件,兄弟文件是由 find-sibling-rules 这个变量定义的...show-paren-context-when-offscreen: 当光标右括号时,如果左括号不在屏幕时,会在 echo area 展示相关信息, GUI ,可以设置成 overlay 或 child-frame...可以通过 --init-directory 设置 user-emacs-directory 变量 .eld 结尾的文件默认用 lisp-data-mode 打开。

44420

我的 IDE 太重,所以迁到了 Emacs

在这篇文章,我想提出一个问题:IDE 是否真的需要这么重,以致于我们在数年前价值一千美元的笔记本电脑上几乎无法使用 IDE?...比如当你检查一个逻辑上不可能的条件时,它会发现那些令人震惊的逻辑错误……还有一些平凡的功能,我还没有费心去发现如何实现,比如自动修复警告(我真的很怀念 IntelliJ 的 Alt+Enter)和为诸如...System.out.println 和 public static void main 插入自定义代码片段(尽管 Emacs 这样做一点也不难,我最终会做到的!)。...为了回答 Emacs 是否真的更轻的问题,我实际上一个星期六的 24 小时内截图我的笔记本电脑的电池使用情况,当时我花了一天的大部分时间 IntelliJ 编码,然后第二天做了同样的事情,但是使用...使用 Emacs 的情况,请注意,一个美好的下午编码过程,电池曲线出现平滑的向下倾斜。

1.1K10

几种编程语言的优缺点

它们同样精确的表示计算机能干什么。 Lisp 机现在不是很流行了,除了跳蚤市场里。从谁更受欢迎来说,冯·诺曼机器赢了。...如果说,C是最靠近计算机是如何工作的语言模型,Lisp 就是最能反映计算(注意,这里没有“机”字,计算机和计算是很不同的!译者注)是如何工作的模型。你不需要懂很多 Lisp,真的。...这一切都太梦幻,我觉得她们可能是喝多了。 Shel 是个天才。Emacs 是天才。连非技术人员都爱 Emacs。我现在就是 Emacs 里打这些文字。我绝不情愿在任何其他地方打字。...一方面,Java 把你从 C++ 编程的很多枯燥易错的细节解救出来了。没有数组越界,没有 core dump 。...操,有很多比 Perl 好的语言,如果你定义“好”为“不是给疯子用的”的话。Lisp, Smalltalk, Python,妈呀,我可能可以列出二三十种比 Perl “好”的语言。

3.4K110
领券