{"id":27992823,"url":"https://github.com/oxy2dev/oops.nvim","last_synced_at":"2025-06-29T14:34:19.055Z","repository":{"id":281494977,"uuid":"945440749","full_name":"OXY2DEV/oops.nvim","owner":"OXY2DEV","description":"Attempts to fix typos in the last run command","archived":false,"fork":false,"pushed_at":"2025-04-24T12:36:58.000Z","size":1320,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-14T16:45:45.109Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/OXY2DEV.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,"zenodo":null}},"created_at":"2025-03-09T12:37:03.000Z","updated_at":"2025-04-24T12:37:02.000Z","dependencies_parsed_at":"2025-05-08T18:43:08.833Z","dependency_job_id":"cf1f9e95-6bdd-48d3-a0c0-3776553ae609","html_url":"https://github.com/OXY2DEV/oops.nvim","commit_stats":null,"previous_names":["oxy2dev/oops.nvim"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/OXY2DEV/oops.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OXY2DEV%2Foops.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OXY2DEV%2Foops.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OXY2DEV%2Foops.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OXY2DEV%2Foops.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OXY2DEV","download_url":"https://codeload.github.com/OXY2DEV/oops.nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OXY2DEV%2Foops.nvim/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262609998,"owners_count":23336814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2025-05-08T18:43:03.589Z","updated_at":"2025-06-29T14:34:18.993Z","avatar_url":"https://github.com/OXY2DEV.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 😅 oops.nvim\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg alt=\"Neovim\" src=\"https://img.shields.io/badge/Neovim-000?style=for-the-badge\u0026logo=neovim\u0026logoColor=A6E3A1\u0026color=1E1E2E\"\u003e\n    \u003cimg alt=\"Repo size\" src=\"https://img.shields.io/github/languages/code-size/OXY2DEV/oops.nvim?style=for-the-badge\u0026logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0%2BPHBhdGggc3Ryb2tlPSIjQ0JBNkY3IiBmaWxsPSIjQ0JBNkY3IiBkPSJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2bDI4OCAwIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02NGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzODQgMCA5NiAwem0wIDM4NGwyNTYgMCAwIDY0TDk2IDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMzItMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwxOTIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnptMTYgNDhsMTkyIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE5MiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2eiIvPjwvc3ZnPg%3D%3D\u0026logoColor=CBA6F7\u0026labelColor=1e1e2e\u0026color=B4BEFE\"\u003e\n    \u003cimg alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/OXY2DEV/oops.nvim?include_prereleases\u0026sort=semver\u0026display_name=release\u0026style=for-the-badge\u0026logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0%2BPHBhdGggZmlsbD0iI0Y1RTBEQyIgc3Ryb2tlPSIjRjVFMERDIiBkPSJNMzQ1IDM5LjFMNDcyLjggMTY4LjRjNTIuNCA1MyA1Mi40IDEzOC4yIDAgMTkxLjJMMzYwLjggNDcyLjljLTkuMyA5LjQtMjQuNSA5LjUtMzMuOSAuMnMtOS41LTI0LjUtLjItMzMuOUw0MzguNiAzMjUuOWMzMy45LTM0LjMgMzMuOS04OS40IDAtMTIzLjdMMzEwLjkgNzIuOWMtOS4zLTkuNC05LjItMjQuNiAuMi0zMy45czI0LjYtOS4yIDMzLjkgLjJ6TTAgMjI5LjVMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwxNDkuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43bDE2OCAxNjhjMjUgMjUgMjUgNjUuNSAwIDkwLjVMMjc3LjMgNDQyLjdjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC0xNjgtMTY4QzYuNyAyNjIuNyAwIDI0Ni41IDAgMjI5LjV6TTE0NCAxNDRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiLz48L3N2Zz4%3D\u0026labelColor=1E1E2E\u0026color=45475A\"\u003e\n\u003c/div\u003e\n\n\n\nhttps://github.com/user-attachments/assets/d6b00d77-7442-4ab3-a77e-235234610a01\n\n\n\n\nAttempts to fix typos in the last run command.\n\n## 📖 Table of contents\n\n- [✨ Features](#-features)\n- [📚 Requirements](#-requirements)\n- [📐 Installation](#-installation)\n- [🧭 Configuration](#-configuration)\n\n- [🎇 Commands](#-commands)\n- [💡 Rules](#-rules)\n\n## ✨ Features\n\n+ Tiny. ~ 100 lines of code.\n+ Fully customisable, allows customizing every rule.\n+ Out-of-box support for common typos.\n\n## 📚 Requirement\n\n- `histget()` function.\n\n## 📐 Installation\n\n### 🧩 Vim-plug\n\nAdd this to your plugin list.\n\n```vim\nPlug \"OXY2DEV/oops.nvim\"\n```\n\n### 💤 Lazy.nvim\n\n```lua\n-- For `plugins/oops.lua` users.\nreturn {\n    \"OXY2DEV/oops.nvim\",\n    lazy = false\n};\n```\n\n```lua\n-- For `plugins.lua` users.\n{\n    \"OXY2DEV/oops.nvim\",\n    lazy = false\n},\n```\n\n### 🦠 Mini.deps\n\n```lua\nlocal MiniDeps = require(\"mini.deps\");\n\nMiniDeps.add({\n    source = \"OXY2DEV/oops.nvim\"\n});\n```\n\n### 🌒 Rocks.nvim\n\n\u003e[!WARNING]\n\u003e `luarocks package` may sometimes be a bit behind `main`.\n\n```vim\n:Rocks install oops.nvim\n```\n\n### 📥 GitHub release\n\nTagged releases can be found in the [release page](https://github.com/OXY2DEV/oops.nvim/releases).\n\n\u003e[!NOTE]\n\u003e `Github releases` may sometimes be slightly behind `main`.\n\n## 🧭 Configuration\n\nConfiguration table structure is given below,\n\n```lua\n--- Command types.\n---@alias oops_kind\n---| \"cmd\"\n---| \"search_up\"\n---| \"search_down\"\n---| \"expr\"\n---| \"input\"\n\n--- Oops rule.\n---@class oops_rule\n---\n--- Condition to trigger this rule.\n---@field condition fun(kind: oops_kind, command: string): boolean\n---\n--- Resulting fixed command.\n---@field fix fun(kind: oops_kind, command: string): (oops_kind, string)\n\n----------------------------------------------------------------------\n\n--- Configuration table for `oops.nvim`\n---@class oops.config\n---\n--- Apply fix without confirmation?\n---@field force? boolean\n---\n--- Command kinds to ignore.\n---@field ignore_kinds? oops_kind[]\n---\n--- Rules.\n---@field rules table\u003cstring, oops_rule\u003e\noops.config = {\n    force = false,\n    ignore_kinds = { \"input\", \"expr\" },\n\n    rules = {\n        q_quote = {\n            condition = function (prompt, command)\n                if prompt ~= \"cmd\" then return; end\n\n                return string.match(command, \"^q[`'\\\"]\") ~= nil;\n            end,\n\n            fix = function (prompt, command)\n                return prompt, string.gsub(command, \"^q[`'\\\"]\", \"q\")\n            end\n        },\n\n        -- ... Other rules\n    }\n};\n```\n\n## 🎇 Commands\n\nOops comes with the `:Oops` command. It will try to fix whatever cmd was run last that isn't `:Oops`.\n\n```txt\nUSAGE,\n    :Oops\n\n    :Oops [Kind]\n\n    :Oops [Kind] [force]\n\nEXAMPLE,\n    :Oops cmd true\n```\n\nDifferent command kinds are given below,\n\n\n| Kind        | Description  |\n|-------------|--------------|\n| cmd         | Command(`:`) |\n| search_up   | Search(`/`)  |\n| search_down | Search(`?`)  |\n| expr        | Search(`=`)  |\n\n\n## 💡 Rules\n\nOut of the box, oops comes with the following rules,\n\n- `caps_locked`\n  Fixes typos like `:W`, `:Q`, `:Wq` and other variations.\n\n- `q_quote`\n  Fixes `:q'`, `:q\"`.\n\n- `reverses_wq`\n  Fixes `:qw`.\n\n- `accidental_bash`\n  Fixes `:!w`, `:!q`, `:!e` etc.\n\n- `set_with_S`\n  Fixes `:Set`.\n\n- `lua_with_b`\n  Fixes `:luabcommand`(becomes `:lua commands`).\n\n- `moh`\n  Fixes `:moh`(becomes `:noh`).\n\n- `sub_wo_slash`\n  Fixes `:sfoo/bar`(becomes `:s/foo/bar`).\n\n- `vsub_wo_slash`\n  Fixes `:'\u003c,'\u003esfoo/bar`(becomes `:'\u003c,'\u003es/foo/bar`).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxy2dev%2Foops.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foxy2dev%2Foops.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foxy2dev%2Foops.nvim/lists"}