首页
归档
友情链接
关于
Search
1
在wsl2中安装archlinux
124 阅读
2
nvim番外之将配置的插件管理器更新为lazy
90 阅读
3
2018总结与2019规划
67 阅读
4
PDF标准详解(五)——图形状态
44 阅读
5
为 MariaDB 配置远程访问权限
35 阅读
软件与环境配置
博客搭建
从0开始配置vim
Vim 从嫌弃到依赖
archlinux
Emacs
MySQL
Git与Github
AndroidStudio
cmake
读书笔记
编程
PDF 标准
从0自制解释器
qt
C/C++语言
Windows 编程
Python
Java
算法与数据结构
PE结构
Thinking
FIRE
菜谱
登录
Search
标签搜索
c++
c
学习笔记
windows
文本操作术
编辑器
NeoVim
Vim
win32
VimScript
emacs
elisp
linux
文本编辑器
Java
反汇编
读书笔记
OLEDB
数据库编程
数据结构
Masimaro
累计撰写
321
篇文章
累计收到
31
条评论
首页
栏目
软件与环境配置
博客搭建
从0开始配置vim
Vim 从嫌弃到依赖
archlinux
Emacs
MySQL
Git与Github
AndroidStudio
cmake
读书笔记
编程
PDF 标准
从0自制解释器
qt
C/C++语言
Windows 编程
Python
Java
算法与数据结构
PE结构
Thinking
FIRE
菜谱
页面
归档
友情链接
关于
搜索到
321
篇与
的结果
2025-05-29
Emacs 折腾日记(二十六)——buffer与窗口管理
本节我们将介绍如何在Emacs中的buffer与窗口管理,目标是快速管理窗口,以及快速在不同buffer中进行切换基本概念介绍Emacs与vim相比的一个特点是,Emacs是一个窗口程序,或者说是一个gui程序。而vim是一个终端字符界面程序(当然Emacs也可以启用终端模式),那么与vim相比,Emacs多了了一个frame的概念。有时候有些初学者(包括我自己)总是将frame当作窗口。frame:Emacs整个程序,包括标题栏、工具栏、显示文本的界面等等部分window: 真正用来显示文本的区域被称之为window。我们经常说的分屏就是创建了一个window,frame里可以包含多个windowbuffer: Emacs 从磁盘中读取的文本保存在buffer中,buffer不一定都在window上显示。也不是所有buffer都对应一个文件针对frame来说,虽然也有相关的函数可以控制,但是一般我不太喜欢在多个frame之间进行切换,也不习惯创建多个frame。所以这里先略过window 管理关于 window。在之前介绍了window相关的函数,包括 split-window、selected-window、delete-window、以及跟窗口设置相关的 current-window-configuration、set-window-configuration。基于evil插件,我们可以使用vim的窗口创建命令。例如可以使用 :vsp 来将窗口进行纵向分割。但是我发现 :sp 和 :vsp 都是纵向分割的,这个跟vim就不太一样了。好在evil提供了一个名为 evil-ex-define-cmd 函数用来修改ex命令。所以这里我们在evil的配置中进行修改,添加下面的代码(evil-ex-define-cmd "sp" 'split-window-below) (evil-ex-define-cmd "vsp" 'split-window-right)窗口创建完成之后,我们可以使用vim 的方式来关闭窗口,例如使用 :q 命令来关闭当前窗口,或者使用 :on (或者它的全称 :only) 命令来关闭其他所有窗口。在窗口之间的移动,当初我在介绍vim配置的时候介绍过我习惯使用 leader + 'h/j/k/l' 的方式来在各个窗口间移动。但是在Emacs中,我们有比这更高效的移动方式。ace-window 是一个在各个窗口之间进行快速跳转的插件,在激活ace-window 之后,它会在各个窗口上标记一个数字,我们可以按下这个数字快速跳转到对应的窗口(use-package ace-window :ensure t :after general :hook (dired-mode . (lambda () (setq-local aw-ignore-on t))) ;; dired-mode 下禁用 ace-window :config (my-leader-def :states '(normal visual) ";" #'ace-window "l" #'evil-window-left "h" #'evil-window-right "j" #'evil-window-down "k" #'evil-window-up) )这里我们绑定 leader + ; 来调用 ace-window 执行窗口的跳转buffer 管理在介绍neovim 的配置的时候,介绍过一个名为 buffer-line 的插件,它可以很方便的将 buffer 以 tab 的形式给列出来,并且可以根据当前打开的buffer上的编号来进行跳转,我们绑定了 leader + 1~9 的数字来分别跳转到编号为 1~9 的buffer。Emacs中我也希望实现这样的功能,可以将vim上的操作无缝的转移到Emacs上来。要实现这个功能,我们可以安装 awesome-tab 包。它并没有被包含在Emacs 的官方源中,我们需要自行下载git clone --depth=1 https://github.com/manateelazycat/awesome-tab.git将它下载到对应的位置之后,如果要加载它,则需要将它所在的路径放到 load-path 中如果使用 use-package 来加载可以使用如下的代码(use-package awesome-tab :load-path "path/to/your/awesome-tab" :config (awesome-tab-mode t))启用之后,当我们多开了几个buffer之后,它们被显示到不同的tab上了。如果希望能像 buffer-line 那样根据编号跳转,首先可以通过 awesome-tab-show-tab-index 来显示tab上的编号,然后绑定数字键到 awesome-tab-select-visible-tab 进行跳转。解决了这个问题,剩下的函数官方文档上都有介绍,所以我们还是沿用vim上的快捷键,最终的配置如下:(use-package awesome-tab :load-path "~/.emacs.d/awesome-tab" :after general :custom (awesome-tab-show-tab-index 1) :config (awesome-tab-mode t) (my-leader-def :states '(normal) "gb" #'awesome-tab-ace-jump "gT" #'awesome-tab-backward-tab "gt" #'awesome-tab-forward-tab "1" #'awesome-tab-select-visible-tab "2" #'awesome-tab-select-visible-tab "3" #'awesome-tab-select-visible-tab "4" #'awesome-tab-select-visible-tab "5" #'awesome-tab-select-visible-tab "6" #'awesome-tab-select-visible-tab "7" #'awesome-tab-select-visible-tab "8" #'awesome-tab-select-visible-tab "9" #'awesome-tab-select-visible-tab))awesome-tab还可以针对不同的buffer进行分组,然后对分组的buffer进行统一的操作,这里就不介绍了,有兴趣的读者可以自行阅读相关的文档。本节到此就结束了,本节通过 ace-window 和 awesome-tab 插件基本复刻了vim中有关窗口的配置和快捷键。
2025年05月29日
8 阅读
0 评论
0 点赞
2025-05-22
Emacs 折腾日记(二十五)——目录管理
在之前的文章中,分了几篇着重介绍了Emacs编辑方面的功能改造。作为一个文本编辑器,要想坚持用下去首先应该改造成自己熟悉的编辑方式。本节我们来介绍Emacs的目录管理Dired ModeEmacs自带一个名为 Dired (Directory Editor) 的插件,它负责对目录进行操作。默认的,我们可以使用 C-x d 来进入Dired Mode。启动后它会等待用户输入想进入的目录,默认是当前目录。Dired Mode 是提供了一种类似操作文本的方式来操作目录。我们可以像操作文本那样来对目录进行类似于拷贝剪切粘贴删除创建跳转查找重命名批量操作得益于前面的篇章配置的一些插件,可以很方便的使用Dired Modedired 美化在正式介绍dired 使用之前,先稍微对它进行一些美化,原始的界面太素了,看着不太好看。首先介绍 diredfl ,原始的dired 只能使用两种颜色来区别文件和目录,而 diredfl 可以使用多种颜色,让dired显示的更加漂亮(use-package diredfl :ensure t :hook (dired-mode . diredfl-mode))接着我们再使用 all-the-icons-dired 来给dired显示的前面加上一个图标。这个插件依赖 all-the-icons 插件。(use-package all-the-icons :ensure t :when (display-graphic-p) :commands all-the-icons-install-fonts) ;; 安装完成之后需要执行 all-the-icons-install-fonts 命令安装对应字体 (use-package all-the-icons-dired :ensure t :hook (dired-mode . all-the-icons-dired-mode))我们也可以通过安装 all-the-icons-completion 插件,给minibuffer中的补全系统也加上图标(use-package all-the-icons-completion :ensure t :hook ((after-init . all-the-icons-completion-mode) (marginalia-mode . all-the-icons-completion-mode)))dirvish 增强direddirvish 是在dired 基础之上的文件管理增强插件。相对与dired 它提供快速跳转、实时预览、并且能兼容对dired的一些扩展。(use-package dirvish :ensure t :hook (after-init . dirvish-override-dired-mode) :bind( ("C-x d" . dirvish) )) 我们使用命令 dirvish 就能打开对应的窗口,或者像上面那样绑定快捷键来打开对应的窗口使用vim的方式来操作目录这里的使用vim的方式来操作多少有点标题党的意思。我无法做到完全按照vim编辑文本那样来编辑目录,但是这里我可以修改以下对应的快捷键已达到某些操作可以使用vim的快捷键。(use-package dirvish :ensure t :hook (after-init . dirvish-override-dired-mode) :bind(:map dired-mode-map ("C-x d" . dirvish) ("y" . dired-do-copy) ;; 拷贝粘贴 ("d" . dired-do-delete) ;; 删除 ("r" . dired-do-rename) ;; 重命名 ("a" . dired-create-empty-file) ;; 创建空文件 ("+" . dired-create-directory) ;; 创建文件 ("SPC" . nil) ;; 取消空格键的绑定 ) :config (with-eval-after-load 'evil (evil-define-key 'normal dired-mode-map "r" 'dired-do-rename)) ;; 排除evil模式下默认键的覆盖 (my-leader-def "j" #'dired-goto-file) )在上述的配置中,我绑定的快捷键如下快捷键功能C-x d打开diredy拷贝d删除r重命名a创建空文件+创建空目录SPC j跳转到指定文件需要注意的是,在 config 中调用了这样的语句 (with-eval-after-load 'evil (evil-define-key 'normal dired-mode-map "r" 'dired-do-rename))with-eval-after-load 表示在某个插件加载之后,这句代码的意思是,在evil插件加载后,在normal模式下,我们定义dired mode 下快捷键 r 绑定到 dired-do-rename,也就是重命名这个功能。之所以要这么做是因为在evil插件加载后会覆盖我们定义的快捷键。另外为了正常使用 leader键,这里特意取消了空格键在dired 中的定义,原本它被定义为跳转到下一行。这些功能都比较简单,所以这里就不演示了。搜索文件并跳转正常情况下,当项目文件和代码量上来之后,再一个目录一个目录的找就不太现实了。常见的是根据代码中函数定义来找文件或者根据文件来找函数定义。前者我们通过consult-rg 已经实现了。这里介绍以下如何通过文件名来查找并快速打开文件我们可以使用 consult-locate 来搜索文件,结合前面介绍的orderless,我们只需要对文件有一个相对的映像就可以找到。想要使用 consult-locate 需要安装 locate 程序,在Arch Linux 中可以使用下面的命令安装sudo pacman -S mlocate sudo updatedb ;; 更新数据库我们以打开配置文件中的 init-completion.el 为例。我们可以直接使用 M-x 输入命令 consult-locate并回车 , 接着在命令提示符后输入一个大概的内容,然后在minibuffer的候选项中找到对应的文件即可我们也可以结合 embark-act 命令来做到跳转到文件所在的 dired 中,这里我们在 embark 的配置中添加一个快捷键定义(use-package embark :ensure t :after consult :bind (("C-e" . embark-export) ("C-;" . embark-act))) ;; 添加 embark-act 快捷键这样在定位到文件之后,可以直接使用 C-; 调出对应的动作,最后使用 j 来完成进入dired的动作有了 consult-locate 和 embark-act,前面介绍的 dired中的跳转操作的实用性就大大降低了,如果我们记得文件的全路径,直接使用 find-file 打开就好了。如果只有一个模糊的映像,那么使用 consult-locate 配合 orderless,比进入dired 然后执行跳转要快的多到这里,Emacs中关于目录管理的部分就介绍完了。使用dired配合键盘操作能极大的提升的效率
2025年05月22日
5 阅读
0 评论
0 点赞
2025-05-16
Emacs 折腾日记(二十四)——帮助信息的一些优化
Emacs 是一个自文档的系统,任何有关Emacs的信息都可以通过Emacs自身查阅。包括基础的入门手册、elisp手册、以及各种插件的相关说明信息。一般遇到不懂的变量直接使用 C-h v。查看它的说明。使用 C-h f 查阅相关函数、使用 C-h k 来查找对应快捷键绑定的函数。一般来说阅读官方一手的文档比从任何论坛或者搜索引擎来的更快更准确,而且有不少Emacs高手都推荐多多阅读Emacs的官方文档。本节就着重介绍一下我了解的关于阅读文档的一些姿势。查找相关定义最开始介绍过使用 C-h f 之类的查看相关文档,Emacs所谓的子文档不光指的是查看文档,而且还可以查看相关的源代码。有些我们可以通过文档中给出的源码链接点进去看,但是还是不如直接查看源码。直接查看源码可以使用 find-function、find-variable、find-function-on-key。它们分别对应着查找函数、变量、以及快捷键绑定的函数定义。我们可以绑定一些快捷键(global-set-key (kbd "C-h C-f") 'find-function) (global-set-key (kbd "C-h C-v") 'find-variable) (global-set-key (kbd "C-h C-k") 'find-function-on-key)对默认文档显示的优化我觉得官方的文档显得比较素,比较原始。为了提高阅读的体验我们可以对文档进行美化。这里可以使用 helpful来增强一下。(use-package helpful :ensure t :bind (("C-h f" . helpful-callable) ("C-h v" . helpful-variable) ("C-h k" . helpful-key) ("C-h s" . helpful-symbol) ))我们针对 C-h k 这个快捷键来对比一下原始的文档和 helpful 增强之后的文档显示效果对比发现,helpful 不光对显示效果进行了一些改进,而且显示的内容更加丰富。特别是它已经可以直接显示出相关定义的源代码,在某种程度上替换默认的 find-function 等函数。which-key在介绍配置 neovim 的时候,介绍了 which-key 插件,它可以根据用户输入的快捷键前缀显示所有可能的匹配,使我们记忆快捷键的负担减轻。Emacs上也有类似的插件。在Emacs 30以后内置了 which-key 插件,我们只需要启用(use-package which-key :ensure t :hook (after-init . which-key-mode) :custom (which-key-idle-delay 0.7))
2025年05月16日
3 阅读
0 评论
0 点赞
2025-05-14
读《恶意的构图:侦探的委托人》
峰岸谅一被怀疑通过纵火杀害了他的岳父,因为在峰岸老人被烧死在自己公寓的晚上,谅一告知警察他未出现在公寓附近,但是邻居却作证,当天晚上看到谅一出现在公寓附近。并且警察在纵火现场发现了他的打火机,而且谅一右脸刚好有烧伤的痕迹,虽然他狡辩说自己不小心在烧开水时烫伤。另外谅一的公司出现资金周转困难,急需用钱,而峰岸老人早期通过炒股早已实现财富自由。这些线索都让警察认定他就是凶手,并且检察机关对他提起诉讼。谅一希望通过衣田律师进行辩护,奇怪的是衣田律师此前并没有进行过刑事案件的辩护。当然衣田律师接到这个案子后也尽心尽力帮助谅一进行辩护。但是对于案件的关键部分,他总是含糊其辞,辩护律师衣田征夫也被弄得晕头转向。好巧不巧,在谅一即将迎来最终判决时,谅一的妻子,朱实女士被发现不幸溺亡在别墅的地下室中。警方通过排查认定是之前被害的峰岸老人为了天冷时水管不被冻住打开了水龙头,并且一时疏忽忘记关闭水龙头,而朱实女生在不知情的情况下贸然乘坐电梯前往地下室,当电梯门开后地下室的水涌入电梯导致了她的死亡。这个时候故事迎来了第一个反转——在朱实去世后,谅一突然提出他有不在场证明。因为在火灾发生后,他曾今与一位戴着墨镜头顶假发的女子在一家旅馆同居,并且旅馆工作人员也证实,谅一脸上的烫伤是在旅馆弄的。最终谅一被无罪释放。在谅一被释放后不久,谅一被发现死在别墅中,并且警方发现他被人从楼梯上推下,但是他真正的死因却是砷化物中毒。并且谅一开过来的车子也被烧毁。此时故事进入到两名女子的回忆中,首先是谅一的小姨子,也就是朱实的妹妹幕叶。通过幕叶的回忆,此时我认为是朱实女士提前在峰岸老人酿造好的梅子酒中下毒,因为她知道谅一喜欢这种酒,并且在她利用自己的死成功报复了谅一。而且幕叶有一个表弟名叫启太。因为家庭缘故,启太慢慢变成了一个不良少年,但是因为从小受舅舅启治的疼爱,所以幕叶一直对启太很好,并且他们之间的姐弟关系也维持的不错,但是在一天早上幕叶发现启太居然开车撞向她,想置她于死地。幕叶怀疑与谅一在火灾发生那一晚同居的女性是佳苗。由此引入了今村佳苗的回忆。佳苗与启治是重组家庭,因为启治的前妻久子患有精神类疾病,所以与久子离婚后与佳苗再婚了。同时佳苗带来了一个女儿——美土里。启治再婚后,启太露出了叛逆的一幕,因为他之前与父亲表面关系好,仅仅是希望父亲不要抛下生病的母亲,但是父亲再婚后,他的幻想彻底破灭,并且从此学坏了,不光逃课逃学,后面小偷小摸,并且与帮派扯上关系。几年之后美土里也离家出走,与帮派的一位少爷同居了,为了请求帮派拆散他们二人并且让美土里回来,启治只能找到有帮派有关系的人从中周旋并且借了2000万的高利贷。虽然女儿回来了,但是高利贷压得他们一家喘不过气来。只好向峰岸老人借钱。在债务问题眼看着要解决的时候,谅一表示他代表岳父峰岸老人来要债,最终启治卧轨自杀。在启治自杀后,美土里又离家出走了。并且佳苗在打扫女儿的房间时发现了墨镜和假发,原来那天与谅一同居的人是美土里。并且这个时候美土里的男友也找上门来。前面给出的各种推理用的线索,让人目不暇接。这个时候侦探登场了,随着侦探的登场,真相也在这一刻揭秘。本书在设置谜题这块我觉得有所欠缺,它并不是那种传统推理小说中的谜题,反而是一个社会中常见的凶杀案。而且最后结尾处强行将所有人融成一个圈子,虽然这个伏笔令人眼前一亮,但是感觉经不起推敲。不过我没看过前面的几作,所以这里不做过多的评价。但是它并不是我期待的那种推理小说,除了有案件、有侦探,我感觉不出来有什么额外的推理元素。也没有读后那种解开真相的爽快感。只有简单的“哦,原来是这样啊”,这种平淡。
2025年05月14日
1 阅读
0 评论
0 点赞
2025-05-14
Emacs 折腾日记(二十三)——进一步提升编辑效率
在前面的几篇,我们完成了Emacs的vim模拟器、中文输入、多行编辑以及基本的补全功能的添加。这一篇没有具体的提升哪一方面的能力,这一篇我想整合我在其他教程中看到的我认为对我比较有用的用法和插件,算是对前期功能的一个总结。让Emacs记住一些信息一般的编辑器都会在下次打开时记住上次的一些信息,例如记住之前打开过的文件,执行过的命令,或者记住上次的窗口布局。记住上次执行的命令我们每次使用 M-x 执行命令时,minibuffer中显示的提示都是一样的,那些常用命令要么不在上面要么太靠下了,我们希望能记住某些命令,以便能快速找到它。记住上次执行的命令可以使用 savehist 插件。它是一个Emacs自带的插件,默认是关闭的状态,我们可以通过将 use-package 来加载它,但是因为是自带的,不需要从镜像中下载所以它的 :ensure 项应该设置为 nil(use-package savehist :ensure nil :hook (after-init . savehist-mode) :custom (savehist-file (locate-user-emacs-file "custom/savehist")) ;; 设置保存文件的位置 (savehist-additional-variables '(kill-rings shell-command-history)) ;; 额外保存剪切板和shell命令行历史 (savehist-ignored-variables '(message-history)) ;; 不保存消息历史 (history-delete-duplicates t) ;; 自动去重 (history-length 1000) ;; 保存历史数据条目 )在执行一些操作关掉Emacs之后,我们会发现它在 ~/.emacs.d/custom 生成了一个名为 savehist 的文件,它记录了之前在minibuffer中执行的命令。为了保持git工程的干净,我打算将这种历史文件排除在git管理之外,所以单独将它放到custom目录,并忽略它其实该插件不光可以保留执行的命令,minibuffer中的许多信息它都可以保存和持久化。minibuffer-history (所有 minibuffer 输入历史)command-history (执行过的命令)search-ring (搜索历史)regexp-search-ring (正则搜索历史)extended-command-history (M-x 命令历史)file-name-history (文件路径历史)记住上次打开的文件一般的编辑器都可以记录上次打开的文件,并列出来。Emacs也有一个类似的内置插件—— recentf(use-package recentf :ensure nil :hook (after-init . recentf-mode) :custom (recentf-max-menu-item 10) ;; 最多只记录10条历史记录 (recentf-save-file (locate-user-emacs-file "custom/.recentf")) ;; 定义保存历史记录的临时文件路径 )搜索功能的增强实现全局搜索我们可以依赖Linux上的命令行工具 grep 和最近(也不算近了)的 ripgrep。之前在介绍vim的时候,vim内部集成了 grep。但是我们使用更为强大的 ripgrep。在Emacs中可以配合插件 consult 和 ripgrep,调用 consult-ripgrep 来进行全局搜索。它会自动搜索当前项目下的所有目录。我们对之前 consult 插件的配置代码进行一些修改,并添加 ripgrep 的配置(use-package consult :ensure t) (use-package ripgrep :ensure t :after consult :bind (("C-s" . consult-ripgrep)) )这里我们将 C-s 绑定的快捷键修改为 consult-ripgrep。神奇的是,配合之前安装的orderless,我们只需要按照一个模糊的记忆来匹配想要的内容。同时它也能支持输入中文批量替换批量替换这个功能,根据我找到的教程,它需要依赖 embark、consult、和 wgrep 这么三个插件。其中 consult 用来进行搜索,而 embark 可以为不同场景下的文本/候选项(如搜索结果、补全列表、文件路径等)提供动态的快捷操作菜单。简化了minibuffer上的一些操作。而 wgrep 则是其中的核心插件,用来批量修改内容并保存(use-package embark :ensure t :after consult :bind (("C-e" . embark-export))) (use-package embark-consult :ensure t :after embark) (use-package wgrep :ensure t :custom (wgrep-auto-save-buffer t) ;; 自动保存修改 )这里我们使用 :after 来保证插件的加载顺序依次为 consult、embark、embark-consult,特别是 embark-consult,它依赖 consult 和 embark,一定要将它放到后面加载。下面来演示如何进行批量替换,这里我们将配置中所有 use-package 修改为 package-install,修改之前记得使用git等版本管理工具进行备份首先,使用 C-s 搜索 use-package 关键字接着使用 C-e, 也就是上面绑定的快捷键来将结果从 minibuffer 导出到 buffer然后使用 C-c C-p 调用 wgrep-change-to-wgrep-mode 将 buffer 的mode由 grep-mode 修改为 wgrep-mode接着使用 M-% 调用 query-replace 进行替换,这个时候它需要输入被替换的字符和替换后的字符确定后,对于每个待替换的位置使用 y 或者 n 来表示替换或者不替换。也可以使用 ! 替换所有最后使用 C-c C-c 调用 wgrep-finish-edit 来结束编辑,配置之前设置的自动保存,此时修改内容已经被保存了修改之后如何不满意,可以使用 C-c C-k 撤销修改小节这应该是最后一篇关于Emacs自身编辑功能的增强了,在这一块我没有使用太多的Emacs经验。倒是在vim上有点经验,所以很多东西我不自觉地就往vim上面靠,总想着vim在编辑上有些功能Emacs上还没有,该如何进行添加,这几篇就显得比较分散,总是想到什么功能就往上面堆。为此造成各位读者阅读体验不佳,我表示道歉。谢谢各位读者的支持和鼓励!
2025年05月14日
6 阅读
0 评论
0 点赞
2025-05-07
读 《南京大屠杀》
这本书是我收藏在书架上好久都不愿意读的一本书。因为它里面的内容是如此的沉重。作为一个历史上著名的事件,从中学课到各种记录片,都描述了在这个事件中,敌人是多么的残酷,多么的灭绝人性。而且据说作者还因为这本书导致精神出现问题,最终因为精神问题自杀。我不知道在读完这本书之后会是怎样的心情。但是借着五一这段假期我没什么事,索性读完它。本书分为3个部分,分别讲述了历史上的南京大屠杀,从日本人的角度如何看待南京大屠杀,以及一些国际友人在这场浩劫中采取的救助行动。书中从各个角度,详细的描述了南京大屠杀的惨状。在读这本书的过程中,我时不时停下来,想想书中描述的场景,与之前看过的记录片联系起来。我很难想象这些暴行是出自人类之手,日本人就是未进化的野兽,卑鄙下作的下等人,我实在是找不到合适的词语来形容这种暴行。我想正常人类的文字应该无法准确的描述当初国人的惨状,任何人在看完相关记录之后能心平气和的看待日本和日本人。但是我们不应该一棒子打死所有日本人,书中虽然没有记载,但是我们记住了很多拥有共产主义精神和国际主义精神的日本人,在那段历史中仍然有部分日本人及时醒悟过来并且投入到反抗帝国主义暴行的运动中来。毛主席高瞻远瞩的写出“中国人民和日本人民的敌人是一致的,都是日本帝国主义以及中华名族的败类”。南京大屠杀是任何中国人都不应该忘却的惨痛历史,我实在是不太想详细的记录这本书的一些细节。首先这本书里面的内容之震撼不是简单的就能概括的,真正的震撼应该要亲自阅读这本书。另外这本书里面写的内容在没有做好心理准备之前是不适合阅读的,在阅读的过程中我总是要停下来狠狠的骂一下日本人才能继续阅读,不然我心理实在过意不去。个中滋味我想只有在阅读的过程中才能体会到。我对日本这个名族一直很矛盾,日本有优秀的电影、音乐、文学、游戏、动漫等文化产业,但同时又是一个充满野心,又保留军国主义的国度。我想还是毛主席说的对,我们应该仇恨军国主义,日本的右翼思想。而不应该仇恨普通的日本人。他们与我们一样,承受了战争的痛苦和苦难。
2025年05月07日
3 阅读
0 评论
0 点赞
2025-05-07
Emacs 折腾日记(二十二)——补全强化
在之前的一系列文章中,我们对Emacs做了一些小范围的定制,目前它已经可以很好的模拟vim的一些基础功能。我们也在模拟vim基础功能之上做了一些能力的提升。本篇我们将对Emacs自带的补全系统做一个升级,并且给出一些搜索和替换的方案,进一步提升Emacs的效率Emacs上有很多很好用的补全插件,著名的有前期的 ivy 体系和当前社区比较火的vertico 体系。为了与时俱进,而且Emacs-China中的很多帖子也推荐使用vertico,所以这里我也介绍这个体系中的插件。vertico 体系中包括下面几个插件:verticoconsultcorfumarginaliaorderlessconsultconsult 插件提供了一系列的查找和补全命令(use-package consult :ensure t :bind (("C-s" . consult-line)))这样我们可以通过使用 C-s 来进行搜索vertico默认情况下,我们使用M-x 输入命令时没有补全提示,但是可以使用TAB 键补全。我们可以通过命令 icomplete-mode 来启用这个mode,以便在输入命令时能拥有一个补全。但是这个补全采用的是横向排版的方式,显示上也不太直观。这里我们可以通过vertico 插件对补全进行增强。vertico 提供了一个垂直样式的补全系统。我们可以通过下列代码来安装并启用它(use-package vertico :ensure t :hook (after-init . vertico-mode))重启emacs之后,再执行 M-x 之后发现它已经可以竖直的显示命令,并且会列出可能的命令了。可以使用 C-n、C-p 来选择下一个或者上一个命令orderless顾名思义,orderless 提供一种无序补全。它可以将一个搜索的范式变成数个以空格分隔的部分,各部分之间没有顺序,你要做的就是根据记忆输入关键词、空格、关键词。它改变了我们使用和思考的习惯,我们不再需要关心信息的顺序,我们只需要在脑海中搜索关键信息片段,然后把这些片段组合起来即可,剩下的都交给Emacs。例如我们要输入 package-refresh-contents 来刷新包管理里面的源。常规的做法我们需要先输入 pack 等等字符,然后由补全信息给我们提示,加入 orderless 之后,可以凭借模糊的记忆输入类似 refre pack 这样的片段来进行匹配(use-package orderless :ensure t :init (setq completion-styles '(orderless)))orderless 是针对整个minibuffer进行增强的,只要是使用minibuffer的地方都可以使用。例如我们上面使用了 consult 插件并且绑定了 C-s 来进行搜索,这里我们就可以使用orderless 来配合完成搜索功能marginaliamarginalia 可以给minibuffer中候选条目显示一段注释或者其他信息。其实不光是执行命令的时候marginalia是启用的,现在只要是minibuffer中的选项,marginalia都是可以使用的,例如使用 switch-buffer 和 find-file 或者使用帮助信息的时候也可以展示相关信息corfucorfu 可以让我们通过弹窗进行补全。(use-package corfu :ensure t :hook (after-init . global-corfu-mode) :custom (corfu-auto t) (corfu-auto-deply 0) (corfu-min-width 1) :init (corfu-history-mode) (corfu-popupinfo-mode))在安装完成之后,我们在编写相关配置的时候可以配合orderless,只输入函数的部分,仅仅凭借模糊的记忆让Emacs自己来匹配我们想要的内容,极大的提高了输入的效率capecorfu 插件仅仅是一个补全的前端,它需要补全后端提供数据。好在Emacs 自己提供了有关elisp 的补全后端,所以上面在测试corfu补全的时候可以出现。但是在其他文本类型不会产生补全选项。而cape则是集成了多种补全后端,它与corfu联合起来可以起到很好的补全效果(use-package cape :ensure t :init (add-to-list 'completion-at-point-functions #'cape-dabbrev) (add-to-list 'completion-at-point-functions #'cape-file) (add-to-list 'completion-at-point-functions #'cape-keyword) (add-to-list 'completion-at-point-functions #'cape-ispell) (add-to-list 'completion-at-point-functions #'cape-dict) (add-to-list 'completion-at-point-functions #'cape-symbol) (add-to-list 'completion-at-point-functions #'cape-line))上述代码中 completion-at-point-functions 保存的是Emacs在补全时调用的相关函数来获取补全项,我们将cape 的相关函数添加到这个列表中,供Emacs在触发补全时调用。到此为止,我们对Emacs自身的补全进行了加强。进一步提升了编辑的效率
2025年05月07日
6 阅读
0 评论
0 点赞
2025-05-06
读《经济学通识》
本书是薛兆丰之前发表过的有关经济学相关文章的一个集合。这些文章利用经济学知识分析相关的社会的问题,在实践中学习经济学。之前我看过一些经济学相关的书籍,那些要么是文绉绉的理论看的人头大,要么是浅尝辄止,感觉不到相关的点。这一系列的文章通过社会问题来聊其中涉及的经济学知识,在实践中学习。算是一本比较好的入门经济学的书籍。书中也不乏很多妙语。下面我截取一些我比较喜欢的句子来谈谈自己的看法例如开头就说人生至少面临4项普遍约束:(1)东西不够;(2)生命有限、(3)互相依赖、(4)需要协调。这四项对应着四类经济学理论:(1)需求定律;(2)利息理论;(3)制度理论;4(宏观理论)。仔细想想,总结的这四项约束实在是太精辟了,特别是东西不够和生命有限。我们无时无刻不在面临着东西不够的窘境。大到教育、医疗、国家的资源;小到到底今晚是吃火锅好还是吃炒菜好。我们面临着普遍的选择问题,而经济学就是为了计算每种选择的成本与收益,帮助我们做决策的。一般的一个不“认钱”的社会,它就不得不“认人”当需求无法通过价格反馈给市场时,就必然会造成物质短缺。如果不通过价格来分配物资,就会有一套严格的制度来对人划分369等,按等级分配。一旦需要人为的区分需求,必然会导致权力的腐败。有一句名言:“权力不会向穷人敞开,而金钱会”供求先决定产品的价格,而最终产品的价格再来决定原材料的成本虽然下意识的认为,商家会在成本的基础上提价并作为商品最终的售价。但是根据需求理论,价格是由需求决定的。商家也只能根据需求定价,然后在这个定价的基础之上压缩成本价。成本太高最终会导致商品因为价格过高而无人问津。任何国际贸易,都不仅会使得交易双方双赢,还导致生产效率较低的第三方受损交易的双方是共赢的,而会损害未成交的其他潜在商家的损失。一般来说商家与商家才是竞争对手,同样的客户与客户间也是竞争关系汇率是由甲国人民对乙国资源的需求,以及乙国人民对甲国资源的需求共同决定的。这里还是可以用需求理论来解释,当一国对另一国资源的需求提升,那么对它国货币的需求就会提升。也就是说它国货币会增值。耐用品的现值,取决于人们对其未来效用的预期。一项资产的价值,总是它未来收入的折现,而过去投入的成本是沉没成本,不论大小都不影响资产的现值典型的应该是股票这一资产的价值,股票升值并不是说当前公司有价值,而是人们认为公司未来会比较有价值。所以永远无法评估明天股票是涨还是跌。因为参与市场交易的每个人对公司未来价值都有不同的评估方式。同样的我们投资一个孩子的教育并不是说孩子现在很出色,而是通过教育孩子的未来大概率会出色。普通人有四种办法增加收入:挣钱、借钱、卖家当、抢钱;而政府增加收入的方式也有四种:挣钱、借钱、卖家当,不然就是征税和印钱。先谈挣钱。古今中外的经验告诉我们,政府不善于挣钱,尽管政府官员可以很聪明,政府可以拥有海量的市场数据,政府也具备做事的魄力,但致命之处是:政府官员不是公共资源的私有者,他们对资源利用的决策,可能只顾任期之内的效果,不可能看到遥远的未来。“争取和保住位置”是他们的目的,“做事”是他们的手段;而不是相反,他们不可能把做事当作目标,而把“争取和保住位置”当作手段,不是说政府官员中缺乏志向高远之人,而是说政治的现实约束,决定了官员必定“先占位置,始能做事”花自己的钱办自己的事,花别人的钱办自己的事、花自己的钱办别人的事、花别人的钱办别人的事,效率是依次递减的人的思想五花八门,而人的行动却大同小异;因为前者不用承担代价,后者承担代价。不要看一个人怎么说,而要看他怎么做。很多时候,经济学确实如作者是所说,是一门提升认知,给自己洗脑的学科。通过学习经济学,对一些社会现象有了一定的认知。同时也可以指导我们如何做决策。小到今晚吃什么、大到一生于谁为伴。其实都可以利用经济学相关知识,在权衡利弊之后行动。行动是要付出代价的,天下没有免费的午餐,即使有,也需要付出时间于其他人去竞争。
2025年05月06日
3 阅读
0 评论
0 点赞
2025-04-22
Emacs 折腾日记(二十一)——编辑能力提升
上一篇文章,我们补充了一些基本的配置,并且关闭了一些默认的行为。这里我们继续对它进行配置。本篇将要使用一些插件来修改默认的编辑行为进一步提高编辑文本的效率。avy 插件基础用法在vim中有 easymotion 可以使用,在Emacs中可以使用 avy 插件。它的功能于前面介绍的easymotion 类似。通过下面的代码来安装(use-package avy :ensure t :after general ;; 确保 general 插件已经安装 :config (setq avy-timeout-seconds 0.5) (my-leader-def "f" 'avy-goto-char-timer))我们在安装配置的时候使用之前定义的leader键来定义它的一些行为。首先定义 SPC-f 来进行快速跳转。avy-goto-char-timer 的功能与 easymotion 类似,将要查找的字符使用不同的字母进行标识,然后根据下一步的输入来确定光标的位置,例如下面的例子我们可以连续输入一段内容减少待筛选项。当然这个速度要快,否则在一定时间内没有输入文本之后,avy会认为已经结束输入了。这个等待的时间我们在上面通过 avy-timeout-seconds 定义的是 0.5。当然也可以扩大这个时间范围进阶用法这个简单的功能只是 avy 功能的冰山一角。它还有许多有用的功能,如果能熟练使用将会极大的提高编辑文本的效率。实际上avy 在筛选、跳转之前可以执行用户指定的动作,它支持哪些动作呢?我们可以在输入筛选的部分文本后输入?,查看支持的动作。我们来举一个例子:下面有一段文本,我希望将text1复制到最后一行,那么可以这么操作使用<leader>f 激活 avy,然后输入筛选文本输入 Y 表示复制整行输入对应字符表示选中text1 所在行此时我们会发现,text1 已经被复制到光标所在行了多行操作和块操作在vim中我们介绍了多行操作,主要是使用C-v 来选中某些行,然后通过使用A 或者 I 来选中行尾或者行首,并进入插入模式。这种方式可以同时在对应位置插入多个相同的字符。emacs 中的 evil 插件也可以进行相同的操作。但是对于行间或者每行在不同位置插入的情况就不适用了。我们可以使用插件 evil-multiedit 来达到这一效果。evil-multiedit 深度绑定了vim的快捷键,在选中区域之后可以直接使用vim中的 I/A 来编辑选中区域的首部或者尾部。也可以使用 ciw 之类的同时修改多个选中区域。在选区时既可以使用vim 中的 * 来查找并选中,也可使用 / 来搜索并且同时选中多个。这个插件相当于增强了vim的多行编辑功能我们使用下列的代码来安装和简单的配置(use-package evil-multiedit :ensure t :after evil :config (evil-multiedit-default-keybinds) (my-leader-def "m m" #'evil-multiedit-match-and-next ; 标记当前符号并跳转下一个 "m M" #'evil-multiedit-match-and-prev ; 标记当前符号并跳转上一个 "m a" #'evil-multiedit-match-all ; 标记所有相同符号 "m r" #'evil-multiedit-restore ; 恢复单光标模式 "m c" #'evil-multiedit-toggle-or-restrict ; 切换选区/限制编辑区域 ))我们可以使用 <leader> mm 来选中符合条件的项也可以使用 <leader> ma 来选择所有符合条件的项好了,本节到此也就结束了,本节依靠两个插件,进一步模拟vim相关的功能,并且对vim原有的功能进行了一定程度的补强。熟练使用这两个插件将会对编程的效率有一个进一步的提升。作为一个普通的文本编辑器也足够了。
2025年04月22日
7 阅读
0 评论
0 点赞
2025-04-19
读 《莫兰传》
这个标题看着像一个人物传记,但是实际上它是一系列的推理小说。这个系列的小说是我之前在网上找到的鬼马星作品集。说到这个作者,我还是从高中时期买过的一些推理小说杂志上听说的。之前只在杂志上零星的看过一些片段,只知道是一个中国的作家。这是第一次全面的阅读她的作品。这个作品集中当然不止 《莫兰传》这一个系列,还有好几个系列,但是长时间读同一个风格的作品难免有些审美疲劳,我想先暂停一下其他内容的阅读,看看其他的书籍,到后面无聊的时候再往后继续读。《莫兰传》主角当然是莫兰,她出生在一个家境优渥,父母恩爱的家庭。而男主角高竞从小经历了父亲去世,母亲将父亲去世归咎于他并且从此不待见他,而他的妹妹也是一个只知索取却从来没有感恩过哥哥的自私自利的人,好在出生并成长在这样家庭中的高竞并没有因此消沉或者走入歧途,相反他却是一个热心肠并且极富正义感的好警察。这个系列就是围绕着男女主互相配合侦破一系列迷案展开的。书中一直穿插着描述了主角莫兰和高竞的感情线。从20岁高竞见到莫兰一见钟情到最后女主成年后二者修成正果。这些感情线同样充斥了误会的争吵,二人在一起时的甜蜜,有种看言情小说的味道。但也是紧张案件中间的调味剂,使人因为案件紧绷的神情能有丝丝的放松,甚至会因为二人间的甜蜜日常会心一笑。与其说这一系列的侦探是莫兰,不如说是二人组都在案件中扮演者各自的侦探角色。作者擅长多视角叙事,经常在莫兰、高竞、凶手和其他第三方人员的视角间切换,并且在切换中从不同人的视角中给读者一些用于推理的线索。在《隔墙玫瑰》这个案件中,因为高竞失忆,作者在两人间的视角切换进行的极为自然,最终导向真相,最终二者携手破案。并且最终作者给了高竞一个很好的结局。高竞因为失忆忘记了成年前的记忆,算是摆脱了原生家庭的桎梏,迎来了新生。要最令人失望的要数《宴无好宴》,这个案子开头确实挺吸引人的。四个月前探员李耀明被杀,警察局档案室警员乔纳的同事若琳约乔纳在某个茶餐厅见面,并且讲述了丈夫最近的一些异常。但是在乔纳中间离开一段时间之后若琳被杀。随后若琳的丈夫也被人从地铁站台推下,被人谋杀。并且在其中还牵涉出警局的内鬼,以及背后的黑色势力——司徒雷。开局这么吸引人,但是随着故事的推进,也越来越无聊。主副线剧情混乱,在前面几部塑造的人物形象完全变了样,只是为了男女主之间的感情线服务,男女主之间也似乎是为了谈恋爱而谈恋爱。这部书中充斥着爱情,似乎正义、真相都为了爱情让步。最后的也是草草结束,感觉作者在憋大招结果确给我来了个大的。虽然这一系列有这样那样的缺点,但是却不失为一本好的小说,故事性也足够。就像东野圭吾那样神一本鬼一本,作者也不可能每本都优秀。作者塑造的人物也是个性鲜明。作者的推理小说具体是什么派别,到底是本格派、社会派还是其他的我也说不准,但是给我的感觉有点像看柯南。推理只是服务于剧情,服务于人物塑造。我倾向于叫这个风格为偶像派推理小说,将来改编成电视剧,男女主弄些流量小生、俊男靓女,谈着恋爱就把案子破了,这系列小说给我的就是这么一种感觉。作者有中国的“阿加莎”之称,但是我感觉这系列的作品还达不到阿婆的高度。其实写小说特别是推理小说的读后感写不了多少字,其他的小说介绍一下大概的情节,再分析一下人物感觉就很圆满。但是推理小说最大的魅力就是当你什么都不知道随着阅读的深入,跟着作者的节奏,最后恍然大悟那一刻。要是提前被剧透了一些细节,阅读的快感就大打折扣了。
2025年04月19日
6 阅读
0 评论
0 点赞
1
2
3
...
33