aligrudi / neatvi

A small vi/ex editor for editing UTF-8 text
http://litcave.rudi.ir/
305 stars 25 forks source link
c editor vi

NEATVI

Neatvi is a small vi/ex editor for editing UTF-8 text. It supports syntax highlighting, multiple windows, right-to-left languages, and keymaps.

CONFIGURATION

Edit conf.h to adjust syntax highlighting rules and text direction patterns. To define a new keymap, create a new array in kmap.h, like kmap_fa, and add it to kmaps array in the same header (the first entry of the new array specifies its name). The current keymap may be changed with :cm ex command. When in input mode, ^e activates the English keymap and ^f switches to the alternate keymap (the last keymap specified with :cm).

Sadly, VTE-based terminals such as GNOME's implement a backward-incompatible extension of virtual terminal escape codes to render bidirectional text by default. When using these terminal, the value of LNPREF macro in conf.h needs to be changed to "\33[8l".

COMMANDS

Commands not available in ex(1):

:cm[ap][!] [kmap] Without kmap, prints the current keymap name. When kmap is specified, sets the alternate keymap to kmap and, unless ! is given, switches to this keymap. :ft [filetype] Without filetype, prints the current file type. When filetype is specified, sets the file type of the current ex buffer. :ta[g] tag Jumps to tag (tags file: TAGPATH environment variable or ./tags). :tn[ext] Jumps to the next matching tag. :tp[rev] Jumps to the previous matching tag. :po[p] Pops tag stack. :b[uffer] [buf] Without buf, prints buffer list. Switches to the given buffer if buf is a buffer number or alias. Also, buf can be -, +, !, and ~ to switch to the previous buffer, switch to the next buffer, delete the current buffer, and renumber buffers, respectively. :rs reg Reads dot-terminated lines (similar to :a command) from ex input and copies them to the given yank buffer. :rx reg cmd Like :! command, executes cmd. However, the contents of the specified yank buffer is given to the command as input, and the output of the command is written to that yank buffer. :ec[ho] msg Prints the given message (useful in ex scripts or q-commands).

New key mappings:

Other noteworthy differences with vi(1):

Note that in :rs command, input lines are read from ex input stream (unlike :a), to make it usable in @ commands and ex scripts (files passed to :so). This allows setting the value of yank buffers in ex files, as the following example shows:

rs a :!git add % .

OPTIONS

To improve Neatvi's performance, shaping, character reordering, and syntax highlighting can be disabled by defining the EXINIT environment variable as "set noshape | set noorder | set nohl | set td=+2".

Options supported in Neatvi:

td, textdirection Current direction context. The following values are meaningful:

MARKS AND BUFFERS

Special marks:

Special yank buffers:

QUICK ACCESS

When q is pressed in normal mode, Neatvi prints the list of buffers at the bottom of the screen and waits for a key. If the key is a digit, it switches to its corresponding buffer. If it is a letter and the extended buffer with that letter is defined, the contents of that buffer is executed. Otherwise, Neatvi executes ECMD (defined in conf.h) with the following parameters: i) the letter, ii) the current file, iii) the current line number, and iv) the current line offset.

What ECMD writes to its standard output, Neatvi executes as ex commands. Q-commands can be used to add interesting features to Neatvi, such as language-dependent IDE features, for instance by connecting to an LSP (language server protocol) server. ecmd.sh is an example ECMD shell script.