更多好文请关注↑ 问: 在 Bash 中如何知道变量是否已设置? 例如,我如何检查用户是否给函数提供了第一个参数? function a { # if $1 is set ?...由于这种语法与用法保证了它只会扩展成不需要引用的内容(因为它要么扩展为 "x"(其中不含单词分隔符,因此无需引号),要么不扩展任何内容),所以可以省略引号(即我们可以写作 然而,虽然引号可以安全地省略...首位作者还在使用这种解决方案的代码旁添加了注释,并附上了指向本答案的 URL,现在该答案中也包含了为什么可以安全省略引号的解释。...该方式使用了 Bash 手册中 Shell Parameter Expansion 章节中的 {parameter:+word} 形式,在省略冒号的情况下( {parameter+word} ),则仅测试参数是否存在...另外,如果使用的 Bash 版本为 4.0 及以上版本,则可使用 -v varname 来测试变量是否设置。
问: 如何验证程序是否存在,以一种要么返回错误并退出,要么继续执行脚本的方式? 这看起来应该很容易,但它一直困扰着我。...或 type # 检查内置项和关键字 避免使用 which。...许多操作系统会让 which 做一些自定义和邪恶的事情,比如更改输出,甚至 hook 到包管理器。...---- 参考: stackoverflow question 592620 man bash 相关阅读: 为什么在可执行文件或脚本名称之前需要..../(点-斜杠),以便在bash中运行它 在shell编程中$(cmd) 和 `cmd` 之间有什么区别
问: 在 Bash shell 脚本中什么命令检查某个目录是否存在?...答: 要检查目录是否存在,请执行以下操作: if [ -d "$DIRECTORY" ]; then echo "$DIRECTORY does exist." fi 一行代码的形式则如下: [...要检查目录是否不存在,请执行以下操作: if [ !...如果不考虑符号链接到目录的情况,后续命令可能无法按预期工作,因为符号链接也会通过这个检查。...在 Unix 的早期设计中,许多系统资源都被抽象为文件,以实现统一和一致的接口处理,这样程序员可以使用相同的系统调用来操作不同的资源,如普通文件、目录、设备等。
问: 我搞不清楚如何确保传递给我的脚本的参数是否是一个数字。...答: 在 Bash 中,你可以使用几种方法来测试一个变量或参数(如 1、2 等)是否是数字。以下是一种通常的方法,使用条件中的正则表达式来进行测试: #!.../bin/bash # 判断参数是否为数字的函数 is_number() { re='^[+-]?[0-9]+([.][0-9]+)?...$' if [[ $1 =~ $re ]]; then return 0 # 在 Bash 中,0 表示成功 else return 1 # 非零表示失败...if is_number " 该示例会检查整数和浮点数。如果你只需要检查整数,可以简化正则表达式为 ^[+-]?[0-9]+$`。 记得给变量加引号("$1")以防止通配符扩展和单词分割。
这就不得不提起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)) 看似,接下来就可以在每个独立的模块文件中编写各种功能的配置
; 第一步首先启动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"
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
这篇文章就来介绍 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
我工作中倒并没有用得到 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
除了最基本的圆括号()外,方括号[]与花括号{}在 Clojure 用的也比其他 Lisp 方言中多。...Emacs + Cider 的组合相比 Intellj + Cursive 最大的优势就是对宏的支持,Cider 提供了对宏展开的快捷键,但在 Cursive 中我没找到,不过宏也是比较高级的功能,初学者应用用不到...最后还是建议初学者不要用 Emacs,学习成本太大,而且很容易就把注意力转移到编辑器的学习上,等到学习了一段时间后在尝试不迟。...其实,在使用第三方类库之余,多去了解其实现,代码从 Github 上 Clone 下来,慢慢看,Clojure 里面提供了很多实用的小方法,像partition, juxt, group-by等等不一而足...nrepl Clojure 的 REPL 可以连接到远程服务器上的进程中,直接对进程中的函数或变量进行修改,这是非常便利的,对于很多运行时的错误可以采用这种方式解决,Emacs 与 Intellj 里面都提供了连接远程
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
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 就算安装成功了。
在搜索网友们对此的经验之谈的时候,自然而然地,目光逐渐聚集到 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 行的时候再移动光标即自动滚屏,方便随时能看到当前编辑行的上下文,可以根据自己的使用习惯调整。
不少网友也表达了对 Prot 的祝贺和敬意: Prot 是我遇到过的最能言善辩、谦逊、谨慎和健康的人之一。想到他在没有任何技术背景的情况下接触 Emacs 和 Lisp 并刚刚开始贡献,这简直是疯了。...此外,Emacs 还是自文档化的,意味着它能理解变量的值何时发生变化、并在对应的帮助缓冲区中通知用户。同理,Emacs 也能反映出各类函数的新值与当前状况的关联。...Emacs 通过自身及第三方包 / 自定义代码全面满足了我的一切需求。如果大家愿意稍微学学 Elisp,那 Emacs 可以说是蕴藏着无穷无尽的可能。...因此,Emacs 得以将各种界面连通起来,而且完全不会因为上下文切换而引起任何冲突。 Emacs 的最后一项优势,就是易用性和规模化使用时的便捷性。例如,我想用自定义代码制作本次演讲中的演示内容。...Emacs 则可以实时评估代码,而且开放完整的源代码及相关说明文档。正是有了这样的开放性,我才能了解如何定义函数,再通过反复试验编写出人生中第一条自定义 Elisp。
自 7.0 版本以来, org mode 就已经内嵌了 Babel, Emacs 27 内置的 org mode 已经是 8.0 以上了,所以对于这篇文档的读者(Emacs 新手)来说,相信你们的 org...我主要使用 python 代码,当然 org mode 支持的编程语言种类非常多,读者可以通过查看文档来看你的语言是否在支持列表上。...#+RESULTS: ((js . t) (java . t) (python . t) (sqlite . t) (emacs-lisp . t) (shell . t) (ditaa . t)) 这里我们一定要注意...中显示了 1+1 的结果为 2, 并且注意到这里使用了 return , 而非 print 。...insert-random-uuid 的定义。
大家好,又见面了,我是你们的朋友全栈君 摘自维基百科,原链接为: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)一个表
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 打开。
它们同样精确的表示了计算机能干什么。 Lisp 机现在不是很流行了,除了在跳蚤市场里。从谁更受欢迎来说,冯·诺曼机器赢了。...如果说,C是最靠近计算机是如何工作的语言模型,Lisp 就是最能反映计算(注意,这里没有了“机”字,计算机和计算是很不同的!译者注)是如何工作的模型。你不需要懂很多 Lisp,真的。...这一切都太梦幻了,我觉得她们可能是喝多了。 Shel 是个天才。Emacs 是天才。连非技术人员都爱 Emacs。我现在就是在 Emacs 里打这些文字。我绝不情愿在任何其他地方打字。...一方面,Java 把你从 C++ 编程的很多枯燥易错的细节中解救出来了。没有数组越界了,没有 core dump 了。...操,有很多比 Perl 好的语言,如果你定义“好”为“不是给疯子用的”的话。Lisp, Smalltalk, Python,妈呀,我可能可以列出二三十种比 Perl “好”的语言。
在这篇文章中,我想提出一个问题:IDE 是否真的需要这么重,以致于我们在数年前价值一千美元的笔记本电脑上几乎无法使用 IDE?...比如当你检查一个在逻辑上不可能的条件时,它会发现那些令人震惊的逻辑错误……还有一些平凡的功能,我还没有费心去发现如何实现,比如自动修复警告(我真的很怀念 IntelliJ 的 Alt+Enter)和为诸如...System.out.println 和 public static void main 插入自定义代码片段(尽管在 Emacs 中这样做一点也不难,我最终会做到的!)。...为了回答 Emacs 是否真的更轻的问题,我实际上在一个星期六的 24 小时内截图了我的笔记本电脑的电池使用情况,当时我花了一天的大部分时间在 IntelliJ 编码,然后第二天做了同样的事情,但是使用...使用 Emacs 的情况,请注意,在一个美好的下午编码过程中,电池曲线出现了平滑的向下倾斜。