Giter VIP home page Giter VIP logo

vimpersian.github.io's Introduction

Hello Vim World!

ویم‌، یک ادیتور مودال است. به این معنی که در ویم، ما مود‌های مختلف جهت انجام کارهای مختلف داریم. مد عادی ویم، یا همان نرمال مود، حالتی است که در آن ما درون فایل حرکت می‌کنیم، متن را جستجو می‌کنیم یا ویرایش‌های جزئی انجام می‌دهیم.

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

دانستن اینکه ویم فراتر از یک ادیتور است و درواقع یک زبان برای ویرایش متن و کد است در ابتدای کار حیاتی است. در ویم هر کلید کیبورد در مود نرمال به یک کنش یا اکشن اختصاص دارد. مدل ویرایش در ویم این صورت است که ما مدام در بین مودهای مختلف در حال حرکت هستیم و این سرعتی باور نکردنی در پیمایش متن و ویرایش آن به ما می‌دهد.

ویم دارای گرامر بخصوصی است که آن‌را می‌توان به COM خلاصه کرد.

  • count (شمارش)
  • operation (عملیات)
  • motion (جهت)
تمام دستورات ویم می‌توانند با یک عدد پیش از آن‌ها، به تعداد آن عدد انجام شوند. همچنین تمام دستورات ویم نیز می‌توانند در جهت خاصی مانند ،چپ، راست، تا آخر خط، تا آخر کلمه، تا آخر پاراگراف ، تا اولین خط خالی و ... انجام شوند.

در ویم یا وی‌آی، ما می‌توانیم با تنها یک کلید ، در متن حرکت کنیم. این حرکت‌ها به کلمات، گروهی از حروف ، اعداد، تک حرف ، توکن‌ها یا خط ‌ها باشند. در منطق ویم، یک کلمه می‌تواند گروهی از حروف ، اعداد و سمبل‌ها باشد. از طرفی دیگر یک توکن، هر آنچه که با فضای سفید، (اسپیس) جدا شده باشد تلقی می‌شود.

این راهنما باید بعد از انجام کامل vimtutor خوانده شود.
در ترمینال عبارت vimtutor را وارد کنید و درس‌ها را انجام دهید. اگر با زبان انگلیسی آن راحت نیستید، این پلی‌لیست را در یوتوب ببینید.

<iframe width="560" height="315" src="https://www.youtube.com/embed/1MQuSZzjvMA?si=hfl-ZmyHKMjRm7FE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

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


  1. حرکت در فایل
  2. حرکت با حروف، کلمه یا توکن
  3. حرکت با خطوط
  4. حرکت به وسیله صفحه
  5. وارد کردن متن
  6. ویرایش متن
  7. کات کپی و جایگذاری
  8. حالت ویژوال
  9. ایندنت
  10. جستجو در متن
  11. ذخیره کردن و خروج از فایل
  12. کار کردن با بیش از یک فایل
  13. مارک‌ها و پرش‌ها
  14. ماکرو
  15. فعال کردن تم‌ها در ویم
  16. دستورات جایگزینی متن
  17. فلگ های مرسوم برای دستورات جایگزینی
  18. آرگومان های خط فرمان
  19. کارکردن با نوشتار پارسی در ویم
  20. نکاتی درمورد ترمینال
  21. فونت‌های مناسب برای هر دو نوشتار پارسی و انگلیسی
  22. نیم فاصله
  23. ذخیره‌سازی تنظیمات در فایل ویم‌آرسی
  24. نصب پلاگین با استفاده از ویم‌پلاگ
  25. چند پلاگین مفید برای ویم
  26. چک کردن املای کلمات

حرکت در فایل

حرکت با حروف، کلمه یا توکن

کلید‌های اساسی حرکت در ویم این‌ها هستند:
  • h -- حرکت نشانگر به چپ
  • j -- حرکت نشانگر به پایین
  • k -- حرکت نشانگر به بالا
  • l -- حرکت نشانگر به راست

این کلید‌ها را می‌توان با یک شمارش همراه کرد تا به توان همان عدد انجام شوند
  • 5j پنج خط به پایین می‌رود

  • b -- حرکت به اول یک کلمه
  • B -- حرکت به اول یک توکن
  • w -- حرکت به اول کلمه‌ی بعد
  • W -- حرکت به اول توکن بعد
  • e -- حرکت به آخر کلمه
  • E -- حرکت به آخر توکن

برای پرش به پرانتز بسته، گیومه بسته و غیره از % استفاده کنید

:h matchpairs

حرکت با خطوط

  • 0 \ zero -- حرکت به اول خط فعلی
  • $ \ dollar sign -- حرکت به آخر خط فعلی
  • ^ \ caret sign -- حرکت به اولین کاراکتر موجود در خط
  • #G / #gg / :# حرکت به شماره خط مشخص، (شماره خط جایگزین هشتگ شود)

برای استفاده از این قابلیت، شماره خطوط را فعال کنید.
:set number

حرکت به وسیله صفحه

دستورهای زیر برای اسکرول کردن سریع در فایل کاربرد دارند.
  • Ctrl + b -- یک صفحه کامل به عقب رفتن
  • Ctrl + f -- یک صفحه کامل به جلو رفتن
  • Ctrl + d -- نصف صفحه جلو‌ رفتن
  • Ctrl + u -- نصف صفحه عقب رفتن
  • Ctrl + e -- صفحه را بدون حرکت دادن نشانگر یک خط پایین‌تر بردن
  • Ctrl + y -- صفحه را بدون حرکت دادن نشانگر یک خط بالاتر بردن
  • Ctrl + o -- به عقب رفتن در تاریخچه‌ی پرش ها. برای حرکت بین فایل‌ها و بافرها هم کاربرد دار
  • Ctrl + i -- برعکس دستور بالا

  • H -- حرکت به بالای صفحه
  • M -- حرکت به وسط صفحه
  • L -- حرکت به پایین صفحه

