当前位置: 首页 > news >正文

Emacs 多个方便查看函数列表的功能

Emacs 有多个方便查看函数列表的功能。以下是几种主要的方法:

1. Imenu (最常用)

快捷键: M-x imenuC-x C-i

功能: 显示当前文件的函数/变量/类等定义列表

配置建议(添加到 .emacs):

;; 启用 imenu 在编程模式下自动显示
(add-hook 'prog-mode-hook (lambda () (setq imenu-generic-expression'((nil "^\\s-*\\(def\\|class\\|function\\)\\s-+\\([a-zA-Z0-9_]+\\)" 2)))))

2. Which-Function-Mode

启用方式: M-x which-function-mode

功能: 在模式行显示当前光标所在的函数名

配置:

;; 自动启用 which-function-mode
(add-hook 'prog-mode-hook 'which-function-mode)

3. Etags 和 Ctags

生成标签:

# 在项目目录下
ctags -R .

使用:

  • M-. : 跳转到定义
  • M-* : 返回跳转前的位置
  • M-x tags-search : 搜索标签

4. LSP 模式 (现代推荐)

需要安装:

(use-package lsp-mode:init (setq lsp-keymap-prefix "C-c l"):hook ((python-mode . lsp)(c++-mode . lsp)(java-mode . lsp)):commands lsp)(use-package lsp-ui:after lsp-mode:commands lsp-ui-mode)

功能:

  • C-c l w s : 显示工作区符号列表
  • C-c l w d : 显示文档符号列表
  • C-c l w i : 显示实现列表

5. Helm 或 Ivy 的 imenu 集成

使用 Helm:

(use-package helm:config(global-set-key (kbd "M-i") 'helm-imenu))

使用 Ivy:

(use-package ivy:config(global-set-key (kbd "M-i") 'counsel-imenu))

6. 侧边栏导航

使用 Neotree 或 Treemacs:

;; Neotree
(use-package neotree:config(global-set-key [f8] 'neotree-toggle));; Treemacs  
(use-package treemacs:config(global-set-key (kbd "M-0") 'treemacs-select-window))

7. 快速配置建议

对于 Python 开发,推荐这样配置:

;; 基本配置
(add-hook 'python-mode-hook(lambda ()(which-function-mode)(setq imenu-generic-expression'((nil "^\\s-*\\(def\\|class\\)\\s-+\\([a-zA-Z0-9_]+\\)" 2)))));; 绑定快捷键
(global-set-key (kbd "C-c i") 'imenu)

使用技巧

  1. 快速导航: 使用 C-x C-i 打开函数列表,输入函数名快速跳转
  2. 上下文感知: 启用 which-function-mode 后在状态栏看到当前函数名
  3. 项目范围: 使用 LSP 或 tags 可以在整个项目中导航函数

推荐从 imenu 开始使用,这是最轻量级且内置的功能。如果需要更强大的功能,可以考虑配置 LSP 模式。

http://www.xdnf.cn/news/1390051.html

相关文章:

  • QML QQuickImage: Cannot open: qrc:/images/shrink.png(已解决)
  • 前端-初识Vue实例
  • Spring Boot Redis序列化全解析(7种策略)
  • 2024年06月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • leetcode 461 汉明距离
  • 如何在FastAPI中玩转全链路追踪,让分布式系统故障无处遁形?
  • 基于MCP工具的开发-部署-上线与维护全流程技术实现与应用研究
  • 北斗导航 | PPP-RTK算法核心原理与实现机制深度解析
  • AI助力PPT创作:秒出PPT与豆包AI谁更高效?
  • TypeScript:map和set函数
  • 【前端教程】从基础到专业:诗哩诗哩网HTML视频页面重构解析
  • Java试题-选择题(21)
  • new/delete 和 malloc/free 区别
  • 小杰机器视觉(five day)——直方图均衡化
  • linux系统学习(13.系统管理)
  • 基于orin系列的刷写支持笔记
  • 30分钟入门实战速成Cursor IDE(1)
  • 【拍摄学习记录】04-拍摄模式/曝光组合
  • Nginx的主要配置文件nginx.conf详细解读——及其不间断重启nginx服务等操作
  • 数据结构—第五章 树与二叉树
  • 机器学习算法全景解析:从理论到实践
  • vue3 鼠标移上去 显示勾选框 选中之后保持高亮
  • 自然语言提取PDF表格数据
  • 马斯克杀入AI编程!xAI新模型Grok Code Fast 1发布,深度评测:速度、价格与API上手指南
  • Vue3 + Spring Boot 项目中跨域问题的排查与解决
  • CS144 lab3 tcp_sender
  • 自动驾驶中的传感器技术36——Lidar(11)
  • 《生成式AI消费级应用Top 100——第五版》| a16z
  • uni-app 跨平台项目的 iOS 上架流程:多工具组合的高效协作方案
  • driver.js实现前端页面引导