当前位置: 首页 > news >正文

[Emacs list使用及配置]

[Emacs List]
Emacs初识(一)
Emacs编辑器本身所使用的编程语言是Lisp语言–其语言以“列表”(List)作为语法和核心数据结构,由于其具备强大的宏系统,可以方便创造各式方言。
为什么Emacs
为什么学习Emacs:说白了就是为了:高效+全面+高度定制化----本质就是生态极其丰富。
• 高效:Emacs哲学:Emacs 将组合键使用到极致,凡事都尽可能使用组合键来解决。
• 全面:Emacs是一个OS,通过拓展插件轻松实现来完成编译、调试、版本管理等任务的IDE。
• 扩展性:本质是Lisp语言,允许方便开发者开发任意需求。随着时间复利的积累,其社区已经形成了丰富的插件功能,一般你可以找到满足你需求的插件。
不是因为老才用它,而是一直都没人超越它,且复利明显
vim插件–evil
为了降低Emacs配置的门槛,直接有预设安装好一些插件的“Emacs发行版”:Doom Emacs 和SpaceEmacs。
DoomEmacs Install
Ripgrep install
在封闭的Linux开发环境上进行安装–预编译的静态二进制文件方法
i. 在release版本选择下载–musl版本;ripgrep-13.0.0-x86_64-unknown-linux-musl.tar.gz musl 是静态链接的,不依赖目标系统上的特定库(如 glibc),兼容性极好,可以做到“拿来即用”。
ii. 复制该包到开发环境上进行安装;cp ripgrep-13.0.0-x86_64-unknown-linux-musl/rg ~/bin (check $PATH)

Fd install
这个和ripgrep安装类似,只不过注意要选对指令集架构版本对应的安装包;尽量是选择musl版本–预编译好的静态二进制文件(已经把所有的依赖都编译放进去了)。
DoomEmacs Install
对于安装DoomEmacs:从Windows复制到Linux的文件,丢失了执行权限(executable permission)和正确的行尾符(line endings)”,导致Linux系统无法识别 doom 脚本为一个可执行程序。
解决方法:可以联网的Linux+打包.tar.gz上传,然后在复制到封闭环境;

在可以联网的Linux进行安装好,然后在使用tar来打包好已经编译的文件;
目的:将一个已经配置好、安装完毕的、立即可用的 Doom 环境完整地复制到另一台无法联网的机器上。
为了严格遵守 Doom Emacs 的规范,确保程序能自动在固定路径(~/.doom.d/)找到个人配置:
~/.doom.d/ 目录包含了您的全部配置指令**(要什么功能、怎么设置) 。
~/.emacs.d/ 目录(通常一起打包)包含了根据您指令下载和编译好的所有插件和依赖 。

Emacs(二)
介绍EMACS的基础知识和操作–直接使用官网的备忘表;Emacs是一个诞生在图形界面和鼠标之前的存在,设计之初就是根本不需要鼠标来操作,因此充分将组合键发挥到极致,就像vim一样,一旦熟悉起来,效率飞起。
组合键规定
Emacs中的五个功能键:ctrl,Meta(alt),shift,super(win),Hyper(消失);但是Emacs绝大多数快捷键都是使用ctrl和alt键–且这其中更绝大部分是CTRL键。为了表达对接的顺畅,特此规定:

• 用 C-a 表达“先按下 Control 键不要松,再按下 a 键“
• C-x b 则表达“先按下 Control 键不松,按下 x 键,松开这两个键,按下 b 键”。
命令哲学-M-x:调用一切内置或自定义命令。
Emacs组合键对应是执行LISP函数。哲学:一切操作都是命令,快捷键的本质是在调用这些命令。
• Meta+X:可以调用执行任何大量内置和自定义命令。–在这里直接映射 右下角的菜单页。
• Meta 键做前缀有两种按法,例如 M-x 可以“按住 Meta 键不要松,再按下 x 键“;也可以“先按一下 Esc键松开,再按一下 x 键“–但这只是为了适配没有ALT键的。
在Emacs中输入M-x后,就会触发execute-extended-command命令,它允许用户输入任何已知的Emacs命令,然后执行它。这个命令是Emacs用户界面中的一个核心功能,用于访问和执行大量内置和自定义命令。通过这个命令,用户可以方便地调用各种操作,如打开文件、保存文件、查找替换文本、运行特定的Emacs Lisp代码。