وارد کردن متن

  • i -- وارد شدن به حالت ورود متن
  • I -- وارد کردن متن در اول خط
  • a -- سوییچ کردن به حالت ورود متن بعد از نشانگر
  • A -- وارد کردن متن در آخر خط
  • o -- باز کردن یک خط جدید زیر خط فعلی
  • O -- باز کردن خط جدید بالای خط فعلی
  • ea -- وارد کردن متن در آخر کلمه
  • Esc -- خارج شدن از حالت ورود متن و برگشنن به حالت نرمال

ویرایش متن

  • r -- جایگزین کردن یک کاراکتر و بازگشت به حالت نرمال
  • cc -- جایگزین کردن کل خط (خط را پاک می‌کند و به خالت ورود متن می‌رود)
  • C / c$ -- جایگزین کردن متن از مکان نشانگر تا آخر خط
  • cw -- جایگزین کردن تا آخر کلمه
  • s -- جایگزین کردن یک کاراکتر و رفتن به حالت ورود متن
  • J -- ادغام خط فعلی و خط زیر آن با یک اسپیس فاصله
  • gJ -- ادغام خط فعلی با خط زیر آن بدون اسپیس
  • u -- undo
  • Ctrl + r -- redo
  • . -- تکرار آخرین دستور

کات کپی و جایگذاری

  • yy -- کپی کردن کامل خط فعلی
  • #yy -- کپی کردن تعداد مشخصی از خطوط
  • dd -- کات کردن کل خط
  • #dd -- کات کردن تعداد مشخصی از خطوط
  • p -- جایگذاری بعد از نشانگر
  • P -- جایگذاری قبل از نشانگر

ایندنت

برای ایندنت کردن در حالت نرمال از کلید های زیر استفاده می کنیم:
  • >>
  • <<
برای ایندنت کردن در حالت اینسرت از کلید های زیر استفاده می کنیم:
  • Ctrl+t
  • Ctrl+d
کنترل و تی، متن را رو به جلو ایندنت می کند و کنترل و دی رو به عقب

حالت ویژوال

به غیر از حالت ورود متن (insert mode) و حالت نرمال (normal mode) و حالت دستوری (command mode)، حالت دیگری نیز به نام حالت ویژوال (visual mode) وجود دارد. از این مود برای انتخاب و ویرایش و انجام عملیات‌های مختلف بر روی بخش‌های بزرگ‌تری از متن استفاده می‌شود

ویژوال مود سه حالت کلی دارد.

  • حالت کاراکتری
  • حالت خطی
  • حالت بلاک
character mode, line mode, and block mode

  • v -- انتخاب متن در حالت کاراکتری
  • V -- انتخاب متن در حالت خطی
  • Ctrl+v -- انتخاب متن در حالت بلاک

پس از فعال‌سازی یکی از حالت‌ها، با استفاده از کلید‌های جهت متن را انتخاب کنید.

  • o -- حرکت از ابتدای متن انتخاب شده به آخر آن
  • aw -- انتخاب یک کلمه
  • ab -- انتخاب یک بلاک کد که در بین پرانتز است
  • aB -- انتخاب یک بلاک کد که در بین آکولاد است {}
  • at -- انتخاب یک بلاک کد که در بین تگ است <>
  • ib -- انتخاب قسمت داخلی یک بلاک کد که بین پرانتز است
  • iB - انتخاب قسمت داخلی یک بلاک کد که بین آکولاد است {}
  • it -- انتخاب قسمت داخلی یک بلاک کد که بین یک تگ است <>
پس از انتخاب متن مورد نظر می‌توانید عملیات‌های مختلف را به وسیله‌ی کلید‌های زیر انجام دهید.
  • y -- کپی
  • d -- کات
  • p -- جایگذازی

جستجو در متن

  • * \ asterisk -- رفتن به وقوع بعدی از کلمه‌ی زیر نشانگر

  • # \ pound sign -- رفتن به وقوع قبلی از کلمه‌ی زیر نشانگر

  • /pattern --جستجوی یک الگوی مشخص در فایل

  • ?pattern -- جستجوی یک الگوی مشخص از مکان فعلی تا اول متن

  • n -- پرش به وقوع بعدی الگوی یافت شده

  • N -- پرش به وقوع قبلی الگوی یافت شده


ذخیره کردن و خروج از فایل

  • :w -- ذخیره کردن
  • :wq / :x / ZZ -- ذخیر کردن و خروج از ویم
  • :q -- خروج
  • :q!/ ZQ -- خروج بدون ذخیره کردن تغییرات
  • :w new_file_name -- ذخیره کردن تحت نامی جدید و ادامه دادن به ویرایش فایل اصلی
  • :sav -- ذخیره کردن تحت نامی جدید و ادامه‌ دادن به ویرایش فایل کپی شده
  • :w !sudo tee % -- ذخیره کردن فایل به‌وسیله‌ی سودو و تی، مناسب وقتی که فایلی را بدون دسترسی سودو باز کرده‌ایم tee

