ویم

**ویم**  (سرنام عبارت vi improved به معنای وی‌آی بهبود یافته) یک ویرایشگر متن است که توسط برام مولینار در سال ۱۹۹۱ برای رایانه‌های آمیگا عرضه شد. این نام‌گذاری به این دلیل است که ویم به عنوان یک گسترش‌دهندهٔ ویرایشگر وی‌آی توسعه داده شده بود. ویم در آغاز برای رایانه‌های آمیگا منتشر شده بود؛ اما پس از آن به سوی چندسکویی پیش رفت.

ویم یک پروژهٔ نرم‌افزاری متن‌باز است. مولینار، نویسندهٔ آن، برای حمایت از کودکان اوگاندا کاربران را تشویق به بخشش برای مؤسسهٔ خیریه‌ای می‌کند که به آن کودکان یاری می‌رساند.

از دلایل علاقهٔ توسعه دهنده‌ها به ویم این است که افزونه پذیر (extensible) است و افزونه‌های زیادی برای ویم وجود دارد؛ مثلاً نرد تری (nerd tree) که یک نمایشگر فایل درختی است یا vim-jedi که یک افزونهٔ کامل کنندهٔ کد است.

همین‌طور ویم کلیدهای ترکیبی دارد که می‌تواند خیلی کارها را اتوماتیک کند؛ مثلاً می‌شود با تایپ سه حرف، پنج کلمه را پاک کرد و برای افرادی که مدت طولانی از ویم استفاده می‌کنند مثل توسعه‌دهنده‌ها می‌تواند خیلی مفید باشد.

## تاریخچه
پیش‌درآمد برنامه Vim برنامه Stevie (ویرایشگر ST برای VI Enthusiasts) بود که در سال ۱۹۸۷ توسط تیم تامپسون برای Atari ST ایجاد شد و توسط تونی اندروز و GR (فرد) والتر توسعه یافت.

در سال ۱۹۸۸ برام مولنار بر پایه تجربه کاری خود بر روی Stevie، کار بر روی Vim را برای کامپیوتر آمیگا آغاز کرد و در سال ۱۹۹۱ اولین نسخه عمومی آن را منتشر کرد (Vim v1.14).

در زمان اولین انتشار، نام "Vim" مخفف "Vi IMitation" بود، اما این نام در اواخر سال ۱۹۹۳ به "Vi IMproved" تغییر کرد.

## رابط کاربری

مانند vi، رابط Vim بر اساس منوها یا نمادها نیست، بلکه بر اساس دستورها داده شده در یک رابط کاربری متنی است. حالت GUI آن (**gVim)** به منظور افزودن دستورها معمول در برنامه‌های امروزی دارای منوها و نوارهای ابزار است. اما عملکرد اصلی و کامل آن هنوز از طریق حالت خط فرمان آن انجام می‌شود. ایده اصلی Vi (و با فرمت Vim) نگه داشتن انگشتان تایپیست در ردیف اصلی است و این موضوع می‌تواند برای یک تایپیست یک مزیت باشد.

در برنامه Vim یک آموزش برای مبتدیان به نام vimtutor وجود دارد که همراه با Vim نصب می‌شود. اما به عنوان یک فایل اجرایی جداگانه نیز قابلیت اجرا دارد و می‌توان آن را با استفاده از محیط shell اجرا کرد. Vim دارای یک کتابچه راهنمای کاربران است ویژگی‌های Vim و پرسش‌های متداول را در اختیار کاربر قرا می‌دهد. این راهنما در درون برنامه Vim یا به صورت آنلاین قابل استفاده است.

به علاوه Vim دارای یک ابزار کمک در داخل برنامه است (با استفاده از دستور `:help`) که به کاربران اجازه می‌دهد از طریق دستورها و ویژگی‌ها پاسخ سوالات خود را پیدا کند.

## حالت‌ها
Vim دارای ۱۲ حالت ویرایش مختلف است که ۶ مورد از آنها انواع ۶ حالت اصلی هستند. مهم‌ترین حالت‌ها عبارتند از:
* حالت **عادی** - برای دستورها ویرایشگر استفاده می‌شود. این حالت، حالت پیش فرض برنامه است، مگر اینکه گزینه `insertmode` مشخص شده باشد.
* حالت **بصری** - شبیه حالت عادی، اما برای برجسته سازی برخی از مناطق متن استفاده می‌شود. دستورها عادی را می‌توان در ناحیه برجسته شده اجرا کرد، به عنوان مثال برای جابجایی یا ویرایش یک متن انتخاب شده.
* حالت **درج** - شبیه به ویرایش در اکثر ویرایشگرهای مدرن. در این حالت می‌توان با متن را درج کرد یا تغییر داد.
* حالت **خط فرمان** - در پایین پنجره Vim از خط فرمان تک خطی به عنوان ورودی بهره می‌برد. دستورها عادی (که با: شروع می‌شوند) و برخی کلیدهای دیگر این حالت را فعال می‌کنند که برای اقدامات خاص (از جمله جستجوی الگو و فرمان فیلتر) به کار می‌رود.

