6 ms·
Why would somebody want to use this over nvi, elvis, or the original BSD vi? (I assume that people who are interested in features already know where to find (N
by thristian 5y ago
Why would somebody want to use this over nvi, elvis, or the original BSD vi?
(I assume that people who are interested in features already know where to find (Neo)Vim.)
- rnd0 5y ago>Why would somebody want to use this over nvi This basically is nvi, unless I'm very wrong.
- mrweasel 5y agoIt's nvi plus some OpenBSD patches. Nvi it self has a series of different patches. The question remains valid. Why would you specifically want the nvi from OpenBSD, when you already have nvi? The assumption has to be that OpenBSD added something to their version of nvi, which would "justify" porting it back to non-OpenBSD systems. What those feature are I don't know. It might just be a fun exercise adding the portability back.
- trn 5y agoI have some comments here that address this, but, there are in fact many significant differences. The OpenBSD version forked at Nvi 1.79 around 1996-1997 and has been developed in the OpenBSD base system for 25 years now, and has diverged greatly from Nvi. Nvi2 has also diverged significantly from both "upstream" Nvi and OpenBSD vi. The OpenBSD release has significantly trimmed features and maintains a different structure than the others as the philosophy completely different. There is no Perl / Tcl / pluggable scripting engine support or alternate graphical user interfaces or similar. There are significant differences in the lower level code for signal handling, options, etc. While the core functionality of these editors are all largely the same, and they all share common heritage from Bostic's Nvi, there are trivial and non-trivial differences between all of these editors that are almost too numerous to summarize. Reviewing the ChangeLog (https://raw.githubusercontent.com/johnsonjh/OpenVi/master/ChangeLog https://raw.githubusercontent.com/johnsonjh/OpenVi/master/Ch...) since Nvi 1.79 to present should give you an idea of what's going on with this particular version.
- trn 5y agoDon't confuse OpenVi/OpenBSD-vi, nvi1, and nvi2. These are all different programs that share the same heritage. OpenVi is derived from OpenBSD vi, which derives from nvi version 1.79, released in 1996. There has been 25+ years of independent development as part of the OpenBSD base system and has diverged greatly in that time, with the development going in a different direction. Nvi1, currently on version 1.8x, is maintained at https://repo.or.cz/nvi.git https://repo.or.cz/nvi.git - I believe the latest version of this editor does have multibyte support, but this is not the OpenVi/OpenBSD version of the editor. Nvi2 shares heritage as well but also, quite far removed from the original code, is actively maintained at https://github.com/lichray/nvi2 https://github.com/lichray/nvi2 and also includes multibyte support. (IIRC) the multibyte support in both Nvi1 and Nvi2 derives from nvi-m17n, developed as part of the KAME project by the late itojun - http://www.itojun.org/itojun.html http://www.itojun.org/itojun.html ... the last update to nvi-m17n was about 3 years ago, and is available at https://cgit.freebsd.org/ports/tree/editors/nvi-m17n/files https://cgit.freebsd.org/ports/tree/editors/nvi-m17n/files Currently, optimizing for size using link-time garbage collection with GCC 11.2 on an x86_64 glibc Linux system gives a good idea of the changes over time and the different direction these editors have taken. OpenVi is also simplified in structure and does not have the three levels of abstraction of Nvi 1.8x - there is no library interface layer. For OpenVi, the compiled binary is 280K, and for Nvi1 (nvi-1.81.6-45-g864873d3) the compiled binary is 528K (36K for vi, 528K for libvi). OpenVi has a single configuration standard with no dependencies beyond curses. Nvi1 has many options beyond trace/debug ("widechar" "gtk" "motif" "threads" "perl" "tcl" "db3/4" "internal-re") - so at least 255 different build variations are possible. (I've not yet built Nvi2 myself on Linux so I can't provide an really fair comparison yet, but I will, and I'll summarize the data in an FAQ section of the README) Nvi1 (https://repo.or.cz/nvi.git https://repo.or.cz/nvi.git) looks like: 36K vi 24K vi-ipc 108K vi-motif 492K libvi.so.0.0.0 660K total OpenVi does not - it's a single monolithic binary: 280K bin/vi (Note that I was using the defaults here, I'm sure that it's possible to trim down Nvi 1.8x further, but I'm comparing the default compilations, optimized for size (GCC, -Os, -fdata-sections, -ffunction-sections, link-time GC enabled), but Nvi 1.8x is a much more complicated program, and has a different feature set, and different supported options. But, these are all different editors at this point. A lot happens in 25 years.
- anthk 5y agoThat "nvi" is nvi2 at OpenBSD ports. On features, most people would be fine with a vi clone with utf8 support.
- trn 5y agoTo give a quick overview of ':set'-able options (`:set all` output) of the various editors that derive from 'nvi' ... [no Nvi2 here ... yet] ... Nv1 [nvi-1.81.6-45-g864873d3 (2022-02-21)]: noaltwerase nocomment noignorecase nomodeline noreadonly noshowmode nottywerase noautoindent noedcompatible keytime=6 msgcat="./" noredraw sidescroll=16 noverbose autoprint escapetime=1 noleftright noprint="" remap noslowopen warn noautowrite noerrorbells lines=24 nonumber report=5 nosourceany window=23 backup="" noexrc nolisp nooctal noruler tabstop=8 nowindowname nobeautify noextended nolist open scroll=11 taglength=0 wraplen=0 cdpath=":" filec="" lock optimize nosearchincr tags="tags" wrapmargin=0 cedit="" flash magic path="" nosecure noterse wrapscan columns=117 hardtabs=0 matchtime=7 print="" shiftwidth=8 notildeop nowriteany nocombined noiclower mesg prompt noshowmatch timeout directory="/tmp" fileencoding="UTF-8" inputencoding="UTF-8" paragraphs="IPLPPPQPP LIpplpipbp" recdir="/var/tmp/vi.recover" sections="NHSHH HUnhsh" shell="/bin/zsh" shellmeta="~{[*?$`'"\" term="screen-256color" OpenVi [7.0.13-dev (OpenVi) 02/20/2022]: noaltwerase nocomment noiclower mesg report=5 taglength=0 nowindowname noautoindent noedcompatible noignorecase noprint="" noruler tags="tags" wraplen=0 autoprint escapetime=2 noimctrl nonumber scroll=11 noterse wrapmargin=0 noautowrite noerrorbells keytime=6 nooctal nosearchincr notildeop wrapscan backup="" noexpandtab noleftright open nosecure timeout nowriteany nobeautify noexrc lines=23 path="" shiftwidth=8 nottywerase nobserase noextended nolist print="" noshowmatch noverbose cdpath=":" filec=" " lock prompt noshowmode novisibletab cedit="" noflash magic noreadonly sidescroll=16 warn columns=117 hardtabs=0 matchtime=7 remap tabstop=8 window=22 imkey="/?aioAIO" paragraphs="IPLPPPQPP LIpplpipbpBlBdPpLpIt" recdir="/var/tmp/vi.recover" sections="NHSHH HUnhshShSs" shell="/bin/zsh" shellmeta="~{[*?$`'"\" term="screen-256color" OpenBSD vi [7.0-current]: noaltwerase escapetime=1 noleftright path="" noshowmatch warn noautoindent noerrorbells lines=36 print="" noshowmode window=35 autoprint noexpandtab nolist prompt sidescroll=16 nowindowname noautowrite noexrc lock noreadonly tabstop=8 wraplen=0 backup="" noextended magic remap taglength=0 wrapmargin=0 nobeautify filec=" " matchtime=7 report=5 tags="tags" wrapscan cdpath=":" noflash mesg noruler noterse nowriteany cedit="" hardtabs=0 noprint="" scroll=17 notildeop columns=108 noiclower nonumber nosearchincr timeout nocomment noignorecase nooctal nosecure nottywerase noedcompatible keytime=6 open shiftwidth=8 noverbose paragraphs="IPLPPPQPP LIpplpipbpBlBdPpLpIt" recdir="/tmp/vi.recover" sections="NHSHH HUnhshShSs" shell="/usr/local/bin/zsh" shellmeta="~{[\*?$`'"\" term="screen-256color" Traditional vi [n-t-roff Heirloom vi (01/14/2017)]: noautoindent nomodelines noshowmode autoprint nonumber noslowopen noautowrite open nosourceany nobeautify nooptimize tabstop=8 directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipbp taglength=0 noedcompatible prompt tags=tags /usr/lib/tags noerrorbells noreadonly term=screen-256color noexrc redraw noterse flash remap timeout hardtabs=8 report=5 ttytype=screen-256color noignorecase scroll=17 warn nolisp sections=NHSHH HUnhsh window=35 nolist shell=/usr/bin/zsh wrapscan magic shiftwidth=8 wrapmargin=0 mesg noshowmatch nowriteany