Emacs 风格的文件操作和项目文件管理是啥样的?

目前主要工作流在 Windows 平台下。

我是从 vscode ( 轻度使用 ) 转 emacs 的,主要是把它们当作编辑器来用,转到 emacs 以后全键盘操作效率确实提高不少。现在 org mode 用的非常多,除此之外还写一些 Python 和 Go。需要 IDE 的时候就去 VS 和 JetBrains 两家找工具用。

Emacs 的配置参考了 https://github.com/manateelazycat/lazycat-emacs 的方案,主要是抄了 lsp-bridge, color-rg, auto-save, sort-tab, lazy-load, basic-toolkit 中的部分文件到我的配置里,还有一部分我自己配 ( 魔 ) 置 ( 改 ) 的东西。

但是我因为习惯了 vscode 中的 资源管理器 ( 就是那个树形文件导航 ) 的操作风格。主要操作大概是,浏览项目目录结构 ( 展开、收起文件夹 ),侧边打开 ( vscode 垂直分出第二屏并在第二屏上打开文件 ),copy&past,复制完整路径,重命名,删除,拖拽移动等等。

所以也在 emacs 里面配好了 treemacs。一开始用起来挺习惯的,但后来发现我总是要用鼠标去 treemacs 那里操作文件,键盘操作的思路经常被打断,所以我就准备弃用这个插件。而我又不晓得在这种树形文件导航占领编辑器之前,emacs 是咋完成我要做的这些操作的。

具体到操作的话,比如,我目前的主要问题是,我用 org mode 写了很多东西,百来个文档,放在一个项目文件夹中。按种类分文件夹,种类下有小种类。我怎么快速地浏览项目目录的文件结构?( color-rg 在搜索上很好用,但前提是知道要搜什么。这种情况 color-rg 似乎没什么用。 )

打开、复制、移动文件,重命名之类的操作主要使用 dired? 它正确的使用姿势是啥?我用起来不是很顺手,需要配些什么东西吗?

最后问一个宽泛的问题。大家平时的使用流程是啥样的?( 我从大家的使用流程里体会一下 Emacs 是啥风格 )

eaf-file-manager

左侧栏最大的问题就是你说的,要来回切换一下,甚至用鼠标。

开启wdired模式,直接修改dired buffer的文本(比如删除文件就直接把这一行删掉,把它移动到别的目录就直接修改那一行,以此类推),然后保存这个文本以后会自动修改目录树

1 个赞

至于浏览文件树的话,treemacs其实挺好的, 文件管理直接用wdired模式就好了。

eaf … 等我先把你的配置抄明白再继续加这种大组件 :rofl:

