热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elisp入门笔记(1)

由于用惯了Windows,在使用Linux操作系统后遇到的第一个棘手的问题就是没有很顺手的编辑器。阴差阳错的开始用起了Emacs。其实也没有比较编辑器的优劣,只是默认安装打开文本的编辑

由于用惯了Windows,在使用Linux操作系统后遇到的第一个棘手的问题就是没有很顺手的编辑器。阴差阳错的开始用起了Emacs。

其实也没有比较编辑器的优劣,只是默认安装打开文本的编辑器是Emacs而已。但是随着使用Emacs的逐渐深入,发现越来越喜欢这个

编辑器了。

Emacs编辑器的神奇之处莫过于内嵌插件的强大,现在以一种好奇和求知欲的心态来逐渐了解一下内嵌插件的开发语言Elisp。

Emacs Lisp,一种直译式的脚本语言,为LISP的方言之一,GNU Emacs与XEmacs文字编辑器都使用这个编程语言来扩展它们的功能。

它的直译器是以C语言来实作的。


note:

Emacs Lisp Reference is the official Emacs Lisp documentation. It is built into the Emacs Info pages and is the go-to for most Elisp programmers. It is shipped with Emacs and can be accessed by the menu bar, with ‘M-x menu-bar-read-lispref’, or from the top page of InfoMode.

Emacs Lisp Intro is a book for non-programmers available from the Free Softwar eFoundation and is shipped with Emacs. Its command is ‘M-x menu-bar-read-lispinfo’.

热身运动:

Emacs的插件实现的功能虽然数不胜数,但是万变不离其宗。当实现一个功能不管是用快捷键还是用(M-x),最本质的其实是Elisp函数

的调用。so,Emacs插件其实就是用Elisp语言来写函数。知易行难,要是真正写起插件来,工作量也是让人不要不要的。


初探Elisp:

启动Emacs,在下面会发现 *scratch* 的字样,这表示你当前的缓冲区(buffer)的名字。缓冲区也叫做工作区,在Emacs中打开一个文件,

实际只是在Emacs中构造该文件的一个副本,放到缓冲区中,状态行下面的那行,叫做辅助输入区(minibuffer),该minibuffer用于显示计算

为了实验本教程中的lisp命令,我们要让Emacs工作在lisp-interaction-mode工作模式下,这个模式可以让我们在缓冲区中和Emacs进行互

动,并且直接执行Lisp命令,得到结果。进入lisp-interaction-mode的方法: 把光标移动到辅助输入区,键入M-x lisp-interaction-mode 然

后回车。

(message "hello elisp")

注意返回值和作用是不同的。比如前面 message 函数它的作用是在 Minibuffer 里显示一个字符串,但是它的返回值是 "hello world" 字符串。

一、变量、表达式、函数

 (setq my-name "Tom")

 给变量my-name赋值,然后C-x C-e 查看执行结果。

(insert  my-name)

C-x C-e

在光标处插入my-name


defun命令用来定义一个函数,语法是(defun 函数名 (参数列表) (函数体))
(defun  SayHello (name)

     (insert  my-name name))

C-x C-e

    (SayHello  "Tom" )

 C-x C-e

函数的调用方式,相当于SysHello("Tom")

二、progn,let和交互式函数

执行switch-to-buffer-other-window命令,将在在一个新的窗口中打开一个buffer,并将该buffer命名叫做 test, 并且把光标移到新的buffer的窗口中。
(switch-to-buffer-other-window "*test*")
要回到原来的buffer中,可以使用鼠标点击原来的buffer或者使用组合键 C-x o  (M-x other-window)

如果要执行一系列的指令,可以使用流程函数progn,把函数命令连接起来.

(progn
(switch-to-buffer-other-window"*test*")
(erase-buffer)
(SayHello  "Tom" ))

let函数用来做局部变量的定义,然后写入要执行的指令这个功能和progn类似

(let ((local-name "you"))
(switch-to-buffer-other-window "*test*")
(erase-buffer)
(SayHello  local-name)
(other-window 1))
;;切换窗口


read-from-minibuffer函数提供和用户交互的功能,这个函数可以帮助Elisp程序从用户处得到输入
(read-from-minibuffer "Enter your name: ")

format函数可以用做格式化的输出 其中%s表示该s的地方将被之后提供的一个字符串替换,类似于C语言的prinf。

(defun greeting (from-name)
(let ((your-name (read-from-minibuffer "Enter your name: ")))
(switch-to-buffer-other-window "*test*")
(erase-buffer)
(insert (format "Hello %s!\n\nI am %s." your-name from-name))
(other-window 1)))


;; 执行这个函数
(greeting "Tom")


推荐阅读
  • 本文详细探讨了C语言中`extern`关键字的简易编译方法,并深入解析了预编译、`static`和`extern`的综合应用。通过具体的代码示例,介绍了如何在不同的文件之间共享变量和函数声明,以及这些关键字在编译过程中的作用和影响。文章还讨论了预编译过程中宏定义的使用,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 本文详细解析了 MySQL 5.7.20 版本中二进制日志(binlog)崩溃恢复机制的工作流程。假设使用 InnoDB 存储引擎,并且启用了 `sync_binlog=1` 配置,文章深入探讨了在系统崩溃后如何通过 binlog 进行数据恢复,确保数据的一致性和完整性。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • 在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转
    本文探讨了在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转的技术细节。通过详细分析Swscale的工作原理和实际应用,展示了如何在Android环境中高效地进行图像格式转换。此外,还介绍了FFmpeg的全平台编译过程,包括x264和fdk-aac的集成,并在Ubuntu系统中配置Nginx和Nginx-RTMP-Module以支持直播推流服务。这些技术的结合为音视频处理提供了强大的支持。 ... [详细]
  • 开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构
    开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • C语言开发学生信息管理系统的实践体会与技术总结
    在C语言开发的学生信息管理系统项目中,我们成功实现了学生信息的增、删、改、查功能,并将操作结果实时同步到文本文件中。通过该项目,我们不仅掌握了C语言的基本语法和文件操作技巧,还深入理解了数据结构和算法的应用。在设计修改学生信息界面时,我们采用了分步验证和动态更新的方法,确保数据的一致性和准确性。此外,我们还对系统进行了性能优化,以提高数据处理效率和用户体验。以下是系统部分界面的展示,供参考。 ... [详细]
  • 掌握DSP必备的56个核心问题,我已经将其收藏以备不时之需! ... [详细]
  • 在MFC开发过程中,利用Windows内置的文件对话框可以显著提高文件操作的效率。本文总结了使用文件对话框进行文件选择和处理的经验,详细介绍了相关API的调用方法和参数设置,如`CFileDialog`类的使用、结构体`OPENFILENAME`的配置以及如何获取选中的文件路径。通过这些技巧,开发者可以快速实现文件的打开、保存等功能,提升应用程序的用户体验。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
author-avatar
icanfly2502872173_635
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有