最最常用命令
C-x C-c 来退出程序
C-g来打断任何命令,直接退出
获取帮助命令
• 按下 C-h c 后,按想查询的快捷键: 比如 C-h c C-p;
• 详细描述快捷键功能:按下 C-h k 后,按想查询的快捷键。
• 描述函数(function): C-h f ,输入函数名。
• 描述变量(variable): C-h v ,输入变量名。
• 列出含某一关键词的命令(Command Apropos): C-h a,加一个关键词。
• 列出含某一关键词的符号的文档: C-h d,加一个关键词。

Emacs对于光标、编辑等快界面–略过,直接用vim
1.光标移动
光标移动方向键:类似终端上面的方向键:
• 上下左右:C-p, C-n , C-b, C-f
• 词单位移动:C-a移至行首;C-e移至行尾;M-m来移动到文件的第一个。区别在于行首是否有缩进。
• M-a 光标移动至句首,M-e光标移动至句尾。
• M-<移动到文件开头;M->移动到文件末尾。注意这里需要同时按下 Meta 键、 Shift 键和逗号/句号键。
2.编辑操作
因为在这里已经安装了evil–来使用VIM的编辑;就不看Emacs自身的编辑了;–完全都使用VIM来代替。

Emacs(三)
了解术语,是为了对方便理解统一。
界面认识

• Frame: 即使用Emacs打开时候的界面;原则上保持:一个Frame打开多个Windows。
• Menu bar: 菜单栏,这个不必说;
• Tool bar: 工具栏: 就是那些快捷工具栏;
• Echo Area:回显区–即最下面的一行;
• Windows: Toolbar以下,回显以上的真个区域;
• 其他的不重要或者很明显的概念就不表述了;

文件与Buffer
打开文件
命令行中使用 emacs 的方式来打开文件;
Emacs 内打开一个文件,按下 C-x C-f( find-file);
保存文件对应命令 C-x C-s;
打开文件并只读不改:C-x C-r;
Emacs 可以打开多个文件,同样使用 C-x C-f 打开即可;

Buffer切换
• 使用 C-x b ,输入 Buffer 的名字后按回车即可;
• C-x C-b,此时会弹出一个 Window,名为 “Buffer List” ,列出了当前所打开的所有 Buffer;若是此时光标不在Buffer List上,使用C-x o来切换到,使用C-x k来关闭buffer。
文件备份
使用 Emacs 打开文件后,会发现目录下会多一个和打开的文件同名但是后面多了个 ~ 字符的文件,例如打开了 names.txt 后会出现 names.txt~, 这是 Emacs 的备份机制。

多Window
想要同时打开两个文件相互参照对比是一个再常见不过的需求了,Emacs 自然可以做到。
• C-x 2 :上下分割出两个 Window。
• C-x 3:左右分割出两个 Window。
• C-x 0:关闭光标所在处的 Window。
• C-x 1:只保留光标所在处的 Window,关闭其它 Window。其它 Window 的 Buffer 依然没有关闭,可以通过 “Buffer List” 查看。
• C-x o:将光标切换到下一个 Window。
• C-x 4 f 来达到“在另一个窗口打开新的文件,如果只有一个窗口就分割成两个

模式:
Emacs 的核心要素之一就是模式(mode)。一个模式就对应着一组环境,不同模式可以分别进行配置,应对不同的场景。例如,编写 C++ 代码时就对应 c+±mode,编写 Python时使用 python-mode。在不同的语言的 mode 中,编译、执行的方式都是不同的,这样只要事先定义好 mode,就可以在使用过程中方便切换各种需求场景。 Emacs mode分为两类:主模式Major mode和次模式Minor mode.
主模式:
主模式默认根据 Buffer 的文件类型来选择-模式,一个 Buffer 只能对应一个主模式。最直观的区别是 Emacs 为不同语言的源码提供了不同的语法高亮。 主模式的名字会显示在 Mode line 上。–最直观明显的区别是:Emacs 为不同语言的源码提供了不同的语法高亮。 主模式的名字会显示在 Mode line 上。
次模式:
同一个 Buffer 可以有多个次模式,次模式可以进一步调整、增加一些配置。通常来说,插件都是靠次模式来起作用的。常用次模式:
Mode hook
Mode hook 的作用就是当启动一个主模式时,自动执行一些已经“挂钩”到这个主模式的函数或次模式。因此,可以自由地向一个主模式上挂上各种功能,在启动这个主模式时就可以自动跟着一起启动。
Bash
(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'prog-mode-hook #'hs-minor-mode)
目录/文件夹操作
• C-x C-f或者C-x d,输入一个目录(文件夹)而非文件,就会进入 Dired;
• 当已经打开了一个文件时,输入 C-x C-j 可以打开当前文件所在的目录。
Dired 基本操作逻辑为,通过光标上下移动(此时不需要按 Control 而直接按 p 和 n 就可以上下移动光标)到相应文件上,按下一个命令快捷键来对该文件调用命令。想要批量操作,只需要按 m (Mark)就可以选择,按 u(Unmark) 来取消选择。批量删除时,按 d(Delete)标记删除,按 x(Execute)执行删除。
只不过这里的上下时 k,j不是p,n;
软件移动的本质:就是重命名;

