- 博客(295)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注

原创 关于我,一些联系方式
双鱼座单身程序员一枚邮箱:liu1793222129@163.comQQ: 654170359微信公众号 hello programer
2019-03-17 21:36:11
608
原创 Emacs 折腾日记(二十三)——进一步提升编辑效率
本文总结了Emacs中一些实用的功能和插件的整合,旨在提升编辑体验。首先,通过savehist插件,Emacs可以记住用户执行的命令和其他minibuffer信息,方便快速访问。其次,使用recentf插件,Emacs能够记住上次打开的文件,便于快速恢复工作状态。接着,通过consult和ripgrep插件,增强了全局搜索功能,支持模糊匹配和中文搜索。最后,介绍了批量替换功能,依赖embark、consult和wgrep插件,简化了批量修改和保存的过程。这些功能的整合不仅提升了Emacs的实用性,也为用户提
2025-05-14 11:47:35
370
原创 Emacs 折腾日记(二十二)——补全强化
在之前的一系列文章中,我们对Emacs做了一些小范围的定制,目前它已经可以很好的模拟vim的一些基础功能。我们也在模拟vim基础功能之上做了一些能力的提升。本篇我们将对Emacs自带的补全系统做一个升级,并且给出一些搜索和替换的方案,进一步提升Emacs的效率Emacs上有很多很好用的补全插件,著名的有前期的 ivy 体系和当前社区比较火的vertico 体系。为了与时俱进,而且Emacs-China中的很多帖子也推荐使用vertico,所以这里我也介绍这个体系中的插件。
2025-05-08 09:00:00
933
原创 Emacs 折腾日记(二十一)——编辑能力提升
上一篇文章,我们补充了一些基本的配置,并且关闭了一些默认的行为。这里我们继续对它进行配置。本篇将要使用一些插件来修改默认的编辑行为进一步提高编辑文本的效率。
2025-04-23 09:42:44
592
原创 使用CMake跨平台的一些经验
使用CMake构建工程的一个原因是不希望Windows上有一个工程文件,Linux又单独配置一套工程文件。我们希望对于整个工程只配置一便,就可以直接编译运行。CMake本身也具备这样的特性,脚本只用写一次,在其他平台能自动构建工程。这里谈的跨平台主要是如何组织工程和编写CMake来针对Windows和Linux进行一些特殊的处理,在这里说说我常用的几种办法。
2025-04-12 09:00:00
959
原创 CMake 基础
很遗憾直到现在才开始接触cmake,过去都在微软的vs IDE上编写c++程序,即使引用第三方的库直接使用cmake也能编译成功,很少关注它本身的内容。但是现在我有一项工作的内容就是将在Windows平台上的c++程序移植到Linux平台上。我想选择cmake作为支持跨平台的构建工具。因此提前学了点cmake的基础知识。cmake本身并不能直接编译和链接程序,它是一个构建程序。主要作用就是根据cmake脚本来生成Makefile文件,以供nmake、gun make等工具来生成可执行程序。
2025-04-01 18:23:39
718
原创 Emacs 折腾日记(二十)——修改emacs的一些默认行为
上一篇我们完成了emacs输入法的配置以及将emacs配置成了使用vim的操作方式。但是emacs目前有些默认行为我不太喜欢,这节我们一起来修改它。
2025-03-28 18:36:50
389
原创 Emacs 折腾日记(十九)——配置输入法和vim操作方式
上一篇文章中,我们将Emacs变得稍微好看了点。换成了自己喜欢的主题和颜色,这样每天用起来也比较养眼,不会特别排斥。本篇文章的主要任务就是配置输入法方便输入中文以及将vim的操作模式搬到Emacs中。进一步提到Emacs的可用性。
2025-03-25 21:39:07
796
原创 Emacs 折腾日记(十八)——改变Emacs的样貌
截止到上一篇文章为止,之前的内容都看完了,虽然它的后记部分提供了一些后续进阶的内容需要我们自己读手册。但是我不太想继续在elisp上死磕了。看着自己学了那么久的elisp,但是自己的emacs仍然没有半点改变,这个时候各位读者的兴趣一定会大打折扣,是时候试试配置一下自己的emacs了。教程后记中提到的内容等配置的时候涉及到了再来了解吧所谓人靠衣装马靠鞍,一个编辑器好不好用首先要看的就是它好不好看,对于难看的编辑器可能一眼就要给它发卡了——“你是一个很优秀的编辑器,但是我们不合适”。
2025-03-17 21:51:53
1094
原创 Emacs 折腾日记(十七)——文本属性
我们在上一篇中介绍了如何对文件中的文本进行操作,本篇主要来介绍关于文本的属性。是的,文本也有属性。这里的文本属性有点类似于Word中的文字属性,文本中对应的字符只是文本属性的一种,它还包括文本大小、字体、颜色等等内容。Emacs中的文本也是类似的。于符号的属性类似,文本的属性也是由键值对构成。名 字和值都可以是一个 lisp 对象,但是通常名字都是一个符号,这样可以用这个 符号来查找相应的属性值。复制文本通常都会复制相应的字符的文本属性,但是 也可以用相应的函数只复制文本字符串,比如。
2025-03-16 21:10:12
621
1
原创 Emacs 折腾日记(十六)——文本操作
作为一个文本编辑器,编辑文本是最基本,也是最重要的功能。本文将介绍关于文件操作的一系列操作,比如查找文件,读写文件,文件信息、读取目录、文件名操作等。在之前关于vim的介绍时,已经详细的介绍过关于文件、缓冲和窗口的关系。相信各位读者不会弄混这些概念。在emacs从硬盘上读取文件到缓冲并且显示的过程与vim类似。只是vim会根据后缀设置file type,并根据file type加载相关配置和代码。而emacs会加载各种mode和mode的配置。
2025-03-11 15:33:20
526
原创 Emacs 折腾日记(十五)——窗口
在上一节提到,当前buffer不一定是当前显示在屏幕上的那个buffer,想要修改显示的buffer,可以使用窗口相关的api。这节来介绍一些窗口的操作。窗口是屏幕上用于显示一个缓冲区 的部分。和它要区分开来的一个概念是 frame。frame 是 Emacs 能够使用屏幕的 部分。可以用窗口的观点来看 frame 和窗口,一个 frame 里可以容纳多个(至 少一个)窗口,而 Emacs 可以有多个 frame。
2025-03-07 11:09:28
794
原创 Emacs折腾日记(十四)——buffer操作
中的应该是正则表达式。但是我觉得目前来说正则表达式对我来说不是重点,而且正则表达式我还是比较了解,没必要专门去学习,在使用的时候看看相应的章节就好。况且现在有AI这个利器,在处理正则表达式应该问题不大。所以这里就略过这节,直接进入后面的学习截止到前面的一些文章,我觉得应该已经涉及到了emacs lisp中的语法要点,现在去看一些emacs配置中的代码不太会一头雾水了。离攒自己的配置又进了一步。期间我想过是不是可以跳过教程后面的内容直接进入配置的过程呢?
2025-02-21 10:07:26
1199
原创 Emacs折腾日记(十三)——函数、宏以及命令
之前在开篇介绍简单的elisp时候就提到过函数,后面的一些示例中也用到了一些函数,但是都是一些基本的概念,这篇将深入了解函数的一些特性。首先要判断一个符号是否是函数,可以使用 functionp 来判断。不光函数,以下几种functionp也返回t。
2025-02-19 11:11:46
862
原创 Emacs 折腾日记(十二)——变量
本文是依据而来在此之前我们已经了解了elisp中的全局变量和函数中的局部变量,也了解了elisp中各种数据类型。这一篇主要谈谈elisp中各种变量的生命周期和作用域。
2025-02-11 11:31:30
1043
原创 Emacs折腾日记(十一)——求值规则
截至到现在,我觉得我自己的elisp水平有了一定的提高,希望各位读者借助之前的文章也能有一些收获。现在已经可以尝试写一点elisp的程序了,但是如果想深入了解一下 lisp 是如何工作的,不妨先花些时间看看 lisp 的求值过程。对于我这样一个日常使用C/C++的程序员来说,习惯了C/C++的语法和写法,初次见到lisp这样使用括号并且主要是S-表达式的语言,开始总会有点不习惯,但是在尝试自己写了这么些文章之后,对lisp有那么一点感觉。这篇我想就着。
2025-01-21 21:09:12
891
原创 Emacs 折腾日记(十)——elisp符号
符号是有名字的对象,这么说可能有点抽象。我们先来回忆一下C/C++中关于符号的内容。C/C++最终被编译成机器码直接执行,在机器码中不存在变量名称,函数名称等字符,它只有一串地址。但是在写C/C++代码的时候有变量名,函数名,类名,对象名等等名称。编译器是如何做到将符号和地址关联起来的呢?答案是,编译器在编译阶段会提供一个符号表,符号表如何实现的我也不太清楚,但是它做到了关联一个地址和字符串符号的作用。
2025-01-20 15:34:43
1042
原创 Emacs 折腾日记(九)——elisp 数组与序列
与C/C++ 中的数组类似,elisp中的数组有如下特征在创建之初给定长度之后不允许后期修改长度数组中的每个元素都可以通过索引来获取,并且获取的算法时间复杂度为O(1)数组是自求值的数组中的的元素可以通过 aref 来获得,并且通过aset 来设置值根据上图,向量是数组中的一种。字符串也是特殊的数组,它是内部全部都是字符的数组(虽然elisp中没有字符这种数据类型)。教程中没有介绍 char-table 和 bool-vector,所以这里我也不打算介绍,后面要是真遇到了再看。
2025-01-15 14:27:37
947
原创 nvim番外之将配置的插件管理器更新为lazy
在很久以前我写过关于nvim配置的文章,里面推荐使用作为插件管理器。但是在一年多以前,packer的仓库中出现这么一段文字而且nvim相关的开源社区已经出现了这样的配置。之前曾今考虑过更换自己的配置,但是秉持着代码能跑就不动的传统,一直没有动手。但是这个周末我游戏也不太想玩,学习elisp的动力也没那么足,那就决定来捣鼓一下之前使用的配置把。
2025-01-06 11:16:27
892
原创 2024年回顾与2025年展望
本来打算元旦来做一下本人的年度总结的,但是元旦那天只有一天假,并且那天带孩子出去玩了,总结就耽搁了。这篇总结是自己断断续续靠晚上下班回来,老婆孩子睡着之后以及上班摸鱼时间写出来的。
2025-01-03 13:30:48
669
原创 Emacs折腾日记(七)——布尔变量、逻辑运算符与位运算
通过前面的几节内容我们已经对elisp中基本类型有所了解了。中下一节开始就是讲相关容器。所以这一篇我将它作为基础类型的一个结尾,将平时会用到,但是之前没有涉及到的内容都包含进来。
2024-12-30 11:13:31
519
原创 Emacs折腾日记(六)——elisp字符与字符串类型
回忆以下在C/C++中学到的关于字符的知识,字符采用char来表示,它占一个字节,里面存储的是各个字符的编码。当然针对汉字或者其他东亚文字,一个char可能表达不了,它会用 2个或者3个字节来表示一个汉字。后来又有unicode字符,和wchar_t类型。而字符串则是以0结尾的字符数组。C/C++中经常会出现这样的经典考题它们分别占几个字节,它的考点主要有两个,第一就是指针类型存储的就是地址,它与具体的机器结构有关x86机器上占4个字节。第二个考点就是字符串里面藏了一个0作为字符串的结尾。
2024-12-28 23:39:39
654
原创 Emacs 折腾日记(五)——elisp 数字类型
本文是参考写的,很多东西都是照搬里面的内容,如果各位读者觉得本文没有这篇教程优秀或者有抄袭嫌疑、又或者觉得我更新比较慢、再或者其他什么原因,请直接阅读上述链接中的教程。上一篇我们讲了elisp中的流程控制结构相关的内容,下面就该进入到对应数据结构的学习了。elisp中主要的数据结构有:整数、浮点数、列表、符号、向量、散列表等等类型。下面我们先从最简单的类型——整数和浮点数说起。
2024-12-21 21:16:44
709
1
原创 Emacs折腾日记(四)——elisp控制结构
目前我们接着学习elisp相关语法,这里我是按照来进行学习。与其说这是我自己写得教程到不如说是在这个上面做得注释。目前我不知道这样是否侵犯相关的知识产权。目前就先这样继续学习,继续写记录吧。闲话少说,进入本篇的正题,关于elisp的控制结构。一般编程语言都有三种控制结构:顺序结构、条件结构、循环结构。elisp同样有这三种控制结构。
2024-12-17 22:01:49
754
1
原创 Emacs折腾日记(三)——简单的elisp 入门
作为一门函数式编程语言,函数是elisp的一等公民。如何使用一个函数我们已经在前面的hello world程序中见识过了,那么如何定义一个函数呢?定义一个函数使用defun关键字。它的语法如下body)第一行代表一个函数名和函数的参数列表,第二行表示可以使用一个双引号包含函数的说明文档,Emacs是一个自文档的系统,后续我们可以查看这里写的文档。最后一行是函数的主体内容,例如下面的例子;执行将会输出对应的信息。我们将光标移动到say-hello这个函数上,执行C-h f。
2024-12-11 22:39:00
676
1
原创 emacs 折腾日记(一)——序言
初次知道emacs这个东西是在《程序员的呐喊》这本书。书中的作者提倡学习编译原理,推崇emacs。现在距离我知道emacs已经过去了快8年,期间不断的重复学习——放弃——学习的路子。与过去学习vim类似,vim我也经历过放弃到学习,最后有项目需要使用Vim在Linux上开发,没办法慢慢学会了它的操作,以及一些简单的配置。后来我写了vim的操作和配置,我发现这样做很有用首先就是在写vim操作的时候,相关的概念和操作技巧我又重新梳理了一遍,加深了它的印象,过去一些不怎么用的操作我发现在之后我用的越来越顺手。
2024-12-05 21:59:55
756
1
原创 在wsl2中安装archlinux
在之前的博客中,我介绍了如何在虚拟机或者真实机上安装archlinux并且进行一定的配置,但是实际上Linux不管怎么配置在日常使用中都没有Windows简单便利,在开发有关Linux的程序时过去用虚拟机或者直接在Windows上使用ssh在远程服务器上进行开发。但是微软发布了wsl以及后续更新的wsl2,可以很方便的实现在Windows中拥有两个系统,并且两个系统可以进行互联。在不改变Windows操作习惯的基础之上操作Linux。进一步提升了Linux的便捷易用性。
2024-12-04 22:44:14
3351
原创 PDF标准详解(五)——图形状态
在第三节中,我们说到Q/q 这一对操作符是用来保存和还原图形状态的,那个时候只有一个简单的概念,变换矩阵是图形状态的一员,那么什么是图形状态,以及有哪些图形状态呢?本节将要描述这部分的内容。
2024-09-18 11:26:04
1290
原创 PDF标准详解(四)——图形操作符
我们利用一些操作符来定义一个路径,这些路径可以作为图形显示出来,也可以作为一个裁剪区域,在该区域中的内容显示出来,不在该区域的内容则丢弃。对于给出的路径,我们使用W (非0缠绕)或者 W*(奇偶规则)来定义一个裁剪区域。例如下面有一个例子3 0 obj % 页面内容流>stream % 流的开始W %将上述路径设置为裁剪路径150 150 m 200 200 l S %在裁剪路径中,所以会显示0 0 m 500 800 l S %只显示裁剪路径中的内容endstream % 流结束。
2024-09-06 22:10:26
1221
原创 PDF标准详解(三)—— PDF坐标系统和坐标变换
之前我们了解了PDF文档的基本结构,并且展示了一个简单的hello world。这个hello world 虽然只在页面中显示一个hello world 文字,但是包含的内容却是不少。这次我们仍然以它为切入点,来了解PDF的坐标系统以及坐标变换的相关知识。
2024-06-15 12:37:31
1674
原创 PDF标准详解(二)——PDF 对象
上一篇文章我们介绍了一个PDF文档应该包含的最基本的结构,并且手写了一个最简单的 “Hello World” 的PDF文档。后面我们介绍新的PDF标准给出示例时将以这个文档为基础,而不再给出完整的文档示例,小伙伴想自己测试可以根据上一节的文档来进行配置。
2024-03-03 16:08:16
1040
原创 PDF标准详解(一)——PDF文档结构
PDF的全称是 Portable document format(可移植文档格式),是描述打印页面的世界领先语言。最早于1990年代由Adobe Systems创造。早期是Adobe专有格式,直到2008年作为开放标准发布。后续经过一系列的发展,目前已经发展到了2.0版本,由于PDF完全向后兼容,并且大部分都是向前兼容的,因此,这里不打算固定在某个具体的版本,而是介绍一些PDF通用的标准和规则。
2024-01-28 22:04:04
3520
2
原创 2023 年度回顾与2024 年展望
时间如白驹过隙,转眼已经2024年了,本来打算2024年元旦那天写写年度回顾的,但是因为一些琐事耽误了,平时上班路程远回来也就懒得动了,一直就拖到今天才开始着手这个每年的例行公事。
2024-01-13 17:01:56
1077
原创 从0开始自制解释器——重构代码
在上一篇文章中,完成了对括号的支持,这样整个程序就可以解析普通的算术表达式了。但是在解析两个括号的过程中发现有大量的地方需要进行索引的回退操作,索引的操作应该保证能得到争取的token,这个步骤应该放在词法分析的阶段,如果在语法分析阶段还要考虑下层词法分析的过程,就显得有些复杂了。而且随着后续支持的符号越来越多,可能又得在大量的地方进行这种索引变更的操作,代码将难以理解和维护。因此这里先停下来进行一次代码的重构。
2023-04-08 18:49:44
600
原创 从0开始自制解释器——添加对括号的支持
在上一篇我们添加了对乘除法的支持,也介绍了BNF范式,并且针对当前的算术表达式写出了对应的范式,同时根据范式给出相应的代码实现。这篇我们将继续为算数表达式添加对括号的支持。
2023-03-24 17:50:48
411
原创 从0开始自制解释器——添加对乘除法的支持
在上一篇中,我们实现了对减法的支持,并且介绍了语法图。针对简单的语法进行描述,用语法图描述当然是没问题的。但是针对一些复杂的语法进行描述,如果每个部分都通过语法图来描述就显得有些繁琐了。这篇我们先介绍另一种描述语法的方式,并进一步介绍一些关于语法分析的知识。
2023-03-22 16:51:42
345
原创 从0开始自制解释器——实现多个整数的加减法
在上一篇我们实现了一个可以计算两个多位整数加减法的计算器。本章我们继续来给这个计算器添加功能,这次要给它添加可以连续计算多个整数相加减的功能。例如我们可以计算1 + 2 + 3这样的表达式。
2023-03-14 17:42:20
309
原创 从0开始自制解释器——实现多位整数的加减法计算器
最后来一个总结。本篇我们对上一次的加法计算器进行了简单的改造,支持加减法、能跳过空格并且能够计算多位整数。在上一篇文章中,我们提到了Token,并且说过,像这样给字符串每个部分打上Token的过程就是词法分析。这部分代码可以被称之为词法分析器。这篇我们再来介绍一下其他的概念。词位(lexeme):词位的中文解释是语言词汇的基本单位。例如汉语的词位是汉字,英语的词位是基本的英文字母。对于我们这个加法计算器来说基本的词位就是数字以及+\-这两个符号。
2023-03-08 13:13:30
513
2
Visual Studio 在调试C++项目出错
2016-06-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人