Dasturlash

Vi muharrirlarida Undo mexanizmi: Tarixi, farqlari va eng qulay yechim

24-mart, 2026, 20:306 ko'rish3 daqiqa o'qish
Vi muharrirlarida Undo mexanizmi: Tarixi, farqlari va eng qulay yechim

Vi muharriri 1970‑yillarning oxirida Bill Joy tomonidan yaratilgan bo‘lib, dasturchilar orasida tezkor matn tahriri uchun standartga aylandi. Ammo uning u buyrug‘i faqat bitta darajali "undo" (orqaga qaytarish) imkonini berardi – bu zamonaviy foydalanuvchilar uchun qiyin bo‘lishi mumkin. Quyida biz bu funksiyaning rivojlanishini, turli klonlarda qanday amalga oshirilganini va eng qulay yechimni ko‘rib chiqamiz.

POSIX standartida "u" buyrug‘i

POSIX va Single Unix Specification vi‑ni standartga kiritganda, u buyrug‘ini "oxirgi buyrug‘ tomonidan kiritilgan o‘zgarishlarni, shu jumladan oldingi undo ni ham, bekor qilish" deb belgiladi. Bu talaba eski vi‑ning bir darajali undo mexanizmini saqlashga yo‘naltiradi. Standartga rioya qilishni tanlagan nvi, OpenBSD vi va boshqa ba’zi klonlar shu usulni saqlab qoladi.

Vim va ko‘p darajali undo

Vim (Vi IMproved) POSIX talabini e’tiborsiz qoldiradi va ko‘p darajali undo/redo tizimini joriy qiladi. u buyrug‘i faqat bekor qilish uchun, lekin bir necha marta takrorlansa, bir nechta o‘zgarishlarni orqaga qaytaradi. Redo uchun Ctrl‑r ishlatiladi – bu ham ko‘p darajali. Bundan tashqari, u va Ctrl‑r buyrug‘lariga son (masalan, 10u) berish orqali bir vaqtning o‘zida 10 ta o‘zgarishni bekor yoki tiklash mumkin.

nvi: POSIX‑ga sodiq, lekin ko‘p darajali undo

nvi POSIX talabini saqlab qoladi, ammo ko‘p darajali undo imkoniyatini u.. kabi ketma‑ketik . (dot) buyrug‘i orqali beradi. Masalan, u.. uchta oxirgi o‘zgarishni bekor qiladi. Biroq, bu usulda bir vaqtning o‘zida bir nechta undo bajarish uchun maxsus hisoblagich (count) qo‘llab‑quvvatlanmaydi, shuning uchun foydalanuvchi har bir u yoki . ni alohida bosishi kerak. Shuningdek, undo yoki redo jarayonida kursorni harakatlantirish ba’zan ketma‑ketikni buzadi.

GNU Emacs‑ning Evil rejimi

Emacs uchun vi‑emu­lator Evil ham GNU Emacs’ning ko‘p darajali undo tizimini meros qilib oladi. Unda u va Ctrl‑r buyrug‘lari mos ravishda undo va redo vazifasini bajaradi. Ammo Evil‑da undo ketma‑ketigiga kursor harakati aralashganda ba’zi noaniqliklar paydo bo‘lishi mumkin, bu esa vi yoki Vim bilan solishtirganda foydalanuvchi tajribasini pasaytiradi.

BusyBox vi

BusyBox‑ning minimal vi implementatsiyasi ham u buyrug‘ini qo‘llab‑quvvatlaydi, lekin ko‘p darajali undo faqat u ni takroriy chaqirish orqali amalga oshiriladi, redo esa umuman yo‘q. Bu kichik tizimlarda, masalan, yo‘qotish xavfi kam bo‘lgan embedded qurilmalarda, yetarli bo‘lishi mumkin.

Qaysi usul eng qulay?

Ko‘pgina foydalanuvchilar uchun Vim‑ning ko‘p darajali undo/redo tizimi eng insonparvar variant hisoblanadi. Undo va redo buyrug‘larini boshqa harakatlar (kursor harakati, qidiruv, yanking) bilan aralashtirish mumkin, bu esa matnni tahrir qilish jarayonini yanada erkin qiladi. nvi yoki Evil kabi usullar maxsus “undo rejimi”ga kirishni talab qiladi, bu esa tezkor tahrirda noqulaylik tug‘diradi.

  • Vim – ko‘p darajali, tezkor, Ctrl‑r bilan redo.
  • nvi – POSIX‑ga sodiq, u.. bilan ko‘p darajali, lekin cheklangan.
  • Evil – Emacs ichida vi‑stil, lekin ba’zi holatlarda noaniq.
  • BusyBox vi – minimal, faqat undo, redo yo‘q.

Umuman olganda, zamonaviy dasturchilar va texnik yozuvchilar uchun Vim yoki uning klonlari (Neovim, etc.) eng maqbul tanlovdir. Ular POSIX talablari bilan mos kelmasligi mumkin, lekin foydalanuvchi qulayligi va samaradorlik nuqtai nazaridan afzallik beradi.

Manba: Hacker News
#vi #vim #undo #text editor #nvi
Telegram da muhokama qilish