ITADN
kyx0r/nextvi

版本发布 8

5.3
? · 2026-06-06

Crescent Core changes: 1. Separated multi-line block highlighting to it's own attributes. Saves bits on the main attribute and adds more direct customization bits on how the block behaves. Redraw directions, starting and terminating conditions. 2. New syntax highlight flag SYN_SKIP for advancing matcher within grp set. 3. New syntax highlight flag SYN_MK for building transparent mark logic across multiple highlight passes. 4. Specified normal commands for <.> repetition command. No more spec & implementation ambiguity. 5. Backspace from insert mode is now repeatable as it's part of the insert command. 6. ^W from insert mode no longer rounds forward. This behavior is more predictable. Nextvi spec does not require/mention this. Patch2vi changes: 1. Improved delta format structure. 2. Implemented store/application levels for deltas and new options to aid conflict resolutions. Patch changes: 1. New patch [detect_indent.sh](https://github.com/kyx0r/nextvi/blob/release/detect_indent.sh) 2. Bug fixes in [visual.sh](https://github.com/kyx0r/nextvi/blob/release/visual.sh) and [blockhl_cache.sh](https://github.com/kyx0r/nextvi/blob/release/blockhl_cache.sh)

4.1
? · 2026-03-16

Modal This release is a small bump. Changes: 1. Improved ex [prefix] highlight pattern matching 2. Added octal representation to character info bar. 3. Spec clarifications and move to octal instead of hexadecimal. Apparently POSIX shell/printf to this day does not specify the hexadecimal '\x' escapes in the standard while octal was supported since 1990s. Typical designed by committee nonsense. For maximum portability, patch2vi was switched to emit octal sequences in format "\0ddd" which appears in POSIX.1-2008. New: [Introducing a long planned modal programming language interpreter.](https://github.com/kyx0r/nextvi/blob/patches/modal.sh) The best way to understand modal is by reading the C implementation ~(300) LOC or this [article](https://wiki.xxiivv.com/site/modal.html). While Nextvi ex implementation is already [Turing Complete](https://en.wikipedia.org/wiki/Turing_completeness), it follows purely concatative paradigm. It also cannot express certain concepts such as self modifying code easily and practically. This is where the power of a rewrite language comes in. The goal of modal is to be able to implement complex simulations within Nextvi. Modal can call to ex commands and is also Turing Complete by itself. Further plans are to improve modal's power by introducing Regex for the rules and deeper IO hooks into editor state. This is the area of my research right now. Here is probably the cleanest proof of ex turing completeness using [Counter Machine](https://en.wikipedia.org/wiki/Counter_machine): Standalone Counter (could also be any arithmetic operation on a register in numerical form) ``` :ya!b:prb:?%@a+1=1:pr:97reg %@b ``` Branch if zero ``` :b-3:pu a:f>^0$>:??<then>?<else>:b-3 ```

4.0
? · 2026-03-09

Sigil This is the biggest release yet. The editor and features specified should be stable. I am releasing it now because the changelog is growing too big to remember and track. New Features: 1. New -a flag: enable alternate terminal screen 2. [#]@: / [#]&: - execute the : register as an ex command # times 3. @@ and && semantics clarified: @@ is blocking, && is non-blocking 4. Ex conditionals rework: ``` - [# <$>]?!{cond}[<?>][else][<?>][then] - inverted while-loop conditional - prefix is a boolean expression in DNF: ids combined with , (AND) and ; (OR) - [prefix]??{then}[<?>][else] / {prefix}?? - conditional with error-status capture - [prefix]??!{else}[<?>][then] - inverted conditional - {prefix}??! capture form inverts the recorded status (not of last error state) ``` 5. b-3 /sc/ - new scratch buffer for general-purpose temporary use 6. New ex commands: ``` - [range]re[regex] - sets the regex keyword directly (replacing :xkwd workflow); range text is auto-escaped and used as the regex - rcm[val=1] - new :rcm option controlling when a nested ex command inside a range executes (0 = at parse, 1 = at range) - [0-3]sc[...] / [0-3]sc![...] - new :sc command to set or clear ex special characters (\, :, %, !) individually ``` 7. New behaviors for old ex commands: ``` - [0-255]reg+[str] - append to a register (existing :reg gains prefix register selection and a + append variant) - [0-255]reg[str] - put a string directly into a named register by ASCII code - [#lvl]q[#code] / [#lvl]q![#code] - :q now accepts an exit code (#code) and a scope depth (#lvl) to exit multiple nested scopes at once - [range]f>[regex] horizontal-range multi-line search: in multi-line mode <Newline> is a regular character; forward search now takes [range] (not [vrange]) - Fuzzy search :f now prefixes matches with selection numbers and line numbers - :left with no argument now calculates the scroll value from the current character offset (rather than resetting to 0) - :mpt value 1 now also suppresses the last print (new: "block prompt but not last print" / "block prompt and last print" examples) - :m command now may load multiple marks in one command including horizontal offsets ``` 8. {#}\ in normal now can refresh dir listing within b-2 --- Breaking Changes: 1. -v no longer enters visual mode (that was the default anyway); it now unsets all options 2. sep command removed - the ex command separator character can no longer be changed at runtime; use the new :sc command to change individual special characters instead 3. tbs renamed to ts for the tab-width option 4. :vis bit layout changed - old numeric examples no longer map correctly: - bit 1: raw ex mode, bit 2: ex mode, bit 3: disable :e message, bit 4: alternate screen - (e.g., old :vis 6 = enable raw ex → new :vis 3; old :vis 4 = disable raw ex → new :vis 2) 5. :grp value no longer required to be divisible by 2 6. fd / fp semantics clarified: :fd with no argument now uses the secondary or working directory path (not necessarily current directory); :fp clears or sets the secondary directory path 7. v/ in normal mode now enters re ex prompt 8. Ex parsing structure changed from [range][pad][cmd] to [prefix][cmd]. The pad concept inside ranges is removed; padding is collapsed except within nested structures 9. Escape semantics changed to include the backslash character. This change makes backslash require more escapes, but it also removes the limitation that made it impossible to have a backslash literal right before ex separator which I somehow overlooked when designing the initial implementation. Other Bug Fixes And Improvements: 1. Internal rework of ex_cprint(). Decoupling from fixed vi msg buffer. Which was bad, lazy, fragile design. 2. Consistent print behaviors for internal ex print and pipe outputs. For example, ```:p:!ls:p:p:!ls:p``` notice no extra newlines in the output anymore. It is contiguous. Why? P-perfection. 3. In ex mode repeated pipe command via <Enter> no longer displays on the same line as prompt. 4. New sigwinch (terminal resize) handling method for all modes. Insert and various input modes no longer exit prematurely on resize. 5. Fixing edge cases in :f command family. The logic should be correct for every possible scenario. 6. Fixed :;c in raw ex mode. Its quit semantics made it impossible to commit the edit without extra newline. 7. Crash from %d because it could leave cursor in bad state in certain command chains. 8. Added error codes to global and substitute commands 9. New quit redraw behaviors that define the terminal state when quitting. For example ex command :x must shift the screen up one line to show the final message if there is one (usually notifying of successful write). Shifts like this must be conditional since it can be pretty expensive on the terminal side. 10. Fixed dublicate msg propagation in ex recursion 11. Safe self modification of register from @ vi normal commands previously leading to a crash. Non Core Changes: 1. [patch2vi.c](https://github.com/kyx0r/nextvi/blob/patch2vi/patch2vi.c) utility created to convert .patch files to Nextvi ex commands scripts. Nextvi is a significantly better drop in replacement for patch(1). 2. [Patches](https://github.com/kyx0r/nextvi/tree/patches) branch converted to Nextvi scripts. This is also more portable than patch(1) for a general use case. 3. Improved [splits.sh](https://github.com/kyx0r/nextvi/blob/patches/splits.sh). Solid window management within Nextvi. Significantly better than Neatvi built in. 4. New [visual.sh](https://github.com/kyx0r/nextvi/blob/patches/visual.sh). Visual mode implementation for Nextvi. 5. Improved [arrowkeys_insert.sh](https://github.com/kyx0r/nextvi/blob/patches/arrowkeys_insert.sh). Now also supports arrow keys in ex and prompts. 6. [alternate-w-behaviour.sh](https://github.com/kyx0r/nextvi/blob/patches/alternate-w-behaviour.sh) now handles more edge cases and closer to vim. 7. New [alt_sections.sh](https://github.com/kyx0r/nextvi/blob/patches/alt_sections.sh). For rednecks with traditional vi muscle memory. 8. New [key_remap_cmds.sh](https://github.com/kyx0r/nextvi/blob/patches/key_remap_cmds.sh). Flexible key remapping commands. Oh, you've read this far? Always remember that the best way to support the project is to talk about it online and share ideas with other people. If you have any questions don't hesitate to ask me. Based development will continue regardless, pushing the quality bar higher and higher.

3.1
? · 2025-12-30

Paradigm Incremental improvement from 3.0 and the last release of 2025. Happy holidays! Changes: 1. Storing arguments from :f in history for improved accessibility. 2. Implement REG_NOCAP to prevent global overflow in conf.c with capture regex and allow look-around expressions to use regular capture groups without side effects. 3. Support case sensitivity for dynamic highlights on API level. 4. Fix redraw with ruler and line numbers and with ruler plus cc command. 5. Achieved full feature parity with ex insert in :f command.

2.1
? · 2025-11-02

Next Brief Changelog: 1. Better expected behavior of lookbehind at the beginning of string 2. Support 0 case repetition in regex 3. Minor maintenance changes

2.0
? · 2025-10-26

Next Brief Changelog: 1. Complete range for :w when writing to file as in the spec 2. Change conf.c exclusion attributes to inclusion 3. Optimize lookaround 4. Change lookbehind default and offset behavior to address certain utf-8 limitation

1.9
? · 2025-10-21

Flame Brief Changelog: 1. Removed uppercase append in ex command :ya limitation 2. Fixed curword logic, now works like it did before in pre 1.0 versions 3. Implemented sentence boundary regions 4. Improved :ea command with fuzzy find selector and ability to select numbers bigger than 9 5. Man page corrections 6. Syntax hl fixes 7. Performance optimizations 8. hl_naive.patch resurrected 9. linewrap.patch resurrected and proof of concept

1.7
? · 2025-10-07

777 Brief Changelog: 1. Finalized and optimized ```<space>``` ```<backspace>``` multi-line range visual and logical implementation. Newline handling is correct. 2. Added ability to print circumvent range check any number in ex using := 3. Implemented rest of arithmetic operations for ex ranges: * / % 4. Improved syntax highlight capabilities, efficient attribute exclusion system. Breaking changes: 1. To implement full arithmetic, ex search ranges have been remapped to > and < respectively. This is more intuitive and inline since previously ? was special in regex and / is not. This lead to situations where certain combination of ? and \\ was not possible to achieve. > and < conflict with \<, however the escape mechanism has been implemented properly this time. Additional slash can achieve all combinations of > or < with \\. 2. When I implemented :wl command I originally wanted it to be ?. But I could not have used this since it was part of ex ranges. Now that I can, wl has become ? respectively. ? better suits for this command since this is a conditional and ternary conditionals usually use ? syntax. 3. Negative and positive Lookbehind syntax has been swapped, it is more intuitive to think of > as positive and < as negative if you imagine a number line. Similarly, > in search ranges is positive and < is negative. The arrow shows the direction. This is consistent with overall design.