分享一个小的使用用户体验优化的包 smart-gd.el

有了 AI , 一些繁琐的工作可以交给他来干 我计划逐步的将日常对 emacs 的小的改进以库的形式分享出来, 今天先来一个简单的:

访问 GitHub - jiahut/smart-gd.el: smart gd like vim in vscode

VSCode 的 Vim 插件有一个绝妙的设计——当你在定义处按 gd 时,它会智能地显示引用;在引用处按 gd 时,才跳转到定义。这种上下文感知让工作流变得无比流畅!

Emacs 中反复按 gd 和 gr 吗?smart-gd.el 让你的导航拥有上下文感知的能力 不再需要在"跳转定义"和"查找引用"之间纠结——让 gd 为你智能决策

通过 advice 系统增强 xref-find-definitions,与 LSP/eglot 完美配合, 即你不需要额外的配置, 启用就默认配置好

不再需要在"跳转定义"和"查找引用"之间纠结——让 smart-gd 带来一点智能的体验优化

3 个赞

看了一下,大致就是基于正则做一些文本匹配,如果有 defcustom def class 之类的关键字就认为当前光标处是定义处所以就查找引用,否则就查找定义。

说实话没看出来这个和 AI 有什么关系。还以为这个是调用 AI 让 AI 基于代码分析当前光标处到底是定义还是引用呢。。。

这个特点,就是 JetBrains 家的 IDE 中的 find-usages

很久之前,我糊过 xref 来满足这个需求。

(defun xref-find-usage()
  (interactive)
  (let* ((prev-point (point))
		  (prev-buffer (current-buffer))
		  (prev-window (selected-window))
		  )
	(call-interactively 'xref-find-definitions) 
	;; (message "%s %s" (buffer-name (current-buffer)) (selected-window))
	(if (and
		  (= prev-point (point))
		  (equal (selected-window) prev-window)
		  (not (equal (buffer-name (current-buffer)) xref-buffer-name)))
	  (progn
		(condition-case err
		  (call-interactively 'xref-find-references)

		  (error
			(message "not found definitions and references; finding declaration..."  )
			(lsp-find-declaration)
			)
		  )
		))))
5 个赞

代码是ai写的, 这个帖子也是ai写的 :joy:

喜欢这种针对小细节的优化, 明显你这个实现很nice, 更简洁 (另外追问一下, 哪里能看到这些小细节的优化呢, 库可能还是太大了, 弄出一个库好像太奢侈了)

确实和AI 没什么关系 原话是这样的 有了 AI , 一些繁琐的工作可以交给他来干 我计划逐步的将日常对 emacs 的小的改进以库的形式分享出来 README.md 中写了是通过正则实现的, 当然可以通过 treesit 来弄 现在一提 AI 就是宏大叙事, 本来的想表达的意思是, AI 可以帮忙干点累活, 可以专心思考一些小细节的优化

我喜欢这个,提升了交互体验。

1 个赞

小更新了一波, 借用 LSP 探测语法树, 如果检测不到退化到用正则 ( 这个代码应该可以去掉, 先留着) ,treesit 感觉emacs 目前弄的有点复杂, 需要各种hack , 我不喜欢

PS, 好像用正则就不高级了一样