A 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!
- Normal Mode: Navigate and manipulate text efficiently
- Insert Mode: Type and edit text naturally
- Visual Mode: Select and apply motions to your text
- Command Mode: Apply the main vim commands to your buffers.
h
,j
,k
,l
- Move cursor left, down, up, right- Familiar vim keybindings for natural text navigation
- Status Bar: Shows current mode and cursor position
- Responsive Layout: Adapts to terminal size
- Rust 1.88
- A terminal emulator
- Clone the repository
git clone git@github.com:NoOPeEKS/oxid.git
cd oxid
- Build the project
cargo build --release
- Run the editor
cargo run -- /path/to/file
As of now, the editor will either open an existing file or create a new one. It does not currently support multiple buffers nor opening directories.
Key | Action |
---|---|
h |
Move cursor left |
j |
Move cursor down |
k |
Move cursor up |
l |
Move cursor right |
w |
Move one word forward |
b |
Move one word backwards |
e |
Move to the end of the word |
0 |
Move to the start of the line |
$ |
Move to the end of the line |
o |
Insert line below and enter insert mode |
i |
Enter insert mode |
v |
Enter visual mode |
p |
Paste previously yanked text |
Ctrl+u |
Scroll up |
Ctrl+d |
Scroll down |
Ctrl+c |
Quit editor |
Ctrl+s |
Save current file |
Shift+i |
Insert at start of line |
Shift+a |
Append at end of line |
: |
Enter command mode |
Key | Action |
---|---|
Esc |
Return to normal mode |
Backspace |
Delete character/merge lines |
Enter |
Insert a new line |
Any character |
Insert character |
Key | Action |
---|---|
Esc |
Return to normal mode |
v |
Return to normal mode |
h |
Move selection left |
j |
Move selection down |
k |
move selection up |
l |
Move selection right |
w |
Move selection one word forward |
b |
Move selection one word backwards |
e |
Move selection to the end of the word |
0 |
Move selection to the start of the line |
$ |
Move selection to the end of the line |
y |
Yank current selection to default register |
Command | Action |
---|---|
:w |
Save current buffer file |
:wa |
Save all buffer files |
:q |
Quit current buffer |
:qa |
Quit all buffers |
:wqa |
Save and quit all buffers |
:e <file_path> |
Open or create a new file |
:bn |
Move to next buffer |
:bp |
Move to previous buffer |
:<line_number> |
Move to specified line on current buffer |
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.
- Copy/Paste Support
- System clipboard integration
- Advanced Editing
- Undo/Redo functionality
- File Operations
- Save as
- Multi-file editing
- Syntax Highlighting
- Color scheme
- File Management
- Save (:w)
- Save All (:wa)
- Quit (:q)
- Quit All (:qa)
- Save and Quit All (:wqa)
- Open new buffer (:e )
- Go to next buffer (:bn)
- Go to prev buffer (:bp)
- Navigation
- Go to line number (
:line
) - Search
- Go to line number (
- LSP Client
- Autocompletion
- Hovering
- Diagnostics
- Editor UI Integration
- Auto-completion
- Hovering
- Diagnostics
Contributions are welcome! Whether you want to:
- Fix bugs
- Add new features
- Improve documentation
- Optimize performance
Please feel free to open issues and submit pull requests.
This project is licensed under the AGPLv3 License - see the LICENSE file for details.