Кіріспе
Пернетақтаға бағытталған мәтіндік редактор
vi (айырым әріптер ретінде айтылады, /v/ /iː/ /'/aɪ/ audio=en_us_vi.oga) – бастапқыда Unix операциялық жүйесі үшін жасалған экранға бағытталған мәтін редакторы. vi және оған негізделген бағдарламалардың мінез-құлқының портативті жиынтығы, сондай-ақ осы бағдарламаларда қолданылатын ex редакторының тілі Single Unix Specification және POSIX арқылы сипатталады (және осылайша стандартталады). vi-дің бастапқы кодын 1976 жылы Билл Джой жазды, ол Чак Хейлимен бірге жазған ex деп аталатын жолдық редактордың визуалды режимі ретінде. Билл Джойдың ex 1.1 нұсқасы 1978 жылғы наурыз айында алғашқы Berkeley Software Distribution (BSD) Unix нұсқасының бір бөлігі ретінде жарияланды. Редактор «vi» деген атпен 1979 жылғы мамырда Second BSD нұсқасының бір бөлігі ретінде шыққан ex-тің 2.0 нұсқасына дейін орнатылған жоқ (ол пайдаланушыларды тікелей ex-тің визуалды режиміне жіберді) және бүгінгі күні осы атпен танымал. Кейбір қазіргі vi нұсқаларының бастапқы кодын Билл Джойға дейін табуға болады; ал басқалары толығымен жаңа, көбінесе үйлесімді қайта жасалған нұсқалар. «vi» атауы ex командасының «visual» опциясының ең қысқа, нақты аббревиатурасынан шыққан, ол ex жолдық редакторын толық экран режиміне ауыстырады. Атауы /v/ /iː/ /'/aɪ/ (ағылшын әріптері v және i) деп айтылады. Unix-тің меншік имплементацияларымен таратылатын vi-дің әртүрлі коммерциялық емес бағдарламалық жасақтама нұсқаларына қосымша, vi OpenSolaris жүйесімен ашық код ретінде жарияланды, сондай-ақ бірнеше ашық бастапқы кодты vi клондары бар. 2009 жылы Linux Journal оқырмандары арасында жүргізілген сауалнамада vi респонденттер арасында ең көп қолданылатын мәтіндік редактор болып табылды, екінші орындағы gedit-ті шамамен екі есе басып озды (36%-дан 19%-ға дейін).
Жасау
vi UNIX командалық жол редакторларының тізбегінен туындады, бастапқыда ed редакторынан, ол телепринтерлерде жақсы жұмыс істеуге арналған жол редакторы болған, дисплей терминалдарына қарағанда. ed редакторының туған жері – AT&T корпорациясында, адамдар осы редактордың қарапайымдылығы мен қолайсыздығына риза болған, дейді Джордж Кулурис, Queen Mary колледжінде лекция оқығанда. em редакторы дисплей терминалдары үшін жасалған және бір уақытта бір жолды визуализациялайтын редактор болды. Бұл Unix жүйесіндегі алғашқы бағдарламалардың бірі болды, ол "шикі терминал енгізу режимін" кеңінен пайдаланды, онда терминал құрылғысының драйвері емес, іске қосылған бағдарлама барлық пернелерді өңдеді. 1976 жылдың жазында Кулурис UC Berkeley-ге сапар шегіп, em редакторы бар DECtape әкелді және оны әртүрлі адамдарға көрсетті. Кейбіреулер бұл жаңа редакторды ресурстарды көп жұмсайтындықтан тиімсіз деп санады, бірақ басқалары, соның ішінде Билл Джой, әсерленді. Содан кейін en редакторын "толықтырып", ex 0.1 нұсқасын жасады, ол 1977 жылдың маусымынан қазан айына дейін ex редакторына толық экранды визуализациялау режимін қосты, ол vi аталды. vi және ex редакторлары бір кодты бөліседі; vi – бұл ex екілік файлы, мәтінді компьютер терминалында визуализациялау мүмкіндігімен, ол ex-тің визуализациялау режимі. Кейінірек жазылған әдебиеттерде vi атауы "visual" сөзінің қысқартылған түрі ретінде түсіндіріледі. vi сонымен қатар қабықта тікелей визуализациялау режимінде ex/vi редакторын іске қосуға арналған қабық командасы болып табылады, осылайша оның редакторы UC Berkeley-ден тыс аудиторияға тарады. BSD Unix-тің осы нұсқасынан бастап Unix жүйесімен бірге келетін жалғыз редакторлар ed және ex болды. 1984 жылғы сұхбатында Джой vi-дің табысының көп бөлігін оның тегін таратылуымен байланыстырды, ал басқа редакторлар, мысалы Emacs, жүздеген долларға сатылатын. vi деп шақырылғанда, ex автоматты түрде өзінің визуализациялау режимінде іске қосылады. Осылайша, vi – ex-тің эволюциясы емес, vi – ex. Джой ex 2.0 (vi) бағдарламасын PDP 11/70 компьютерінің жадына сыятын өте үлкен бағдарлама деп сипаттады, сондықтан бүгінде vi шағын, жеңіл бағдарлама ретінде қарастырылса да, тарихының басында олай емес еді. 1979 жылдың желтоқсанында 3BSD нұсқасымен бірге шығарылған 3.1 нұсқасында vi-дің толық нұсқасы PDP 11 компьютерінің жадына сыймады; сондай-ақ редактор 1984 жылы IBM PC үшін PC/IX жүйесінде жұмыс істеуге тым үлкен болды. Джой 1979 жылдың маусымына дейін vi-дің 2.7 нұсқасына дейін vi-дің бас әзірлеушісі болды. vi-дің пайда болу тарихы мен оның дамуын тоқтату себептерін талқылағанда Джой былай деді:
Порттар мен клондар
1981 жылғы қазанда жасалған vi нұсқасы 3.7-ге дейін vi код базасына енгізілген өзгерістер баяу, шашыраңқы және өзара үйлесімсіз болды. UC Берклиде өзгерістер енгізілді, бірақ нұсқа нөмірі 3.7-ден асырылмады. Sun, HP, DEC және IBM сияқты коммерциялық Unix жүйесін жеткізушілер vi-дің көшірмелерін алды, ал олардың Solaris, HP UX, Tru64 UNIX және AIX операциялық жүйелері 3.7 нұсқасынан тікелей шыққан vi нұсқаларын сақтап, баптамалы пернелерді бейімдеу, шифрлау және кең таңбаларды қолдау сияқты қосымша мүмкіндіктермен жаңарта берді. 1983 жылы vi, Bell Laboratories лицензиясы бойынша Charles River Data Systems компаниясының UNOS операциялық жүйесі үшін қол жетімді UNIX құралдарының бірі болды. Коммерциялық жеткізушілер Билл Джойдың код базасымен жұмыс істей алса, көптеген адамдар мұндай мүмкіндікке ие болмады. Джой Кен Томпсонның ed редакторынан бастағандықтан, ex және vi туынды жұмыстар болып саналды және AT&T бастапқы код лицензиясы бар тұлғаларға ғана таратылуы мүмкін болды. Unix стиліндегі тегін редакторды іздегендер басқа нұсқаларды қарастыруға тиіс болды. 1985 жылы Emacs (MicroEMACS) әртүрлі платформалар үшін қол жетімді болды, бірақ 1987 жылдың маусымына дейін Atari ST үшін STEVIE (ST Editor for VI Enthusiasts) – vi-дің шектеулі клоны пайда болған жоқ. 1990 жылдың қаңтар айында Стив Киркендалл Usenet жаңалықтар тобына Elvis – vi-дің жаңа клонын жариялады (comp.os.minix), STEVIE-ге қарағанда vi-дің толық және дәл клонын жасауды мақсат етті. Бұл көптеген әуесқойлар қауымдастықтарының қызығушылығын оятып, Эндрю Таненбаум қауымдастықты Minix жүйесіндегі vi клоны ретінде осы екі редактордың біреуін таңдауға шақырды. Нәтижесінде Elvis таңдалды және бүгінге дейін Minix жүйесі үшін vi клоны болып табылады. 1989 жылы Линн және Уильям Джолицтер BSD Unix жүйесін 386 класты процессорларда жұмыс істеуі үшін порттауды бастады, бірақ тегін тарату үшін олар AT&T-мен байланысты кодтан, соның ішінде Джойдың vi-нен аулақ болуы керек болды. Vi-ді алып тастаудан туындаған бос орынды толтыру үшін 1992 жылғы 386BSD дистрибуциясы Elvis-ті қабылдады. 386BSD-нің мұрагерлері FreeBSD және NetBSD та осы қадамды қайталады. Бірақ UC Берклиде Кит Бостич 4.4BSD Lite үшін Джойдың vi-іне «кемшілік үшін кемшілікке сай» алмастырушыны қалаған. Киркендаллдың Elvis-ін (1.8 нұсқасы) бастапқы нүкте ретінде пайдаланып, Бостич nvi-ді жасады және оны 1994 жылдың көктемінде шығарды. Гуннар Риттер Джойдың vi код базасын (2.11BSD, 1992 жылғы ақпаннан алынған) Linux және FreeBSD сияқты қазіргі заманғы Unix негізіндегі операциялық жүйелерге көшірді. Бастапқыда оның жұмысы AT&T бастапқы код лицензиясы болмаса таратуға заңсыз болды, бірақ 2002 жылдың қаңтарында лицензиялық талаптар жеңілдетілді, бұл оны ашық кодты жоба ретінде заңды түрде таратуға мүмкіндік берді. Риттер Joy код базасын қолданатын коммерциялық Unix жүйелері жасаған өзгерістерге ұқсас, vi код базасына шағын жақсартулар енгізе берді, соның ішінде vi үшін POSIX.2 стандартында талап етілген өзгерістер де болды. Оның жұмысы Traditional Vi ретінде қол жетімді. Бірақ Joy-дың vi енді BSD Unix үшін қол жетімді болғанымен, ол әртүрлі BSD нұсқалары nvi-ге бағытталғаннан кейін пайда болды, ол дәстүрлі vi-ге қарағанда көптеген жақсартуларды ұсынды және оның кейбір ескі мүмкіндіктерін (мысалы, бір жолды бірден өңдеу үшін ашық режим) жойды. Осылайша, Joy-дың vi код базасы басталған BSD Unix енді оны қолданбайды, ал алғашқы күндері Joy-дың редакторы болмаған AT&T-ден алынған Unix жүйелері қазір оның кодтың өзгертілген нұсқаларын қолданады және жаңартады.
Әсері
Шығармасынан бері өткен жылдар ішінде vi, 1984 жылға дейін Emacs пайда болғанға дейін, де-факто Unix редакторы және MIT-тен тыс хакерлердің сүйікті редакторы болды. Single UNIX Specification vi-ді талап етеді, сондықтан оған сәйкес келетін әрбір жүйеде ол міндетті түрде болуы керек. vi Unix операциялық жүйелер отбасының пайдаланушылары арасында әлі де кеңінен қолданылады. 1991 жылғы USENET сауалнамасына қатысушылардың шамамен жартысы vi-ді басымдық бергенін көрсетті. 1999 жылы атақты компьютерлік кітаптарды басып шығаратын компанияның негізін қалаушы Тим О'Райли, олардың компаниясы vi кітабын Emacs кітабынан көбірек сатқанын мәлімдеді.
Интерфейсі
vi - модульдік редактор: ол кірістіру режимінде (терілген мәтін құжаттың бір бөлігіне айналады) немесе командалық режимінде (пернетақтадағы басылған түймелер редакциялау сеансын басқаратын командалар ретінде түсіндіріледі) жұмыс істейді. Мысалы, командалық режимде «i» пернесін басу редакторды кірістіру режиміне ауыстырады, бірақ осы сәтте тағы да «i» пернесін бассаңыз, құжатқа «i» әрпі қосылады. Кірістіру режимінен «Esc» пернесін бассаңыз, редактор қайтадан командалық режиміне отады. vi-дың мәтін енгізу және командалық режимдерді бөлудің артықшылығы – мәтінді өңдеу және командалық операцияларды пайдаланушының қолын «үй қатарынан» жылжытпай орындауға болады. Модульдік емес редакторлар әдетте әріптер мен символдар бар барлық пернелерді мәтін басып шығару үшін резервтеуге тиіс болғандықтан, буферге мәтін қосудан басқа әрекеттер үшін арнайы командаларды пернетақтада символдарды жасамаушы пернелерге, мысалы, функциялық пернелерге немесе модификатор пернелерінің комбинацияларына (мысалы, «Ctrl» және «Alt» пернелерімен бірге) тағайындау керек. Vi-да көптеген стандартты пернелер орналасу, мәтінді өзгерту, іздеу және т.б. үшін бір немесе бірнеше командалармен байланыстырылған. Көптеген командаларды «үй қатарынан» қолды жылжытпай теруге болады. Басқа типтегі редакторлар пайдаланушыдан қолдарын «үй қатарынан» жылжытуды талап етеді: GUI редакторында мәтін, командалар немесе мәзір элементтерін таңдау үшін тышқанды пайдалану. Жебе пернелері немесе өңдеу функцияларын (Бастапқы / Соңғы немесе функциялық пернелер). Модификатор пернелерін стандартты пернетақта пернелерімен бірге қолданып командаларды шақыру. Мысалы, vi-да сөзді ауыстыру – бұл екі тәуелсіз команданың (өзгерту және сөзді жылжыту) бірігіп, кірістіру режиміне кіру және одан шығу процесі. Курсор орнынан бастап сөздің соңына дейінгі мәтін ауыстыру мәтінімен алмастырылады. Операцияны басқа жерде қайталау үшін «. » пернесін бассаңыз, нәтижесінде сол жерде басталатын сөз сол ауыстыру мәтінімен алмастырылады. Адам-компьютерлік өзара әрекеттесу туралы оқулықтың бірінші бетінде: «ХХИ оқытушылары әлемнің түкпір-түкпірінде айтып, қайталап айтқан классикалық UI кемшіліктерінің бірі – vi редакторының режимдерді ауыстырғанда кері байланыс бермеуі. Көптеген пайдаланушылар командалық режимде мәтін енгізу немесе кірістіру режимінде команда енгізу қатесін жасады».
To use a mouse to select text, commands, or menu items in a GUI editor. To the arrow keys or editing functions (Home / End or Function Keys). To invoke commands using modifier keys in conjunction with the standard typewriter keys. For instance, in vi, replacing a word is replacement text, which is a combination of two independent commands (change and word motion) together with a transition into and out of insert mode. Text between the cursor position and the end of the word is overwritten by the replacement text. The operation can be repeated at some other location by typing , the effect being that the word starting at that location will be replaced with the same replacement text. A human–computer interaction textbook notes on its first page that "One of the classic UI foibles—told and re told by HCI educators around the world—is the vi editor's lack of feedback when switching between modes. Many a user made the mistake of providing input while in command mode or entering a command while in input mode."
Қазіргі кездегі туындылар мен клондар
Vim "Vi IMproved" vi-мен салыстырғанда көптеген қосымша мүмкіндіктерге ие, соның ішінде (скриптіге) синтаксистің боялуы, тышқанды қолдау, графикалық нұсқалар, визуалды режим, көптеген жаңа өңдеу командалары және ex командалары саласындағы кеңейтімдер. Vim дерлік барлық Linux дистрибутивтерімен бірге келеді (сондай-ақ macOS-тың барлық нұсқаларымен бірге орнатылған). Vim-де vi-мен үйлесімділік режимі бар, онда Vim vi-мен үйлесімділігі жақсырақ болады, бірақ кейбір vi мүмкіндіктері, мысалы, ашық режим, тіпті үйлесімділік режимінде де Vim-де жоқ. Бұл режим опция арқылы басқарылады. Егер бағдарламалық қамтамасы vi-мен үйлесімді болуы мүмкін болса, Vim оны іске қосқанда автоматты түрде қосылады. vi үйлесімділігіне қайшы келмейтін Vim мүмкіндіктері әрқашан қол жетімді, орнатудан тәуелсіз. Vim Amiga үшін STEVIE портынан туындаған. Elvis – Стив Киркендалл жазған Unix және басқа операциялық жүйелер үшін тегін vi клоны. Elvis басқа vi клондарының көптеген мүмкіндіктерін енгізді, соның ішінде кіріс режимінде курсор пернелерінің жұмыс істеуіне мүмкіндік беру. Ол түсті синтаксистің ерекшеленуін (және синтаксисті бірнеше файл түрлеріне жалпылауды) ұсынған алғашқы бағдарлама болды. Elvis 1.x nvi үшін бастапқы нүкте ретінде пайдаланылды, бірақ Elvis 2.0 көптеген мүмкіндіктерді қосты, соның ішінде бірнеше буферлерді, терезелерді, дисплей режимдерін және файлдарға қол жеткізу схемаларын. Elvis – Slackware Linux, Kate OS және MINIX жүйелерінде орнатылған vi-дің стандартты нұсқасы. Elvis-тің ең соңғы нұсқасы 2.2, ол 2003 жылдың қазан айында шығарылды. nvi – бұл бастапқыда ресми Беркли бағдарламалық жасақтамасының (4.4 BSD Lite) бөлігі ретінде таратылған ex/vi мәтін редакторының нұсқасы. Бұл vi-дің барлық BSD негізіндегі ашық кодты дистрибутивтермен бірге келетін нұсқасы. Ол команда тарихы мен өңдеуді, файл атауларын толықтыруды, бірнеше өңдеу буферлерін және көп терезелі интерфейсті (бір өңдеу буферінде бірнеше терезелерді қоса алғанда) қосады. 1996 жылдың қазан айынан бастап 1.79 нұсқасы ұсынылатын тұрақты нұсқа болып табылады, nvi-дің "дамыту шығарылымдары" болды, соңғысы 2007 жылдың қарашасынан 1.81.6 нұсқасы. vile бастапқыда vi пайдаланушыларына Emacs-тің көп терезелі/көп буферлі өңдеу мүмкіндіктерін ұсыну үшін Microemacs-тің ерте нұсқасынан алынған және алғаш рет 1991 жылы Usenet-тің alt.sources тобында жарияланды. Ол шексіз кері қайтаруды, UTF-8 үйлесімділігін, көп терезелі/көп буферлі жұмысты, макро кеңейту тілін, синтаксистің ерекшеленуін, файлдарды оқу және жазу құралдарын және тағы да көп мүмкіндіктерді ұсынады. BusyBox, бір орындалатын файлдағы стандартты Linux құралдары жиынтығы, кішкентай vi клонын қамтиды. Neovim – Vim-нің жаңадан жасалған нұсқасы, оны алмастыруға тырысады.
nvi is an implementation of the ex/vi text editor originally distributed as part of the final official Berkeley Software Distribution (4.4 BSD Lite). This is the version of vi that is shipped with all BSD based open source distributions. It adds command history and editing, filename completions, multiple edit buffers, and multi windowing (including multiple windows on the same edit buffer). Beyond 1.79, from October, 1996, which is the recommended stable version, there have been "development releases" of nvi, the most recent of which is 1.81.6, from November, 2007.
vile was initially derived from an early version of Microemacs in an attempt to bring the Emacs multi window/multi buffer editing paradigm to vi users, and was first published on Usenet's alt. sources in 1991. It provides infinite undo, UTF 8 compatibility, multi window/multi buffer operation, a macro expansion language, syntax highlighting, file read and write hooks, and more. BusyBox, a set of standard Linux utilities in a single executable, includes a tiny vi clone. Neovim, a refactor of Vim, which it strives to supersede.