My (WIP) personal text editor for prose.
bo.mp4
The goals for bo
are the following:
- write a non trivial application in Rust for the first time
- create a text editor extremely tailored to my personal tastes, only implementing the Vim navigation features I like and use
- make it non configurable
Having a good text editor is paramount for a software engineer, but the definition of good really varies depending on the context. I do enjoy Visual Studio for its rich ecosystem, I enjoy Sublime Text for its extreme snappiness, and I enjoy vim for its ubiquitousness. I tend to favour an editor with plugins/linters/autocompletion when I'm developing code, but when I'm writing prose (blogposts, book chapters...), I would like to use an editor that is as simple as possible and "works" for me, without giving me the opportunity of getting lost in configuration options.
So, something like Left, but with vim-like navigation commands.
You can fetch the latest bo
release from the Github release page, or compile and install it by running
$ cargo install bo-bin
Note: While the crates is named bo-bin
(as bo
was already taken), the binary name is bo
.
- Navigation with
h
,j
,k
,l
- Next/previous paragraph (
}
,{
) - Next/previous word (
w
,b
) - First/last line in document (
g
,G
) - First/last character in the line (
0
,$
) - Screen navigation (
H
,M
,L
) - First non whitespace character in the line (
^
) - Support for multi-character commands (e.g.
2j
,3}
, ...) - Go to n% in the file (
%
) - Search text and navigate through matches
- Move cursor by left clicking
- Go to matching symbol, bracket, quote, etc
- Support multiline goto-matching-symbol
- Create a new file
- Open an existing file
- Save file
w
- Rename file
w
file name
- Insert character under the cursor
- block (word, paragraph, line, etc) with both
d
andc
- delete a line with
dd
- yank/paste a block
- insert newline before/after (
o
,O
) - Replace current character (
r
) - Replace search matches
- Remove trailing space at save
- Remove current character
- toggle line numbers
- toggle word count stats
- toggle line wrapping
- Display help
- Save session file with last known cursor position
- Restore unsaved edits by regularly saving to a hidden swap file
- Command history, browsable with arrows
- Support Unicode characters
- Redraw rows when the terminal size changes
- Multiline edition support
- undo/redo
- Tab navigation
- Fuzzy file finder
The rustdoc
documentation is hosted on Github Pages.
I got the inspiration for bo
by reading about antirez's editor kilo
, and am wildly basing my work on the excellent blogpost series by Philipp Flenker.
It is called bo
because I've recently turned 30.