Emacs(四)
本篇主要是介绍Emacs的:Emacs Lisp, 配置文件,价绍插件安装和并使用use-package管理插件,快捷键和变量的设置;
Lisp介绍
语法
Emacs Lisp时Lisp的方言,Lisp: List Processing。可以看出其核心就是列表List。在Lisp中,每一对小括号表达了一个列表,列表元素用空格分隔。在执行 Lisp 时,会把列表的第一个元素作为函数名,后面的元素都是函数的参数。元素可以是一个“词”,也可以是另一个列表。可以类比 Shell 命令的写法,也是第一个词是命令名,而后面的是命令的参数。
Lisp
(defun ivy-set-prompt (caller prompt-fn)
(setq ivy–prompts-list
(plist-put ivy–prompts-list caller prompt-fn)))
上面的参考Emacs Lisp代码约可以等于如下Python3代码:
Python
def ivy_set_prompt(caller, prompt_fn):
ivy__prompts_list = plist_put(ivy__prompts_list, caller, prompt_fn)
例如2+3+4在lisp中写为:
Lisp
(+ 2 3 4) # 2 + 3 + 4
(+ 4 (- 3 2)) # 4 + (3 - 2)
在 Emacs 中基本都是做一些定义函数、变量等操作的 ,定义函数就用 defun 关键字, 设置变量的值用 setq 关键字。if/when/unless 表示条件语句; let 为一组变量圈出一个作用域; t 表示 true,nil 表示空。
还有一些字符:
Lisp
'(Tom Amy John) # 单引号表达后面的元素不进行执行而直接返回它本身
'ivy-set-prompt # 单引号表达一个包含三个元素的数组
Emacs Lisp 源码文件的后缀名是 .el。;以后的内容是注释
由于 Lisp 的整个语言结构就是列表的嵌套,所以它设定了一个非常强大的宏系统,可以用代码生成代码。 Lisp 的语法本质始终都是列表。
Search Buffer
Emacs 总会有一个默认打开的 Buffer 叫 scratch,它是一个用来写一些临时“草稿”代码的。例如想测试一下一段 Emacs Lisp 运行的结果,就可以先在 scratch 里写一下,然后调用 M-x eval-buffer 等命令。 当然也可以写别的内容,但它本身默认启用的是 elisp-mode,本意还是用来写临时的 Emacs Lisp 的。
配置文件
了解完Emacs Lisp的基本语法后,了解学习Emacs的配置相关。
配置文件:是一个包含了 Emacs Lisp 源码的文件,描述了 Emacs 应当以什么样的方式启动。在 Emacs 启动的时候会执行其中的代码,可以理解为启动时刻运行的脚本。
当启动 Emacs 时,Emacs 会自动依次寻找以下几个文件之一作为配置文件(一旦找到了其中之一,就不会继续寻找顺序靠后的其它配置文件了):
Lisp
~/.emacs
~/.emacs.el
~/.emacs.d/init.el
~/.config/emacs/init.el
可以预见,随着我们需要的功能越来越复杂,配置源码会越来越长,我们会希望能够分多个源文件进行不同功能的管理。所以使用 ~/.emacs.d/init.el 作为配置文件是最为常见的。 我们可以将其它各种源文件都放置在 ~/.emacs.d 目录下,方便管理。
基础配置
初学防止倒在配置环境路上,就直接复制大牛的配置。比如 Steve Purcell 的配置。
基本结构
根据 Emacs Lisp 的规范,所有的源码文件的开头最好写好 docstring,也就是一些关于这个文件的说明,即使是 init.el 也不例外。以 Steve Purcell 的 init.el 为例:
Lisp
;;; init.el — Load the full configuration -- lexical-binding: t --
;;; Commentary:

;; This file bootstraps the configuration, which is divided into
;; a number of other files.

;;; Code:
按照习惯,三个分号开头的注释表示“节”,两个分号开头的注释表示“段落”。(一个分号开头的是一行代码后面的行内注释)。;;; Code: 后面就开始 Emacs Lisp 的代码了。同时,文件的结尾要是:;;; init.el ends here

