在之前的文章中,分了几篇着重介绍了Emacs编辑方面的功能改造。作为一个文本编辑器,要想坚持用下去首先应该改造成自己熟悉的编辑方式。
本节我们来介绍Emacs的目录管理
Dired Mode
Emacs自带一个名为 Dired
(Directory Editor) 的插件,它负责对目录进行操作。默认的,我们可以使用 C-x d
来进入Dired Mode。启动后它会等待用户输入想进入的目录,默认是当前目录。
Dired Mode 是提供了一种类似操作文本的方式来操作目录。我们可以像操作文本那样来对目录进行类似于
- 拷贝
- 剪切
- 粘贴
- 删除
- 创建
- 跳转
- 查找
- 重命名
- 批量操作
得益于前面的篇章配置的一些插件,可以很方便的使用Dired Mode
dired 美化
在正式介绍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 增强dired
dirvish 是在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 | 打开dired |
y | 拷贝 |
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配合键盘操作能极大的提升的效率
评论 (0)