کار کردن با بیش از یک فایل

  • :e file_name  -- باز کردن فایل در یک بافر جدید
  • :bn  -- رقتن به بافر بعدی
  • :bp -- بازگشت به بافر قبلی
  • :bd  -- بستن بافر
  • :b#  -- رفتن به بافر با عدد شناسایی مشخص
  • :b file_name -- رفتن به بافر با نام مشخص
  • :ls -- لیست کردن تمام بافر باز ( شناسه‌ی عددی هر بافر کنار نام آن ظاهر خواهد شد)

  • :sp file_name  -- باز کردن یک فایل در یک اسپلیت افقی

  • :vs file_name  --باز کردن یک فایل در یک اسپلیت عمودی

  • :vert ba  -- باز کردن همه‌ی بافر های فعلی در اسپلیت‌های عمودی

  • :tab ba  -- ویرایش تمام بافر‌ها به‌وسیله تب‌

  • gt -- رفتن به تب بعدی

  • gT -- رفتن به تب قبلی

  • Ctrl+w s -- اسپلیت کردن صفحه به صورت افقی

  • Ctrl+w v -- اسپلیت کردن صفحه به صورت عمودی

  • Ctrl+w w -- سوییچ کردن بین اسپلیت ها (مشابه alt + tab)

  • Ctrl+w q -- بستن اسپلیت ها

  • Ctrl+w x -- جابجا کردن اسپلیت ‌ها با یگدیگر

  • Ctrl+w +/- -- تغییر اندازه‌ی اسپلیت عمودی

  • Ctrl+w >/< -- تغییر اندازه‌ی اسپلیت افقی

  • Ctrl+w = -- برابر کردن طول و عرض تمام اسپلیت‌ها


