{"id":28280521,"url":"https://github.com/steschwa/fixme.nvim","last_synced_at":"2026-04-25T23:35:56.707Z","repository":{"id":276134199,"uuid":"804401323","full_name":"steschwa/fixme.nvim","owner":"steschwa","description":"Neovim plugin to customize quickfix items formatting","archived":false,"fork":false,"pushed_at":"2025-03-18T10:55:54.000Z","size":142,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-10T22:44:16.211Z","etag":null,"topics":["neovim","neovim-plugin","quickfix","quickfix-list"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/steschwa.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-22T14:13:09.000Z","updated_at":"2025-04-29T11:04:19.000Z","dependencies_parsed_at":"2025-02-06T13:53:38.664Z","dependency_job_id":"b300298a-b5b5-4697-b79d-9863d566c3ec","html_url":"https://github.com/steschwa/fixme.nvim","commit_stats":null,"previous_names":["steschwa/fixme.nvim"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/steschwa/fixme.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steschwa%2Ffixme.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steschwa%2Ffixme.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steschwa%2Ffixme.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steschwa%2Ffixme.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/steschwa","download_url":"https://codeload.github.com/steschwa/fixme.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steschwa%2Ffixme.nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32280979,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["neovim","neovim-plugin","quickfix","quickfix-list"],"created_at":"2025-05-21T10:17:11.525Z","updated_at":"2026-04-25T23:35:56.671Z","avatar_url":"https://github.com/steschwa.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fixme.nvim\n\nA Neovim plugin designed to enhance the quickfix list experience by providing customizable formatting options for quickfix items.\n\n![Formatted quickfix window in Neovim](./assets/preview.png)\n\n## Features\n\n- Customizable column formatting for quickfix items.\n- Support for cell and column separators.\n- Highlighting capabilities for formatted quickfix items.\n- Easy integration with Neovim's quickfix functionality.\n\n## Installation\n\nTo install `fixme.nvim`, you can use your preferred plugin manager. For example, using `lazy.nvim`:\n\n```lua\nreturn {\n    \"steschwa/fixme.nvim\",\n    opts = {\n        -- see below for the full configuration reference\n    }\n}\n```\n\n## Configuration\n\nThe plugin allows for extensive customization of how each quickfix item is displayed.\nSee [Item Formatting](#item-formatting) for a description and [Example Configuration](#example-configuration) for a hands-on example.\n\n\u003cdetails\u003e\n\u003csummary\u003eTypes\u003c/summary\u003e\n\n```lua\n---@alias fixme.ColumnsFn fun(qf_id: number): fixme.Column[]\n\n---@alias fixme.Column fixme.CellFormatter[]\n---@alias fixme.CellFormatter fun(qf_item: fixme.QuickfixItem): fixme.FormatResult\n\n---@class fixme.FormatResult\n---@field text string\n---@field hl string?\n\n---@class fixme.QuickfixItem\n---@field bufnr number\n---@field lnum number\n---@field end_lnum number\n---@field col number\n---@field end_col number\n---@field text string\n---@field type string\n---@field valid number\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eDefault Configuration\u003c/summary\u003e\n\nThese values are used by default if not overridden by you.\n\n```lua\n{\n    columns = function() return {} end,\n    cell_separator = \" \",\n    column_separator = \"|\",\n}\n```\n\n\u003c/details\u003e\n\n### Item Formatting\n\nThe primary configuration option is the `columns` field, which is a function of type `fixme.ColumnsFn`.\nThis function is invoked with the quickfix list ID (a number) and is responsible for determining which formatting columns and cell formatters to use based on the context of the quickfix list.\nThe `columns` function should return a table of columns, where each column is itself a table containing one or more cell formatters.\nEach cell formatter is a function that accepts a parameter of type `fixme.QuickfixItem` and is expected to return a `fixme.FormatResult`.\n\nThe `fixme.FormatResult` is a table with the following keys:\n\n- `text` (string): The text to be displayed in the quickfix item.\n- `hl` (string, optional): The highlight group to be applied to the text. If not specified, the default highlight will be used.\n\n### Example Configuration\n\nHere’s an example that demonstrates how to set up `fixme.nvim` with custom columns and separators:\n\n```lua\nlocal function cell_severity(item)\n    local severity = vim.diagnostic.severity[item.type]\n    if not severity then\n        return { text = \"\" }\n    end\n\n    local severity_name = vim.diagnostic.severity[severity]\n    if type(severity_name) ~= \"string\" or severity_name == \"\" then\n        return { text = \"\" }\n    end\n\n    local hl = ({\n        [vim.diagnostic.severity.ERROR] = \"DiagnosticError\",\n        [vim.diagnostic.severity.WARN] = \"DiagnosticWarn\",\n        [vim.diagnostic.severity.INFO] = \"DiagnosticInfo\",\n        [vim.diagnostic.severity.HINT] = \"DiagnosticHint\",\n    })[severity]\n\n    return {\n        text = severity_name:upper(),\n        hl = hl,\n    }\nend\n\nlocal function cell_lnum(item)\n    local lnum = item.lnum or item.end_lnum\n\n    return {\n        text = tostring(lnum),\n        hl = \"Comment\",\n    }\nend\n\nlocal function cell_filename(item)\n    local path = vim.fn.bufname(item.bufnr)\n    local filename = vim.fn.fnamemodify(path, \":t\")\n\n    return {\n        text = filename,\n        hl = \"FixmeFilepath\",\n    }\nend\n\nlocal function cell_file_icon(item)\n    local path = vim.fn.bufname(item.bufnr)\n    local filename = vim.fn.fnamemodify(path, \":t\")\n    local extension = vim.fn.fnamemodify(path, \":e\")\n\n    local icon, hl = require(\"nvim-web-devicons\").get_icon(filename, extension)\n    if icon ~= nil then\n        icon = string.format(\"%s \", icon)\n    end\n\n    return {\n        text = icon or \" \",\n        hl = hl or \"Comment\",\n    }\nend\n\nlocal function cell_text(item)\n    return {\n        text = vim.trim(item.text),\n        hl = \"FixmeText\",\n    }\nend\n\nlocal COLUMNS_DIAGNOSTICS = {\n    { cell_severity },\n    { cell_file_icon, cell_filename, cell_lnum },\n    { cell_text },\n}\nlocal COLUMNS_NORMAL = {\n    { cell_file_icon, cell_filename, cell_lnum },\n    { cell_text },\n}\n\nreturn {\n    dir = \"steschwa/fixme.nvim\",\n    opts = {\n        columns = function(qf_id)\n            local context = vim.fn.getqflist({ id = qf_id, context = true, }).context\n\n            if context == \"diagnostics\" then\n                return COLUMNS_DIAGNOSTICS\n            end\n\n            return COLUMNS_NORMAL\n        end,\n        column_separator = \" │ \",\n        cell_separator = \" \",\n    },\n}\n```\n\nThis produces the output of the above screenshot.\n\n\u003e [!NOTE]  \n\u003e This plugin does not define any highlight groups by itself.  \n\u003e Make sure you create them on demand:\n\u003e\n\u003e ```lua\n\u003e vim.api.nvim_set_hl(0, \"FixmeText\", { link = \"Label\" })\n\u003e ```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a pull request or open an issue for any bugs or feature requests.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteschwa%2Ffixme.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteschwa%2Ffixme.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteschwa%2Ffixme.nvim/lists"}