## نویسه Vim
**نویسه Vim** (که **Vimscript** یا **VimL** نیز نامیده می‌شود) زبان برنامه‌نویسی ساخته شده در Vim است. نسخه‌های اولیه Vim برای تعریف جریان کنترل و عملکرد اضافه، بر اساس زبان ویرایشگر ex که در برنامه vi بود، دستوراتی را اضافه کردند. با شروع از نسخه ۷، نویسه Vim از انواع داده‌های پیشرفته تر مانند لیست‌ها و فرهنگ لغت‌ها و شکل ساده شده‌ای از برنامه‌نویسی شی گرا پشتیبانی می کند. توابع داخلی مانند و``یک فرم اولیه از برنامه‌نویسی عملکردی را امکان‌پذیر می‌کنند و اسکریپت Vim از نسخه ۸٫۰ دارای لامبدا است. اسکریپت Vim بیشتر به سبک برنامه‌نویسی دستوری نوشته شده‌است.

ماکروهای Vim می‌توانند شامل دنباله‌ای از دستورها *حالت عادی باشند*، اما می‌تواند برای کارهای پیچیده‌تر، دستورها ex یا توابع نوشته شده در نویسه Vim را فراخوانی کنند. تقریباً تمام افزونه‌هایی (به نام پلاگین یا معمولاً نویسه) عملکرد اصلی Vim را بر عهده دارند، با نویسه Vim نوشته شده‌اند. اما افزونه‌ها می‌توانند به زبان‌های دیگری مانند Perl، Python، Lua، Ruby، Tcl, یا راکت نوشته شوند. این افزونه‌ها را می‌توان به صورت دستی یا از طریق یک مدیر پلاگین مانند Vundle, Pathogen یا Vim-Plug نصب کرد.

## مثال

```vim
" This is the Hello World program in Vim script.
echo "Hello, world!"

" This is a simple while loop in Vim script.
let i = 1
while i < 5
  echo "count is" i
  let i += 1
endwhile
unlet i
```


## دسترسی
در حالی که *vi* در ابتدا فقط در سیستم عامل‌های یونیکس در دسترس بود، Vim به بسیاری از سیستم عامل‌ها از جمله AmigaOS ( پلتفرم هدف اولیه)، Atari MinT، BeOS، DOS، Windows از Windows NT 3.1، OS/2، OS/390 راه یافته‌است. MorphOS, OpenVMS, QNX, RISC OS, Linux, BSD و Mac OS کلاسیک. برنامه Vim در تمام نسخه‌های MacOS اپل ارائه می‌شود.

نسخه‌های تبدیل شده مستقل Vim برای اندروید و iOS نیز در دسترس هستند.

## Neovim
**Neovim** یک انشعاب از Vim با یک سری اضافات است که در تلاش است تا توسعه پذیری و قابلیت نگهداری Vim را بهبود بخشد. Neovim از همان نحو پیکربندی Vim پیروی می‌کند؛ بنابراین یک فایل پیکربندی مشابه را می‌توان با هر دو ویرایشگر استفاده کرد، اگرچه تفاوت‌های جزئی در جزئیات گزینه‌ها وجود دارد. اگر از ویژگی‌های اضافه شده Neovim استفاده نشود، Neovim تقریباً با تمام ویژگی‌های Vim سازگار است.

پروژه Neovim در سال ۲۰۱۴ و با تلاش برخی از اعضای انجمن Vim انجام شد که با استفاده از بازسازی سطح بالا، به هدف‌هایی از جمله ارائه نویسه‌ها و پلاگین‌های قدرتمندتر و همچنین ادغام بهتر با رابط‌های کاربری گرافیکی دست پیدا کنند. این پروژه نرم‌افزار رایگان است و کد منبع آن در GitHub موجود است.

Neovim در مارس ۲۰۱۴ جمع‌آوری سرمایه موفقی داشت، که حداقل می‌توانست از یک توسعه دهنده تمام وقت پشتیبانی کند. چندین فرانت اند در حال توسعه هستند و از قابلیت‌های Neovim استفاده می‌کنند.

ویرایشگر Neovim در بایگانی بسته شخصی که توسط اوبونتو و برخی از برنامه‌های مدیریت بسته معمولی میزبانی می‌شود، موجود است که نصب آن را بر روی انواع سیستم‌عامل ممکن می‌سازد.

## جستارهای وابسته
* وی‌آی
* جنگ ویرایشگرها
* ایمکس
* سیاهه ویرایشگرهای متنی
* مقایسه ویرایشگرهای متنی

## پیوند به بیرون
* ترجمه فارسی راهنمای ویم
* تارنماهای آموزشی تعاملی به زبان انگلیسی:
** vimgenius
** openvim
** vim-adventures.com

## منابع

رده:ترم‌کپ
رده:فناوری اطلاعات در هلند
رده:محیط‌های توسعه مجتمع آزاد
رده:محیط‌های توسعه مجتمع گنو/لینوکس
رده:نرم‌افزار آزاد و متن‌باز
رده:نرم‌افزارهای ۱۹۹۱ (میلادی)
رده:نرم‌افزارهای آزاد چندسکویی
رده:نرم‌افزارهای آزاد نوشته‌شده با سی
رده:نرم‌افزارهای خط فرمانی
رده:نرم‌افزارهای ویرایشگر متن که از جی‌تی‌کی+ استفاده می‌کنند
رده:ویرایشگرهای اچ‌تی‌ام‌ال آزاد
رده:ویرایشگرهای متن آزاد
رده:ویرایشگرهای متن اواس ده
رده:ویرایشگرهای متن لینوکس
رده:ویرایشگرهای متن ویندوز
رده:ویرایشگرهای متن یونیکس
رده:ویرایش‌گرهای متن داس
رده:وی‌آی