EdTUI
Overview
EdTUI is a text editor widget for the Ratatui ecosystem.
It is designed to provide a user experience inspired by Vim. Edtui is developed to be used as an
editor in ratatui apps. It is not supposed to be a stand-alone code editor.
Instantiate the state and render the view:
use ;
use Widget;
let mut state = default;
new
.theme
.wrap // line wrapping
.render;
Handle events:
use EditorEventHandler;
let mut event_handler = default;
event_handler.on_key_event;
Features
- Vim-like keybindings and editing modes for efficient text manipulation.
- Copy paste using the systems clipboard.
- Line wrapping.
- Syntax highlighting (experimental).
- Mouse support (experimental).
Demo

Keybindings
EdTUI offers a set of keybindings similar to Vim. Here are some of the most common keybindings:
Normal Mode:
| Keybinding | Description |
|---|---|
i |
Enter Insert mode |
v |
Enter Visual mode |
h, j, k, l |
Navigate left, down, up, and right |
w, b |
Move forward or backward by word |
x |
Delete the character under the cursor |
u, <ctrl>+r |
Undo/Redo last action |
Esc |
Escape Visual mode |
0 |
Move cursor to start of line |
^ |
Move cursor to first non-blank character |
$ |
Move cursor to end of line |
gg |
Move cursor to the first row |
G |
Move cursor to the last row |
% |
Move cursor to closing/opening bracket |
a |
Append after the cursor |
A |
Append at the end of the line |
o |
Add a new line below and enter Insert mode |
O |
Add a new line above and enter Insert mode |
J |
Join current line with the line below |
d |
Delete the selection (Visual mode) |
dd |
Delete the current line |
D |
Delete to the end of the line |
viw |
Select between delimiters. Supported: ["] |
vi + ", ', (, [ or { |
Select between delimiter ", ', (, [ or { |
ci + ", ', (, [ or { |
Change between delimiter ", ', (, [ or { |
u |
Undo the last change |
r |
Redo the last undone action |
y |
Copy the selected text |
p |
Paste the copied text |
Insert Mode:
| Keybinding | Description |
|---|---|
Esc |
Return to Normal mode |
Backspace |
Delete the previous character |
Enter |
Insert line break |
Arrows |
Navigation |
* Tab is currently not supported.
For more keybindings and customization options, refer to the code.
Experimental Mouse Support
Edtui includes experimental mouse support:
let event_handler = default;
event_handler.on_mouse_event;
// or handle both key and mouse event
event_handler.on_event;
Note: This feature is experimental, so expect potential bugs and breaking changes. It does currently not work correctly on wrapped lines.
Syntax highlighting
Syntax highlighting was added in version 0.8.4. It is experimental, so expect breaking changes.
Edtui offers a number of custom themes, see [SyntaxHighlighter::theme] for a complete list.
If you want to use a custom theme, see [SyntaxHighlighter::custom_theme]. Check syntect
for more details about themes and extensions.
use EditorState;
use EditorView;
use SyntaxHighlighter;
let theme_name = "dracula";
let extension = "rs";
let syntax_highlighter = new;
new
.syntax_highlighter
.render;

Roadmap
- Support termwiz and termion
- Display line numbers
- Remap keybindings
License: MIT