插件设置
首先使用插件 use-package 来进行管理插件。在这里和上面配置文件一样,先过不表。

Emacs(五)–实用插件
大体分为如下几类:

  1. 功能优化类:对 Emacs 自身的一些不够完美的功能进行替换,解决一些痛点,提高操作便利性
  2. 功能增强类:大大提升 Emacs 体验与效率
  3. 编程类:和编程相关的插件配置
  4. 外观类:配置颜色、主题、屏保等。
  5. 有趣类:实用性不高但很有趣的插件;
    插件相关的命名都是会使用插件名作为前缀,例如马上要介绍的插件 ivy,和它相关的命令就都是 ivy-* 这样的命名。
    在安装 ivy 后可以首先 M-x ivy- 然后就可以看到一系列以此为前缀的命令,想要查询其中某一个的功能例如 ivy-push-view,那就先 C-g 回到正常 Buffer 内。C-h f ivy-push-view 就可以显示这个命令的介绍了。
    功能优化类:
    Ivy

功能增强类

编程开发类

外观主题类

实用小技巧类

zhuanlan.zhihu.com


文章转载自:

http://0Oehrpgj.cnyqj.cn
http://P5RvwZkp.cnyqj.cn
http://7iTbbvUo.cnyqj.cn
http://MTAAXisb.cnyqj.cn
http://prqm3Xie.cnyqj.cn
http://fhxIvo5Y.cnyqj.cn
http://qm7REXMy.cnyqj.cn
http://J5pet8NA.cnyqj.cn
http://BxTM9Y1H.cnyqj.cn
http://PGc8dH9r.cnyqj.cn
http://57tOaaru.cnyqj.cn
http://6pvdel83.cnyqj.cn
http://ujTScHqy.cnyqj.cn
http://M6z6ZuTU.cnyqj.cn
http://BA9AocHy.cnyqj.cn
http://eWy5QkuA.cnyqj.cn
http://0746QGwu.cnyqj.cn
http://21UR16qa.cnyqj.cn
http://vX6rIBSY.cnyqj.cn
http://UXv0h403.cnyqj.cn
http://31pSl6x0.cnyqj.cn
http://oCTwtQj1.cnyqj.cn
http://dxWvmCGY.cnyqj.cn
http://qsnSyykn.cnyqj.cn
http://3QTBDBVl.cnyqj.cn
http://7k7nWunp.cnyqj.cn
http://Ysq6tCwo.cnyqj.cn
http://JRl5L2LJ.cnyqj.cn
http://CxaPRtu4.cnyqj.cn
http://DKp957Nf.cnyqj.cn
http://www.dtcms.com/a/386636.html

相关文章:

  • DQN在稀疏奖励中的局限性
  • 为何需要RAII——从“手动挡”到“自动挡”的进化
  • 第五课、Cocos Creator 中使用 TypeScript 基础介绍
  • 09MYSQL视图:安全高效的虚拟表
  • R 语言本身并不直接支持 Python 中 f“{series_matrix}.txt“ 这样的字符串字面量格式化(f-string)语法 glue函数
  • 【AI论文】AgentGym-RL:通过多轮强化学习训练大语言模型(LLM)智能体以实现长期决策制定
  • Win11本地jdk1.8和jdk17双版本切换运行方法
  • vue3 使用print.js打印el-table全部数据
  • Vue 3 + TypeScript + 高德地图 | 实战:多车轨迹回放(点位驱动版)
  • [vue]创建表格并实现筛选和增删改查功能
  • JVM-运行时内存
  • 后缀树跟字典树的区别
  • LanceDB向量数据库
  • RabbitMQ 异步化抗洪实战
  • 《Java集合框架核心解析》
  • 二维码生成器
  • OSI七层模型
  • 【原创·极简新视角剖析】【组局域网】设备在同一局域网的2个条件
  • 第8课:高级检索技术:HyDE与RAG-Fusion原理与DeepSeek实战
  • Windows 命令行:路径的概念,绝对路径
  • 异常检测在网络安全中的应用
  • 【ubuntu】ubuntu 22.04 虚拟机中扩容操作
  • 【数值分析】05-绪论-章节课后1-7习题及答案
  • Java NIO 核心机制与应用
  • Roo Code 诊断集成功能:智能识别与修复代码问题
  • ANA Pay不再接受海外信用卡储值 日eShop生路再断一条
  • 一阶惯性环节的迭代公式
  • AWS 热门服务(2025 年版)
  • 拷打字节算法面试官之-深入c语言递归算法
  • Vehiclehal的VehicleService.cpp