( 我的 emacs 现在隐隐有失控的迹象了 :joy:

treemacs 我觉得它太大了。而我现在在试着完全用 dired 做文件操作。

把文件操作从文件树导航中剥离的话,文件树就只剩一个浏览项目文件结构的功能了。

speedbar 这种上古组件和 treemacs 差在哪?( 我找到好多吐槽 speedbar 不好用的,但是都没说为啥这个组件不好用

单从浏览项目文件结构这个需求来说,speedbar 够用吗?

请注意,他们都是dired。

Edit: 突然发现你是说 Windows,那你谨慎尝试或者直接跳过吧。我没在 windows 上试过,基本也没收到过来自 windows 平台的用户反馈,有些功能可能用不了。

1 个赞

sidebar的文件管理器有好多年没用了。偶尔用vscode我也把sidebar关掉。因为它效率不高且占用看代码的空间。

找文件我用 GitHub - redguardtoo/find-file-in-project: Quick access to project files in Emacs , 也用counsel自带的counsel-git.

其他文件操作都在dired里完成,用熟的话效率很高。懂lisp和dired api很有用。 另外我使用了hdyra和dired结合,这样可以不用记dired的快捷键了, 我的配置见 GitHub - redguardtoo/emacs.d: Fast and robust Emacs setup.

根据需求,你是否可以看一下 NeoTree。

我也是从 VSCode 转的,类似的想法。一直在用这个包,功能足够,很简洁,不需要用到鼠标。我配置去掉了图标的显示,可以占用最小的地方完成功能。

如果需要工程管理,需要和 projectile 这个包联动;不想那么麻烦忽略就好。

treemacs 也支持键盘操作好吧 :new_moon_with_face:

treemacs 主要的场景是多个 workspace 多个 project 的管理,可以通过切换 workspace 来切换展示不同的 project,比如公司和个人项目之间切换,比较方便。

但是我因为习惯了 vscode 中的 资源管理器 ( 就是那个树形文件导航 ) 的操作风格。主要操作大概是,浏览项目目录结构 ( 展开、收起文件夹 ),侧边打开 ( vscode 垂直分出第二屏并在第二屏上打开文件 ),copy&past,复制完整路径,重命名,删除,拖拽移动等等。

treemacs 默认的快捷键

  • 侧边打开: o h (open horizontal)
  • copy: y f (会直接提示要 paste 到的路径)
  • 复制完整路径: y a
  • 重命名: R
  • 删除: d
  • 拖拽移动:支持

这些快捷键记不住的话在 treemacs 里按 ?就可以看到提示了

提供一个其它思路,你可能需要快速查找org文件,但也不一定使用tree, 所以org-roam可能是好的选择,它可以快速按照文件名模糊匹配文件名。 如果org文件是以英文命名则可以通过几次键盘敲击就能找到所需要org文件。

是的,我现在就在测试 speedbar 和 neotree 到底哪个更合适一点。

我只需要一个浏览功能就够了。

ps: 按理说,speedbar 功能应该不比 neotree 差多少吧,speedbar 还内置,但 neotree 我看到用人的更多 neotree 的特点在哪?

主要是,我想要尽可能少地装插件以提高整个 emacs 的鲁棒性,而 treemacs 规模太大,我把握不住 :new_moon_with_face:

ho 这个确实不错。我去 Linux 上体验一下。

我去试试 find-file-in-project, 正好可以和能检索内容的 color-rg 搭配。

推荐一个Dired-sidebar,可以同时拥有treemacs 的外观和dired 的操作,也不会像treemacs 那样庞大

sidebar确实占用空间,我也不用。

我就是一整个屏幕显示文件,或者分割窗口看不同位置。文件管理没有太多需要,所以不怎么依赖emacs。

演示了一下: 展开文件夹 - 打开文件 - 复制路径 - 创建/复制/移动/重命名文件 - 搜索 + 预览 (比如预览项目里的图标啥的)

我自己只在头几次打开不熟悉的项目时用 sidebar 简单浏览下,熟悉以后就关了。其他时候主要用 dired-jump 。不过这个视频里演示的操作和在普通 dired buffer 里的操作是一样的,因为都是 dired。 也就是说,不需要你学两套东西。

这个包相对所有解决方案是最轻的。核心1200行+,其他的模块都是可选的,一般就百把行。

我能想到的 windows 上会遇到的问题是文件复制移动你要自己配置一下 dirvish-yank-methods。其他的应该和 linux 差不多。

1 个赞

看视频第一步是找到名为git的子目录,我会用M-x find-directory-in-project-by-selected (该命令来自find-file-in-project)一步完成找到目录并用dired打开。

那是我随便展开的目录,只是作为演示,不是刻意去找的。对于熟悉的项目,我大部分时候是直接用 fd 列出所有文件直接定位到文件,小部分时候是 dired-jump 然后前后上下几次找到想要的文件 (因为熟悉,也观察到当前文件和目标文件隔的很近,对我来说反而更快,省去了在 minibuffer 里过滤的步骤)。

对于从 vscode 这类工具过渡到 Emacs 的用户来说,我也挺能理解为什么他们会习惯从 sidebar 里面去找文件。因为在对一个项目不熟悉的时候,从目录树里找文件的方式虽然显得笨拙,但通过这个过程可以慢慢熟悉项目结构。另外就是复制移动文件的时候直接在目录树里操作比在 minibuffer 里手打路径显得直观得多。