Edit and review GitHub issues and pull requests from the comfort of your favorite editor.
<img src="https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="BuyMeACoffee" width="140">
>=0.10.0read:project scope to your gh token. You can
do so by running gh auth refresh -s read:project.project
scope to your token instead.Use your favourite plugin manager to install it, e.g.:
use { 'pwntester/octo.nvim', requires = { 'nvim-lua/plenary.nvim', 'nvim-telescope/telescope.nvim', -- OR 'ibhagwan/fzf-lua', 'nvim-tree/nvim-web-devicons', }, config = function () require"octo".setup() end }
require"octo".setup({ use_local_fs = false, -- use local files on right side of reviews enable_builtin = false, -- shows a list of builtin actions when no action is provided default_remote = {"upstream", "origin"}; -- order to try remotes default_merge_method = "commit", -- default merge method which should be used when calling `Octo pr merge`, could be `commit`, `rebase` or `squash` ssh_aliases = {}, -- SSH aliases. e.g. `ssh_aliases = {["github.com-work"] = "github.com"}` picker = "telescope", -- or "fzf-lua" picker_config = { use_emojis = false, -- only used by "fzf-lua" picker for now mappings = { -- mappings for the pickers open_in_browser = { lhs = "<C-b>", desc = "open issue in browser" }, copy_url = { lhs = "<C-y>", desc = "copy url to system clipboard" }, checkout_pr = { lhs = "<C-o>", desc = "checkout pull request" }, merge_pr = { lhs = "<C-r>", desc = "merge pull request" }, }, }, comment_icon = "▎", -- comment marker outdated_icon = " ", -- outdated indicator resolved_icon = " ", -- resolved indicator reaction_viewer_hint_icon = " "; -- marker for user reactions user_icon = " "; -- user icon timeline_marker = " "; -- timeline marker timeline_indent = "2"; -- timeline indentation right_bubble_delimiter = ""; -- bubble delimiter left_bubble_delimiter = ""; -- bubble delimiter github_hostname = ""; -- GitHub Enterprise host snippet_context_lines = 4; -- number or lines around commented lines gh_cmd = "gh", -- Command to use when calling Github CLI gh_env = {}, -- extra environment variables to pass on to GitHub CLI, can be a table or function returning a table timeout = 5000, -- timeout for requests between the remote server default_to_projects_v2 = false, -- use projects v2 for the `Octo card ...` command by default. Both legacy and v2 commands are available under `Octo cardlegacy ...` and `Octo cardv2 ...` respectively. ui = { use_signcolumn = false, -- show "modified" marks on the sign column use_signstatus = true, -- show "modified" marks on the status column }, issues = { order_by = { -- criteria to sort results of `Octo issue list` field = "CREATED_AT", -- either COMMENTS, CREATED_AT or UPDATED_AT (https://docs.github.com/en/graphql/reference/enums#issueorderfield) direction = "DESC" -- either DESC or ASC (https://docs.github.com/en/graphql/reference/enums#orderdirection) } }, pull_requests = { order_by = { -- criteria to sort the results of `Octo pr list` field = "CREATED_AT", -- either COMMENTS, CREATED_AT or UPDATED_AT (https://docs.github.com/en/graphql/reference/enums#issueorderfield) direction = "DESC" -- either DESC or ASC (https://docs.github.com/en/graphql/reference/enums#orderdirection) }, always_select_remote_on_create = false -- always give prompt to select base remote repo when creating PRs }, file_panel = { size = 10, -- changed files panel rows use_icons = true -- use web-devicons in file panel (if false, nvim-web-devicons does not need to be installed) }, colors = { -- used for highlight groups (see Colors section below) white = "#ffffff", grey = "#2A354C", black = "#000000", red = "#fdb8c0", dark_red = "#da3633", green = "#acf2bd", dark_green = "#238636", yellow = "#d3c846", dark_yellow = "#735c0f", blue = "#58A6FF", dark_blue = "#0366d6", purple = "#6f42c1", }, mappings_disable_default = false, -- disable default mappings if true, but will still adapt user mappings mappings = { issue = { close_issue = { lhs = "<space>ic", desc = "close issue" }, reopen_issue = { lhs = "<space>io", desc = "reopen issue" }, list_issues = { lhs = "<space>il", desc = "list open issues on same repo" }, reload = { lhs = "<C-r>", desc = "reload issue" }, open_in_browser = { lhs = "<C-b>", desc = "open issue in browser" }, copy_url = { lhs = "<C-y>", desc = "copy url to system clipboard" }, add_assignee = { lhs = "<space>aa", desc = "add assignee" }, remove_assignee = { lhs = "<space>ad", desc = "remove assignee" }, create_label = { lhs = "<space>lc", desc = "create label" }, add_label = { lhs = "<space>la", desc = "add label" }, remove_label = { lhs = "<space>ld", desc = "remove label" }, goto_issue = { lhs = "<space>gi", desc = "navigate to a local repo issue" }, add_comment = { lhs = "<space>ca", desc = "add comment" }, delete_comment = { lhs = "<space>cd", desc = "delete comment" }, next_comment = { lhs = "]c", desc = "go to next comment" }, prev_comment = { lhs = "[c", desc = "go to previous comment" }, react_hooray = { lhs = "<space>rp", desc = "add/remove 🎉 reaction" }, react_heart = { lhs = "<space>rh", desc = "add/remove ❤️ reaction" }, react_eyes = { lhs = "<space>re", desc = "add/remove 👀 reaction" }, react_thumbs_up = { lhs = "<space>r+", desc = "add/remove 👍 reaction" }, react_thumbs_down = { lhs = "<space>r-", desc = "add/remove 👎 reaction" }, react_rocket = { lhs = "<space>rr", desc = "add/remove 🚀 reaction" }, react_laugh = { lhs = "<space>rl", desc = "add/remove 😄 reaction" }, react_confused = { lhs = "<space>rc", desc = "add/remove 😕 reaction" }, }, pull_request = { checkout_pr = { lhs = "<space>po", desc = "checkout PR" }, merge_pr = { lhs = "<space>pm", desc = "merge commit PR" }, squash_and_merge_pr = { lhs = "<space>psm", desc = "squash and merge PR" }, rebase_and_merge_pr = { lhs = "<space>prm", desc = "rebase and merge PR" }, list_commits = { lhs = "<space>pc", desc = "list PR commits" }, list_changed_files = { lhs = "<space>pf", desc = "list PR changed files" }, show_pr_diff = { lhs = "<space>pd", desc = "show PR diff" }, add_reviewer = { lhs = "<space>va", desc = "add reviewer" }, remove_reviewer = { lhs = "<space>vd", desc = "remove reviewer request" }, close_issue = { lhs = "<space>ic", desc = "close PR" }, reopen_issue = { lhs = "<space>io", desc = "reopen PR" }, list_issues = { lhs = "<space>il", desc = "list open issues on same repo" }, reload = { lhs = "<C-r>", desc = "reload PR" }, open_in_browser = { lhs = "<C-b>", desc = "open PR in browser" }, copy_url = { lhs = "<C-y>", desc = "copy url to system clipboard" }, goto_file = { lhs = "gf", desc = "go to file" }, add_assignee = { lhs = "<space>aa", desc = "add assignee" }, remove_assignee = { lhs = "<space>ad", desc = "remove assignee" }, create_label = { lhs = "<space>lc", desc = "create label" }, add_label = { lhs = "<space>la", desc = "add label" }, remove_label = { lhs = "<space>ld", desc = "remove label" }, goto_issue = { lhs = "<space>gi", desc = "navigate to a local repo issue" }, add_comment = { lhs = "<space>ca", desc = "add comment" }, delete_comment = { lhs = "<space>cd", desc = "delete comment" }, next_comment = { lhs = "]c", desc = "go to next comment" }, prev_comment = { lhs = "[c", desc = "go to previous comment" }, react_hooray = { lhs = "<space>rp", desc = "add/remove 🎉 reaction" }, react_heart = { lhs = "<space>rh", desc = "add/remove ❤️ reaction" }, react_eyes = { lhs = "<space>re", desc = "add/remove 👀 reaction" }, react_thumbs_up = { lhs = "<space>r+", desc = "add/remove 👍 reaction" }, react_thumbs_down = { lhs = "<space>r-", desc = "add/remove 👎 reaction" }, react_rocket = { lhs = "<space>rr", desc = "add/remove 🚀 reaction" }, react_laugh = { lhs = "<space>rl", desc = "add/remove 😄 reaction" }, react_confused = { lhs = "<space>rc", desc = "add/remove 😕 reaction" }, review_start = { lhs = "<space>vs", desc = "start a review for the current PR" }, review_resume = { lhs = "<space>vr", desc = "resume a pending review for the current PR" }, }, review_thread = { goto_issue = { lhs = "<space>gi", desc = "navigate to a local repo issue" }, add_comment = { lhs = "<space>ca", desc = "add comment" }, add_suggestion = { lhs = "<space>sa", desc = "add suggestion" }, delete_comment = { lhs = "<space>cd", desc = "delete comment" }, next_comment = { lhs = "]c", desc = "go to next comment" }, prev_comment = { lhs = "[c", desc = "go to previous comment" }, select_next_entry = { lhs = "]q", desc = "move to next changed file" }, select_prev_entry = { lhs = "[q", desc = "move to previous changed file" }, select_first_entry = { lhs = "[Q", desc = "move to first changed file" }, select_last_entry = { lhs = "]Q", desc = "move to last changed file" }, close_review_tab = { lhs = "<C-c>", desc = "close review tab" }, react_hooray = { lhs = "<space>rp", desc = "add/remove 🎉 reaction" }, react_heart = { lhs = "<space>rh", desc = "add/remove ❤️ reaction" }, react_eyes = { lhs = "<space>re", desc = "add/remove 👀 reaction" }, react_thumbs_up = { lhs = "<space>r+", desc = "add/remove 👍 reaction" }, react_thumbs_down = { lhs = "<space>r-", desc = "add/remove 👎 reaction" }, react_rocket = { lhs = "<space>rr", desc = "add/remove 🚀 reaction" }, react_laugh = { lhs = "<space>rl", desc = "add/remove 😄 reaction" }, react_confused = { lhs = "<space>rc", desc = "add/remove 😕 reaction" }, }, submit_win = { approve_review = { lhs = "<C-a>", desc = "approve review" }, comment_review = { lhs = "<C-m>", desc = "comment review" }, request_changes = { lhs = "<C-r>", desc = "request changes review" }, close_review_tab = { lhs = "<C-c>", desc = "close review tab" }, }, review_diff = { submit_review = { lhs = "<leader>vs", desc = "submit review" }, discard_review = { lhs = "<leader>vd", desc = "discard review" }, add_review_comment = { lhs = "<space>ca", desc = "add a new review comment" }, add_review_suggestion = { lhs = "<space>sa", desc = "add a new review suggestion" }, focus_files = { lhs = "<leader>e", desc = "move focus to changed file panel" }, toggle_files = { lhs = "<leader>b", desc = "hide/show changed files panel" }, next_thread = { lhs = "]t", desc = "move to next thread" }, prev_thread = { lhs = "[t", desc = "move to previous thread" }, select_next_entry = { lhs = "]q", desc = "move to next changed file" },


职场AI,就用扣子
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!


多风格AI绘画神器
堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。


零代码AI应用开发平台
零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣 效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号