lazygit 如何配置 editPreset 让 e 键按行号打开外部编辑器
【免费下载链接】lazygitsimple terminal UI for git commands项目地址: https://gitcode.com/GitHub_Trending/la/lazygit
lazygit 里有两个打开文件的命令:o是“open”,相当于在文件管理器里双击文件,对非文本文件也有效;e是“edit”,把文件打开到外部编辑器中。当e从 staging panel(暂存面板)等位置触发时,它还能跳转到文件中的正确行。要让这个“按行号打开”的行为使用你习惯的编辑器,最省事的方式是在配置文件中设置os.editPreset,让 lazygit 套用内置的编辑器预设命令。
确认配置文件位置
editPreset写在 lazygit 的全局配置文件里,默认路径为(来自 docs/Config.md):
- Linux:
~/.config/lazygit/config.yml - macOS:
~/Library/Application Support/lazygit/config.yml - Windows:
%LOCALAPPDATA%\lazygit\config.yml(旧版安装也可能在%APPDATA%\lazygit\config.yml)
此外还支持仓库级配置:<repo>/.git/lazygit.yml会覆盖全局配置,仓库任意上级目录中的.lazygit.yml也会被加载,适合把一组仓库共用同一套编辑器设置。
配置 editPreset
在配置文件中加入os.editPreset,例如使用 VS Code:
os: editPreset: 'vscode'文档列出的受支持预设值为:vim、nvim、nvim-remote、lvim、emacs、nano、micro、vscode、sublime、bbedit、kakoune、helix、xcode、zed和acme。每个预设都会同时设置edit、editAtLine(按行号打开)、editAtLineAndWait(按行号打开并等待窗口关闭)以及openDirInEditor四条命令模板,这些模板定义在 pkg/config/editor_presets.go 的getPreset函数中。例如vscode预设的按行打开命令是:
code --reuse-window --goto -- {{filename}}:{{line}}其中{{filename}}和{{line}}是 lazygit 在运行时替换的文件名与行号占位符,不需要手工填写。
如果暂时不配置editPreset,lazygit 在很多情况下也会根据git config core.editor、$VISUAL或$EDITOR猜出合适的预设;猜不到时回落到vim。但显式写出editPreset更可控,是推荐做法。
nvim-remote是一个实验性预设,仅当 lazygit 是从 neovim 进程内部启动时适用,它会让文件在父进程里打开而不是另起一个进程。
预设不满足时:手动指定命令模板
当预设里的默认命令不合用,或者你的编辑器根本没有预设时,可以直接设置edit、editAtLine、editAtLineAndWait选项。文档给出的示例如下(myeditor是文档中的占位编辑器名,替换成你的编辑器命令即可;{{filename}}、{{line}}由 lazygit 替换):
os: edit: 'myeditor {{filename}}' editAtLine: 'myeditor --line={{line}} {{filename}}' editAtLineAndWait: 'myeditor --block --line={{line}} {{filename}}' editInTerminal: true openDirInEditor: 'myeditor {{dir}}'命令模板必须包含{{filename}};editAtLine类命令可以包含{{line}}。
editInTerminal决定 lazygit 在调用编辑器前是否把自己挂起到后台。它“本名”应该是suspend——某些场景(如从 neovim 会话内启动、使用nvim-remote预设)技术上仍然处于终端里,但为向后兼容仍叫editInTerminal。如果你的编辑器在终端内运行,应设为true;GUI 编辑器(如 vscode、sublime)则不需要挂起。
验证配置是否生效
保存配置后重启 lazygit,然后:
- 进入 staging panel(暂存面板),把光标放到一个 hunk 上;
- 按
e。
按文档描述,e从 staging panel 等位置触发时会跳转到文件中的正确行。如果外部编辑器打开了文件并定位到该行,说明editPreset(或你手写的editAtLine命令)已生效。
另外可以用o对比一下:o只是像双击文件一样打开,不支持{{line}},不会跳到指定行——这也是两者行为差异的验证方式。
限制与边界
editPreset一次只能取一个值;想为不同仓库用不同编辑器时,用仓库级<repo>/.git/lazygit.yml覆盖全局配置。nvim-remote是实验性预设,只有 lazygit 运行在 neovim 进程内部时才有意义。- 新增编辑器预设的入口是 pkg/config/editor_presets.go 中的
getPreset函数,文档说明欢迎贡献新预设,但使用前请先确认你环境中的 lazygit 版本已包含该预设。 - 覆盖默认配置文件位置的方式见 docs/Config.md 的 “Overriding default config file location” 一节:用
CONFIG_DIR环境变量改目录,用--use-config-file参数或LG_CONFIG_FILE环境变量改具体文件。
【免费下载链接】lazygitsimple terminal UI for git commands项目地址: https://gitcode.com/GitHub_Trending/la/lazygit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考