{"id":31333367,"url":"https://github.com/noopeeks/oxid","last_synced_at":"2025-09-26T01:53:46.691Z","repository":{"id":305244336,"uuid":"1022363207","full_name":"NoOPeEKS/oxid","owner":"NoOPeEKS","description":"A simple, vim-inspired terminal text editor built with Rust.","archived":false,"fork":false,"pushed_at":"2025-09-22T18:40:58.000Z","size":235,"stargazers_count":3,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-22T20:26:00.183Z","etag":null,"topics":["lsp","lsp-client","neovim","rust","text-editor","vim"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NoOPeEKS.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-18T23:29:05.000Z","updated_at":"2025-09-19T22:31:18.000Z","dependencies_parsed_at":"2025-08-24T01:17:28.512Z","dependency_job_id":"65c132bb-98a4-45ef-a4d5-1115cd4c3155","html_url":"https://github.com/NoOPeEKS/oxid","commit_stats":null,"previous_names":["noopeeks/oxid"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NoOPeEKS/oxid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoOPeEKS%2Foxid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoOPeEKS%2Foxid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoOPeEKS%2Foxid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoOPeEKS%2Foxid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NoOPeEKS","download_url":"https://codeload.github.com/NoOPeEKS/oxid/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NoOPeEKS%2Foxid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277009873,"owners_count":25744543,"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","status":"online","status_checked_at":"2025-09-25T02:00:09.612Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["lsp","lsp-client","neovim","rust","text-editor","vim"],"created_at":"2025-09-26T01:53:44.764Z","updated_at":"2025-09-26T01:53:46.677Z","avatar_url":"https://github.com/NoOPeEKS.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Oxid\n\nA simple, vim-inspired terminal text editor built with Rust. This is a personal project to build a custom text editor and learn Rust in the process!\n\n![Rust](https://img.shields.io/badge/rust-%23000000.svg?style=for-the-badge\u0026logo=rust\u0026logoColor=white)\n![Terminal](https://img.shields.io/badge/terminal%20based-4D4D4D?style=for-the-badge\u0026logo=windows-terminal\u0026logoColor=white)\n\n## ✨ Features\n\n### 🎯 **Modal Editing**\n- **Normal Mode**: Navigate and manipulate text efficiently\n- **Insert Mode**: Type and edit text naturally\n- **Visual Mode**: Select and apply motions to your text\n- **Command Mode**: Apply the main vim commands to your buffers.\n\n### ⌨️ **Vim-Inspired Navigation**\n- `h`, `j`, `k`, `l` - Move cursor left, down, up, right\n- Familiar vim keybindings for natural text navigation\n\n### 🖥️ **User Interface**\n- **Status Bar**: Shows current mode and cursor position\n- **Responsive Layout**: Adapts to terminal size\n\n### 🛠️ **Integrated LSP support**\n- **Multiple LSP Configuration**: Configure `~/.config/oxid/oxid.toml` for multiple LSP servers based on file types.\n- **Completions**: Press `\u003cC-x\u003e` to list available completions.\n- **Hovering**: Press `\u003cS-k\u003e` to hover over a piece of text.\n- **Diagnostics**: Update file diagnostics on save.\n\n## 🚀 Quick Start\n\n### Prerequisites\n- Rust 1.88\n- A terminal emulator\n\n### Installation \u0026 Usage\n\n1. **Clone the repository**\n```bash\ngit clone git@github.com:NoOPeEKS/oxid.git\ncd oxid\n```\n\n2. **Build the project**\n```bash\ncargo build --release\n```\n\n3. **Run the editor**\n```bash\ncargo run -- /path/to/file\n```\nAs of now, the editor will either open an existing file or create a new one. It does not currently support opening directories.\n\n## 🎮 Key Bindings\n\n### Normal Mode\n| Key | Action |\n|-----|--------|\n| `h` | Move cursor left |\n| `j` | Move cursor down |\n| `k` | Move cursor up |\n| `l` | Move cursor right |\n| `w` | Move one word forward |\n| `b` | Move one word backwards |\n| `e` | Move to the end of the word |\n| `0` | Move to the start of the line |\n| `$` | Move to the end of the line |\n| `o` | Insert line below and enter insert mode |\n| `i` | Enter insert mode |\n| `v` | Enter visual mode |\n| `p` | Paste previously yanked text |\n| `[` | Mute/Unmute diagnostics |\n| `Ctrl+u` | Scroll up |\n| `Ctrl+d` | Scroll down |\n| `Ctrl+c` | Quit editor |\n| `Ctrl+s` | Save current file |\n| `Shift+i` | Insert at start of line |\n| `Shift+a` | Append at end of line |\n| `:` | Enter command mode |\n\n### Insert Mode\n| Key | Action |\n|-----|--------|\n| `Esc` | Return to normal mode |\n| `Backspace` | Delete character/merge lines |\n| `Enter` | Insert a new line |\n| `Any character` | Insert character |\n\n### Visual Mode\n| Key | Action |\n|-----|--------|\n| `Esc` | Return to normal mode |\n| `v` | Return to normal mode |\n| `h` | Move selection left |\n| `j` | Move selection down |\n| `k` | move selection up |\n| `l` | Move selection right |\n| `w` | Move selection one word forward |\n| `b` | Move selection one word backwards |\n| `e` | Move selection to the end of the word |\n| `0` | Move selection to the start of the line |\n| `$` | Move selection to the end of the line |\n| `y` | Yank current selection to default register |\n\n### Command Mode\n| Command | Action |\n|-----|--------|\n| `:w` | Save current buffer file |\n| `:wa` | Save all buffer files |\n| `:q` | Quit current buffer |\n| `:qa` | Quit all buffers|\n| `:wqa` | Save and quit all buffers |\n| `:e \u003cfile_path\u003e` | Open or create a new file |\n| `:bn` | Move to next buffer |\n| `:bp` | Move to previous buffer |\n| `:\u003cline_number\u003e` | Move to specified line on current buffer |\n| `:LspStart \u003clsp_command\u003e` | Start a new LSP server with the provided command |\n| `:LspStop` | Stop the current LSP server |\n\n## 📋 Planned Features\n\n\u003e **Note**: The following features are planned or currently under development. Some are top-priority core functionalities and others are features that will be implemented in future releases.\n\n### 🔧 **Text Operations**\n- [ ] **Copy/Paste Support**\n  - [ ] System clipboard integration\n- [ ] **Advanced Editing**\n  - [ ] Undo/Redo functionality\n  - [ ] Advanced vim motions (dd, dap, ...)\n  - [ ] Visual V-Line mode\n\n### 📁 **File Management**\n- [ ] **File Operations**\n  - [ ] Save as\n  - [x] Multi-file editing\n\n### 🎨 **User Interface Enhancements**\n- [ ] **Syntax Highlighting**\n  - [ ] Color scheme\n\n### **Command Mode**\n- [x] **File Management**\n    - [x] Save (:w)\n    - [x] Save All (:wa)\n    - [x] Quit (:q)\n    - [x] Quit All (:qa)\n    - [x] Save and Quit All (:wqa)\n    - [x] Open new buffer (:e \u003cfile\u003e)\n    - [x] Go to next buffer (:bn)\n    - [x] Go to prev buffer (:bp)\n- [ ] **Navigation**\n  - [x] Go to line number (`:line`)\n  - [ ] Search\n\n### 🧩 **Language Server Protocol**\n- [x] **LSP Client**\n  - [x] Autocompletion\n  - [x] Hovering\n  - [x] Diagnostics\n- [ ] **Editor Integration**\n  - [x] Auto-completion\n  - [x] Hovering\n  - [x] Diagnostics when cursor on top\n  - [x] Diagnostic appeareance with underlining and colors\n  - [ ] Multiple LSP clients for multiple servers and buffers\n\n## 🤝 Contributing\n\nContributions are welcome! Whether you want to:\n- Fix bugs\n- Add new features\n- Improve documentation\n- Optimize performance\n\nPlease feel free to open issues and submit pull requests.\n\n## 📄 License\n\nThis project is licensed under the AGPLv3 License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoopeeks%2Foxid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoopeeks%2Foxid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoopeeks%2Foxid/lists"}