مارک‌ها و پرش‌ها

  • m[a-z] -- مارک کردن موقعیت فعلی به‌وسیله‌ی حروف الفبا
  • M[a-z] -- مارک کردن خط فعلی به‌وسیله‌ی خطوط الفبا
  • `a - پرش به موقعیتی که با حرف آ مارک شده a
  • `. -- پرش به آخرین تغییر در فایل
  • `0 -- پرش به آخرین موقعیت فایل قبل از بسته شدن ویم
  • `` -- پرش به آخرین پرش
  • :marks -- لیست کردن همه‌ی مارک ها
  • :jumps -- لیست کردن همه‌ی پرش ‌ها
  • :changes لیست کردن همه‌ی‌ تغییرات
  • Ctrl+o -- رفتن به پرش قبلی
  • Ctrl+i -- رفتن به پرش بعدی
  • g; -- رفتن به تغییر قبلی در لیست تغییرات
  • g, -- رفتن به نغییر بعدی در لیست تغییرات

ماکرو

برای دستور ها یا ویرایش های تکرار شونده در ویم میتوان از ماکروها استفاده کرد. برای ضبط یک ماکرو ابتدا کلید q و سپس نام رجیستری که می‌خواهیم ماکرو در آن ضبط شود را وارد می‌کنیم، بدین ترتیب می‌توانیم چندین ماکرو بصورت همزمان داشته باشیم. در این مثال از رجیستر a استفاده شده است.
  • qa  -- ضبط کردن یک ماکرو a
  • -- توقف ضبط یک ماکرو
  • @a  -- اجرا کردن ماکرو a
  • @@  -- اجرای دوباره‌ی ماکرو
برای مثال اگر محتوای زیر را داشته باشیم:
aaa
bbb
ccc
ddd
و بخواهیم در آخر هر خط یک کاراکتر وارد کنیم، برای مثال حرف x، می توانیم ماکرو زیر را ضبط کنیم.
Ax<ESC>j

با در نظر گرفتن کلید ضبط و پایان ضبط ماکرو

qAx<ESC>jq
در اینجا با استفاده از اپراتور A، به آخر خط رفته و وارد مود ورود متن یا همان اینسرت مود می شویم. حرف x را تایپ کرده و با زدن کلید اسکیپ به مود نرمال بر می گردیم و در آخر با زدن کلید j به خط پایین می رویم تا ماکرو بتواند ادامه پیدا کند. همان‌طور که پیش‌تر گفتیم، همه‌چیز در ویم شمارش پذیر یا توان پذیر هستند. بنابراین برای اجرای یک ماکرو به توان عدد خاصی، آن عدد را قبل از فراخوانی ماکرو وارد می‌کنیم.

10@a 
ماکروی ضبط شده در رجیستر را به تعداد ده بار اجرا می‌کند

فعال کردن تم‌ها در ویم

  • :colorscheme [colorscheme_name]  -- تغییر تم رنگی
  • :colorscheme [space]+Ctrl+d -- لیست کردن تمام تم های رنگی موجود
چند تم پیش‌فرض زیبا:
  • retrobox
  • lunaperche
  • elflord
  • slate
با استفاده از دستور زیر نیز می‌توان رنگ زمینه پیش‌فرض ویم را به روشن یا تاریک تغییر داد:

:set background=dark
:set background=light
برای استفاده بهتر از رنگ ها و همچنین فعال سازی سینتکس، از دستور زیر استفاده می کنیم:

:syntax on
بعدها شیوه ذخیره کردن این تنظیمات در ویم را خواهیم آموخت.

دستورات جایگزینی متن

یکی از قابلیت‌های قدرتمند ویم، دارا بودن یک نوع فرمان SED داخلی است. این فرمان که در ویم معمولاً substitute خوانده می‌شود، ابزار بسیار پیشرفته‌ای برای یافتن و ویرایش متن به وسیله‌ی الگو‌های رجکس است. با استفاده از این دستور، کاربر ویم می‌تواند ویرایش‌های عظیم و پیچیده‌ای را روی فایل‌ها اعمال کند. عملیات‌های طولانی و طاقت فرسای اصلاح متنی طولانی با استفاده صحیح از این دستور به آسانی صحبت کردن با بهترین دوستتان می‌شوند.

برای مثال, یک فایل html با محتوای زیر داریم.

Quote of the day

Shopenhauer

"The majority of men... are not capable of thinking, but only of believing, and... are not accessible to reason, but only to authority."

(Arthur Shopenhauer)

فرض می‌کنیم که این بخشی از یک مقاله دانشگاهی یا پستی برای یک وبلاگ است. همچنین فرض می‌کنیم که ما نام آرتور شوپنهاور را از اول این فایل اشتباه تایپ کرده‌ایم. به‌جای Sch برای صدای ش در آلمانی از Sh در انگلیسی استفاده کرده‌ایم. حالا ساعت‌ها کار ما بخاطر این اشتباه غیرقابل ارائه است.

برای حل این مشکل از یک دستور جایگزینی ساده استفاده می‌کنیم.

:%s/Shopenhauer/Schopenhauer/g
اجازه بدهید دستور را خرد کنیم.

  • % همیشه اشاره به فایل فعلی در ویم دارد، اینجا یعنی در این فایل بگرد
  • s شروع دستور جستجو و جایگزینی همیشه با این حرف است. به معنی substitute
  • /الگوی هدف/
  • /الگوی مقصد/
  • g انجام عملیات برای تمامی مچ‌ها
نکته
در ویم نقطه . اشاره به خط زیر نشانگر دارد

سینتکس ساده ی دستورات جایگزینی به شکل زیر است:
:s/search/replace/flags

فلگ های مرسوم برای دستورات جایگزینی

  • c تایید کردن هر جایگزینی بصورت دستی
  • e ساکت کردن ارورها در صورتی که الگو پیدا نشود
  • i نادیده گیری حروف بزرگ و کوچک ignorecase
  • I حساسیت به حروف بزرگ و کوچک
  • g انجام جایگزینی در تمام مچ‌ها، در غیر این صورت جایگزینی پس از اولین مچ متوقف می‌شود
  • n نمایش تعداد مچ‌ها و عدم جایگزینی

آرگومان های خط فرمان

آرگومان های خط فرمان ویم، آپشن هایی هستند که برای تغییر عمل کرد ویم در هنگام باز کردن آن از ترمینال، می توانید مقابل نام دستور ویم قرار دهید. در جدول زیر تعداد زیادی از این آرگومان ها برای شما با توضیحات فارسی قرار داده شده است.

پر کاربردترین این آرگومان ها از نظر نگارنده در جدول اول و باقی آن ها در جدول دوم آمده اند.

جدول اول

Option Description
-o باز کردن تعدادی فایل در اسپلیت های افقی
-O باز کردن تعدادی فایل در اسپلیت های افقی عمودی
-p باز کردن تعدادی فایل در تب های مجزا درون ویم
+/{pat} تعیین جایگاه نشانگر براساس اولین وقوع رجکس
-u {vimrc} خواندن فایل پیکره بندی غیر از فایل پیش فرض
--clean باز کردن ویم بدون تنظیمات شخصی - بدون ویم آرسی
--version چاپ اطلاعات مربوط به ورژن و ویژگی ها

جدول دوم

Option Description
vim باز کردن ویم و یک بافر خالی در حالت نرمال
vim filename باز کردن ویم با یک فایل مشخص
vim - stdin خواندن متن از ورودی استاندارد
-n or --normal باز کردن ویم در حالت نرمال، پیش‌فرض
-i or --insert باز کردن ویم در مود اینسرت
-R or --readonly باز کردن فایل در حالت غیرقابل ویرایش
-N or --noplugin باز کردن ویم بدون لود کردن هیچ پلاگینی
+[num] تعیین جایگاه نشانگر براساس شماره خط
+{command} or -c {command} اجرای یک دستور پس از بازکردن فایل
-S {file} سورس کردن یک فایل ویم اسکریپت
-g or --gui باز کردن جی ویم یا همان ویم در پنجره گرافیکی
-A باز کردن ویم در حالت عربی، راست به چپ آینه شده، درصورتی که با گزینه مربوط کامپایل شده باشد
-b حالت ویرایش فایل‌های باینری
-C vi حالت هماهنگی با ادیتور
-d diff باز کردن ویم در حالت دیف , برای مقایسه فایل‌ها
-E باز کردن ویم در مود ارتقا یافته ی اکس
-F باز کردن ویم با تنظیمات فارسی، این گزینه دیگر وجود ندارد
-h نمایش پیام کمکی
-m غیر فعال کردن امکان ایجاد تغییر
-N vi خاموش کردن تطابق با
-R read only حالت
-r لیست کردن فایل های سواپ ویم جهت ریکاوری
-x فعال سازی رمزگذاری فایل
-y باز کردن ویم در حالت ایزی-ویم / در این حالت ویم نت پد ویندوز را شبیه سازی می کند
-Z باز کردن ویم در حالت محدود، جلوگیری از اجرای دستورات پوسته و غیره
-- اعلام پایان آرگومان های ویم، پس از این تمام آرگومان ها به عنوان نام فایل خوانده می شوند

کارکردن با نوشتار پارسی در ویم

برخلاف آنچه تصور می‌کنید، ویم قابلیت رندر کردن و تایپ متون فارسی را دارد. با اینکه ویژگی +farsi در نسخه ۷ از ویم حذف شد، اکثر توزیع‌های ویم‌ با ویژگی +arabic کامپایل شده‌اند و در نتیجه قابلیت پردازش متون راست به چپ را نیز دارا می‌باشند.

طبیعتا شما می‌توانید با تغییر زبان کیبورد خود به هر زبانی که می‌خواهید در ویم تایپ کنید، اما قابلیت استفاده از دستورات ویم را از دست می‌دهید و برای مثال چنانچه از اینسرت مود خارج شوید دیگر با زدن کلید i به آن باز نمی‌گردید.

راه حل این مسئله استفاده از کیبورد فارسی داخلی ویم است.

دستور زیر را در مود خط فرمان ویم وارد کنید:

:echo $VIMRUNTIME
بسته یه اینکه ویم را چگونه کامپایل کرده‌اید، یا در کدام توزیع آن‌را از مخارن باینری نصب کرده‌اید، مسیر خروجی می‌تواند متفاوت باشد. معمولا مسیر زیر در نتیجه دستور بالا به شما نمایش داده خواهد شد:
/usr/share/vim/vim90/
این مسیر ران‌تایم ویم و فایل‌های آن است. از طریق شل (پوسته) وارد مسیر بالا شوید:
cd /usr/share/vim/vim90
سپس با استفاده از ls پوشه‌ها و فایل‌های موجود را بررسی کنید‌. باید یک پوشه به نام keymaps ببینید. با دستور زیر از وجود فایل کیبورد فارسی برای ویم اطمینان حاصل کنید:
find keymaps -type f -name '*persian*'
این فرایند را می‌توانستیم به صورت زیر نیز خلاصه کنیم:
find /usr/share/vim/vim90 -type f -name '*persian*'
چنانچه به هر علتی، فایل persian.vim و persian-iranian_utf-8.vim در مسیر ویم قرار ندارد، از مخزن ویم آن‌‌ها را دانلود کنید و در مسیر مذکور قرار دهید.
Vim GitHub
حالا می‌توانیم وارد ویم شویم و با دستور زیر زبان ورودی را به فارسی تغییر دهیم.
:set keymap=persian
بدین‌ترتیب، تمام مود‌های ویم، و شورتکات‌های ویم در عین فارسی بودن کیبورد به درستی کار می‌کنند.

برای تغییر کیبورد به انگلیسی از دستور زیر استفاده می‌کنیم:

:set keymap=
جهت راحتی بیشتر، می‌توانیم برای این دستور‌ها، شورتکات تعریف کنیم. برای مثال:
inoremap <C-f> <C-o>:set keymap=persian<cr>
inoremap <C-e> <C-o>:set keymap= <cr>
بدین ترتیب با کلید‌های Ctrl+f به پارسی، و با Ctrl+e به انگلیسی می‌رویم. اما بهتر است از مپ کردن کلید‌هایی که در ویم کاربرد پیش‌فرضی دارند، مانند دو ترکیب بالا خودداری کنیم و به جای آن از کلید لیدر استفاده کنیم.
inoremap <leader>f <C-o>:set keymap=persian<cr>
inoremap <leader>e <C-o>:set keymap= <cr>
کلید لیدر، یک مودیفایر مخصوص در ویم است که با ترکیب آن با دیگر کلیدها می‌توانیم مپینگ‌های شخصی‌ بسازیم، بدون اینکه مپینگ‌های داخلی ویم را تغییر داده باشیم. کلید لیدر پیش‌فرض ویم \ است. اکثر کاربران این کلید لیدر را به اسپیس تغییر می‌دهتد.
let mapleader =" "
بنابراین با زدن space-e و space-f کیبورد را عوض می‌کنیم. این تنظیمات باید در فایل ~/.vimrc قرار بگیرند.

نکاتی درمورد ترمینال

اگر به‌صورت مداوم با متون پارسی سروکار دارید، حتما از یک ترمینال مناسب استفاده کنید. ترمینال‌های VTE و ترمینال‌های شناخنه شده، ساپورت مناسبی برای نوشتار راست به چپ دارند. لیستی از ترمینال‌های خوب در پایین آورده شده است.
  1. Xterm
  2. Xfce4-terminal
  3. Konsole
  4. Roxterm
  5. Blackbox
  6. Gnome-terminal
  7. Terminator
  8. Lxterminal
  9. Qterminal
  10. Sakura

فونت‌های مناسب برای هر دو نوشتار پارسی و انگلیسی

فونت‌های زیر عملکرد‌ مناسبی در هردو نوشتار راست به چپ و چپ به راست دارند. در اکثر مواقع فونت پیش‌فرض monospace سیستم برای بیشتر سناریو ها مناسب است. با استفاده از دستور زیر می‌توانید ببینید که فونت پیش‌فرض مونو سیستم شما کدام فونت است.
fc-match monospace

خروجی این دستور در سیستم نگارنده به شکل زیر است:

NotoSansMono-Regular.ttf

پکیج noto-fonts در اکثر سیستم‌ها بصورت پیش‌فرض نصب است. چنانچه این پکیج را نصب ندارید یا سیستم شما به فونت دیگری برای مونو فالبک می‌کند (برای مثال فونت روبوتو)، می‌توانید فونت مونو سیستمی را تغییر دهید. برای این کار به دستورالعمل توزیع خود مراجعه کنید.

برای مواردی که در tty نیاز به فونت مناسب فارسی دارید، فونت terminus ساپورت مناسبی از گلیف‌های فارسی دارد.

نیم فاصله

برای نمایش درست نیم فاصله ها در ویم، خصوصا در ترمینال، می بایست دو خط زیر را به ویم آرسی خود اضافه کنیم. اینجا از قابلیت conceal ویم برای پنهان کردن و جایگزینی ZWNJ استفاده می‌کنیم.

call matchadd('Conceal', '\%u200c', 10, -1, {'conceal':'|'})
set conceallevel=2 concealcursor=nv
من اینجا از کاراکتر | برای نشان دادن نیم فاصله استفاده می کنم. برای وارد کردن نیم‌فاصله با استفاده از کیبورد فارسی داخلی ویم از کلید‌های شیفت-بی Shift-B استفاده می‌کنیم.

ذخیره‌سازی تنظیمات در فایل ویم‌آرسی

برای ذخیره‌سازی تنظیمات ویم از فایل ویم‌آرسی استفاده می‌کنیم. این فایل بصورت پیش‌فرض وجود ندارد مگر آن‌که توزیع شما یا خودتان آن‌را ساخته باشید. در این فایل می‌توانیم تمامی تنظیمات داخلی ویمو تنظیمات پلاگین‌ها را تغییر دهیم، ویم‌اسکریپت‌‌های خودمان را اضافه کنیم و ویم را کاملا از آن خود کنیم.

در ابتدا آپشن‌های مورد نظر خود را set می‌کنیم. تعدادی از این آپشن‌ها ضروری و تعداد زیادی از آن‌ها کاملا سلیقه‌ای هستند.

vim ~/.vimrc

در جدول زیر تعدادی از آپشن‌های ضروی از نظر نگارنده آورده ‌شده‌اند.

option Description
set shiftwidth=4 تعداد فاصله در هر سطح از ایندت
set tabstop=4 تغداد فاصله در هر تب
set noswapfile خاموش کردن فایل های سواپ که برای بازیابی اطلاعات استفاده می شوند
set autoindent ایندنت خودکار
set ignorecase عدم توجه به بزرگی و کوچکی حروف هنگام جستجو
set incsearch هایلاییت الگوی جستجو همزمان با تایپ آن
set smartcase عملکرد هوشمند در رابطه با حروف بزرگ و کوچک
set relativenumber شماره گذاری خطوط به صورت نسبی / به نسبت خط زیر نشانگر
set number شماره گذاری عادی
set hlsearch هایلایت کردن الگوی جستجو
set autowriteall ذخیره ی فایل به صورت خودکار
set laststatus=2 نمایش نوار اطلاعات
set noshowmode عدم نمایش تغییر مودها
set autochdir تغییر خودکار مسیر پوسته به مکان فایل باز شده در ویم
برای اطلاعات بیشتر فایل کمکی زیر را مطالعه کنید.

:h options

دو گزینه‌ی زیر از مهم‌ترین تنظیماتی هستند که باید در ویم انجام دهیم. این دو گزینه باعث هایلایت شدن کد بر اساس سینتکس و اینجام ایندنتیشن بر اساس نوع فایل می‌شوند.
syntax on
filetype plugin indent on
بنابراین یک ویم‌آرسی مختصر و مفید به شکل زیر خواهد بود:
syntax on
filetype plugin indent on

set shiftwidth=4
set tabstop=4
set noswapfile
set autoindent
set ignorecase
set incsearch
set smartcase
set relativenumber
set number
set hlsearch
set autowriteall
set laststatus=2
طبعا گزینه های بی‌شماری برای تنظیمات و شخصی‌سازی ویم وجود دارند. برخی از آن‌ها شامل: چشمک زدن نشانگر، رفتار فولد‌ها، چک‌کردن املا، انکودینگ و بسیاری دیگر می‌شوند. توضیح همه‌ی آن‌ها از حوصله‌ی این فصل خارج است، بنابراین گزینه‌های دیگر در فصل‌های مربوط به خودشان مطرح خواهند شد.

نصب پلاگین با استفاده از ویم‌پلاگ

راحت‌ترین راه نصب پلاگین در ویم، استفاده از یک پلاگین منیجر مانند ویم‌پلاگ است.

ویم از نسخه ۸ به بعد دارای سیستم مدیریت پلاگین است، اما این روش خیلی مناسب کاربران تازه کار نیست.

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

برای مثال ساختار زیر را ببینید. هر پلاگینی که در مسیر زیر قرار بگیرد توسط ویم لود خواهد شد.

.vim/pack
└── plugins
   └── start
      ├── cheat40
      ├── corrections
      ├── mdhelper
      └── vim-polyglot

این روش برای کسانی که چند پلاگین کوچک نیاز دارند روش مناسب و قابل مدیریتی است. اما برای کسانی که می‌خواهند با راحتی بیشتری پلاگین‌ها را نصب، غیرفعال، آپدیت یا پاک کنند، ویم‌پلاگ گزینه‌ی بسیار بهتری است.
شایان ذکر است که ویم دارای هیچگونه پلاگین یا قابلیتی برای سرچ کردن پلاگین‌ها از داخل خود ویم نیست و هیچ‌ برنامه‌ای جهت ساخت این‌چنین چیزی وجود ندارد.
برای نصب ویم‌پلاگ، به مخزن آن در گیت‌هاب رفته و دستور curl مربوط به سیستم خود را انتخاب می‌کنیم.
برای نصب ویم پلاگ در سیستم‌های یونیکس و لینوکس‌، دستور کرل زیر را اجرا می‌کنیم:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
دقت کنید که دستور مناسب سیستم عامل خود را انتخاب کنید. همچنین دقت کنید که دستور ویم با نئوویم فرق دارد. ( در این سایت به نئوویم پرداخته نمی‌شود. )
پس از اجرای دستور بالا، کافی‌ست که آدرس پلاگین‌های خود را بین دو عبارت
call plug#begin()
و
call plug#end()
قرار دهید. هر پلاگین موجهی که درون این دو عبارت باشند نصب و هنگام باز شدن ویم لود می‌شوند. برای موقتا غیرفعال کردن یک پلاگین کافی‌ست آن‌را در ویم‌آرسی کامنت کنیم و یرای پاک کردن آن کافی‌ست خط مربوط به آن را پاک کنیم و دستور پاک‌سازی‌ پلاگین‌ها را اجرا کنیم.

آدرس پلاگین‌ها می‌توانند آدرس http مخزن گیت یا آدرس کوتاه شده باشند. تقریبا همه‌ی پلاگین‌های ویم از ویم‌پلاگ پشتیبانی می‌کنند. اکثر پلاگین‌ها در دستورات نصب خود آدرس کوتاه شده‌ی پلاگین را برای استفاده با ویم‌پلاگ قرار داده‌اند.
برای مثال چند پلاگین مفید و کاربردی نصب می‌کنیم.

call plug#begin()

Plug 'SirVer/ultisnips' 
Plug 'honza/vim-snippets'
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'https://github.com/wolandark/vim-live-server.git', { 'do': 'sudo npm install -g browser-sync' }

call plug#end()
در کد بالا که جایی در ویم‌آرسی خود قرار می‌دهیم، نمونه‌ی استفاده از آدرس کامل مخرن و آدرس کوتاه شده قابل مشاهده است. هم‌چنین قابلیت هوک‌های بعد‌از نصب و آپدیت در سینتکس ویم‌پلاگ نیز در دو پلاگین آخر استفاده شده است.
پلاگین fzf از سازنده‌ی ویم‌پلاگ برنامه بسیاری خوبی است که در خط فرمان و در ویم بسیار مفید است. پلاگین vim-live-server که توسط نگارنده این مطلب ساخته شده، یک پلاگین لایو سرور برای ویم است که از پکیج browser-sync استفاده می‌کند.

سینتکس دستورات ساده‌ی ویم‌پلاگ به شکل زیر است.

Plug 'address in single quotes'

ویم‌پلاگ قابلیت‌های زیادی دارد که بهتر است برای یادگیری آن‌ها به گیت‌هاب پروژه مراجعه کنید.

دستورات ضروری ویم‌پلاگ اینجا مطرح خواهند شد.

پس از قراردادن آدرس پلاگین‌ها در ویم‌آرسی، فایل را ذخیره و سورس می‌کنیم
:w
:source %
(یا خارج و وارد می‌شویم)
سپس با دستور PlugInstall پلاگین‌های خود را نصب می‌کنیم.

Command Descriptionb
:PlugInstall نصب پلاگین‌ها
:PlugUpdate آپدیت پلاگین‌ها
:PlugUpgrade آپگرید ویم‌پلاگ
:PlugClean پاک کردن پلاگین‌ها

چند پلاگین مفید برای ویم

لیستی از پلاگین‌های مفید و کارآمد در زیر آورده شده است. بر اساس نیاز خود و با در نظرگیری کارکرد و تطابق پلاگین‌ها با همدیگر از بین آن‌ها انتخاب کنید. لیست کامل‌تری از پلاگین‌های ویم در سایت vimawesome قرار دارد.

  • vim-surround

    پلاگینی برای محاصره کردن توکن ها با الگو های دیگر

    Plug 'tpope/vim-surround'
  • coc.nvim

    اکستنشن Nodejs برای ویم - لود کردن اکستنشن مانند وی اس کد

    curl -sL install-node.vercel.app/lts | bash
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
  • vim-css-color

    هایلات کردن رنگ‌های CSS در ویم

    Plug 'ap/vim-css-color'
  • lightline.vim

    استاتوس لاین زیبا و کارآمد

    Plug 'itchyny/lightline.vim'
  • fzf.vim

    فازی فایندر

    Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
    Plug 'junegunn/fzf.vim'
  • vim-repeat

    تکرار همه‌چیز به آسانی

    Plug 'tpope/vim-repeat'
  • tagbar

    پلاگین مرور کردن تگ‌ها

    Plug 'majutsushi/tagbar'
  • ale

    پلاگین LSP برای ویم

    Plug 'w0rp/ale'
  • tabular

    منظم‌سازی متن بر اساس الگو یا کاراکتر، مناسب جدول و غیره ...

    Plug 'godlygeek/tabular'
  • ultisnips

    موتور مدیریت اسنیپت‌ها برای ویم

    Plug 'sirver/ultisnips'
  • vim-snippets

    اسنیپت‌های ه هونزا برای استفاده با ultisnips

    Plug 'honza/vim-snippets'
  • sparkup

    خلاصه‌نویسی HTML مانند Emmet

    Plug 'rstacruz/sparkup'
  • base16-vim

    صدها تم رنگی باکیفیت بر اساس پالت بیس۱۶

    Plug 'chriskempson/base16-vim'
  • ctrlp.vim

    یک فازی فایندر دیگر برای ویم

    Plug 'https://github.com/ctrlpvim/ctrlp.vim.git'
  • ag.vim

    ابزار فوق‌العاده‌ی ag برای ویم

    Plug 'rking/ag.vim'
  • پکیج زبان برای ویم

    Plug 'sheerun/vim-polyglot'
  • vim-eunuch

    دستورات پوسته با راحتی بیشتر از داخل ویم

    Plug 'tpope/vim-eunuch'
  • vim-visual-multi

    چندین نشانگر برای ویم مشابه سابلایم

    Plug 'mg979/vim-visual-multi', {'branch': 'master'}
  • vim-startify

    داشبرد شروع کار برای ویم

    Plug 'mhinz/vim-startify'
  • goyo.vim

    وسط‌چین کردن متن در ویم و نگارش بدون حواس‌پرتی

    Plug 'junegunn/goyo.vim'


چک کردن املای کلمات

آپشن های لازم:
set spell spelllang=en_us
set wildmode=longest,list,full
hi SpellBad ctermfg=red guifg=red
پس از قراردادن این آپشن در ویم‌آرسی، ویم بصورت خودکار واژگانی که غلط نوشته‌شده باشند را قرمز می‌کند. سپس برای پریدن به واژگان مشخص‌ شده از کلیدهای زیر استفاده می‌کنیم.
  • ]s
  • [s
پس از آن‌که نشانگر ما روی واژه‌ی مشخص شده قرار‌گرفت، با استفاده از عملیات زیر آن را اصلاح می‌کنیم:

z=

=zما را وارد منوی انتخاب واژه با املای درست می‌کند. معمولا اولین پیشنهاد درست‌ترین پیشنهاد است. سپس با زدن کلید 1 اولین پیشنهاد را انتخاب می‌کنیم و واژه جایگزین می‌شود. چنانچه انتخاب دوم، سوم الی آخر درست بودند، عدد مربوط به آن را وارد می‌کنیم.
پس به‌طور‌ خلاصه z=1 سریع‌ترین راه اصلاح املای واژگان است.
اگر از قرمز شدن واژگان هنگام کد زدن خسته شدید، می‌توانید با استفاده از یک keybinding ساده در ویم، فقط هنگام نیاز آن را فعال کنید
noremap <F6> :setlocal spell! spelllang=en_us<CR>
با قراردادن خط بالا در ویم‌آرسی، فشردن کلید F6 حالت بررسی غلط‌های املایی را فعال می‌کند. اگر بخواهید که F6 در حالت اینسرت هم این کار را انجام دهد باید یک مپینگ جدا برای آن تعریف کنید. keybinding ها در ویم،‌ اختصاصا برای مدهای مختلف تعریف می‌شوند.
nnoremap <F6> :setlocal spell! spelllang=en_us<CR>
inoremap <F6> <C-o>:setlocal spell! spelllang=en_us<CR>
همچنین با استفاده از یک تابع بسیار ساده در ویم‌اسکریپت و اختصاص یک keybinding به آن می‌توانیم فرایند ‍‍z=1 را تسریع دهیم.
function! FixSpell()
  normal! 1z=<CR>
endfunction

map gs :call FixSpell()<CR>
از این پس با زدن کلید‌های gsروی واژگان قرمز شده، می‌توانیم اولین پیشنهاد اصلاح را اعمال کنیم.



آخرین آپدیت:

۲۳ بهمن ۱۴۰۲

Dos Bah 23 02:14:34 +0330 1402


مطالب این سایت بصورت مداوم به‌روز‌رسانی می‌شوند. برای دنبال کردن مطالب این سایت را بوکمارک کنید.

جهت کمک به این پروژه و اضافه کردن مطالب و نکات خود در باره ویم، فایل راهنمای داخل مخزن را ببینید.

جهت حمایت مالی از پروژه، در صورتی که در ایران هستید، روی دکمه‌ی برام قهوه بخر کلیک کنید.

جهت ارتباط با نگارنده از طریق تلگرام یا ایمیل اقدام کنید.

این سایت از یک اسکریپت web analytics کاملا اوپن سورس، ضمن احترام به حریم خصوصی کاربر استفاده می‌کند.

Contact me

Telegram Protonmail


Chapters to write

  • vim plugins - default and vimplug way
    • vimplug covered - pack/start briefly covered
  • list of useful plugins
  • Insert mode keybindings
  • custom mappings
  • spell check
  • NETRW
  • Compiling Vim



راهنمای کمک به این پروژه

دوستداران ویم که قصد دارند در این پروژه سهیم باشند، قبل از ثبت هر نوع درخواست موارد زیر را بررسی نمایند

یک : فرمت مطالب می‌بایست مارکداون یا ویکی باشد

دو: نسخه ویم و تنظیمات آرسی یا پلاگین ها قید شوند

سه: نکاتی که وابسته به پلاگین هستند تحت عنوان همان پلاگین ثبت شوند

چهار: نکات مربوط به زبان برنامه نویسی خاصی، تحت نام همان زبان ثبت شوند

پنج: هیچ ضمانتی از طرف مالک این مخزن من‌باب ثبت و مرج شدن مطالب شما وجود ندارد

شش: مطالب تکراری نادیده گرقته خواهند شد

هفت: اگر قصد دارید مطلبی را به فصلی اضافه کنید، در فایل محتص آن فصل در پوشه ی فایل های مارکدان مخزن این کار را انجام دهید.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.