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

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

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

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

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

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

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


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


کلید‌های اساسی حرکت در ویم این‌ها هستند:
  • 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+ws -- اسپلیت کردن صفحه به صورت افقی

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

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

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

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

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


  • 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
برای یادگیری ذخیره‌سازی تنظیمات ویم، به فصل ۱۶ مراجعه کنید.
همچنین برای دیدن تمام تم‌های رنگی ویم به سایت زیر مراجعه کنید:

🔗 Vim Colorschemes

برای درست دیده شدن رنگ ها در ترمینال، لازم است تا تنظیماتی را انجام دهید.

ابتدا متغیر زیر را در فایل بش آر سی خود قرار دهید:
export TERM=xterm-256color

سپس در تنظیمات ویم‌آرسی خود، تم ویم را به شکل زیر معین کنید:
set background=dark
" Inspect $TERM instead of t_Co
if &term =~ '256color'
	" Enable true (24-bit) colors instead of (8-bit) 256 colors.
	if has('termguicolors')
		let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
		let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
		set termguicolors
		set mouse=a
		colorscheme catppuccin_mocha
	endif
endif

" Settings for GVim
if has('gui_running')
	set mouse=a
	set guicursor+=a:blinkon0
	set guifont=Fira\ Code\ 12
	colorscheme catppuccin_mocha
endif
در بلاک کد بالا، نام تم مورد نظر شما روبه‌روی عبارت colorscheme قرار خواهد گرفت.
همچنین دقت کنید که اگر از تم روشن استفاده می‌کنید، مقدار خط اول را از dark به light تغییر دهید.
بلاک دوم مختص تنظیمات GVim است. در این بلاک فونت Fira Code نیز برای GVim معین شده است.

image

image

image

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

image

🔗 Mitra

image

image

فونت مورد استفاده در ویم، کاملا به فونت ترمینال شما بستگی دارد. به‌همین خاطر باید فونت مورد نظر خود را در تنظیمات ترمینال خود معین کنید.
برای مثال در ترمینال XTerm که تنظیمات آن در فایل Xresources انجام می‌شوند، بلاک زیر فونت Roboto را تعریف می‌کند.
XTerm*faceName: RobotoMonoNerdFont
XTerm*faceSize: 13
xterm*faceSize1: 10
xterm*faceSize2: 11
xterm*faceSize3: 14
xterm*faceSize4: 16
xterm*faceSize5: 18
xterm*faceSize6: 20
xterm*faceSize7: 22
xterm*faceSize8: 24
xterm*faceSize9: 26
اما در GVim امکان تنظیم فونت در ویم‌آرسی وجود دارد.
set guifont=Fira\ Code\ 12
بک اسلش برای فونت‌هایی که در نام آن‌ها فاصله وجود دارد ضروری است.

تغییر شکل نشانگر در مودهای مختلف

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

let &t_SI = "\<Esc>[6 q"
let &t_SR = "\<Esc>[4 q"
let &t_EI = "\<Esc>[2 q"
حالا نشانگر ما در حالت اینسرت به شکل خط صاف |، در خالت نرمال به شکل بلاک مستطیلی و در حالت جایگزینی replace mode به شکل ـ خواهد بود.

image
image
image

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

یکی از قابلیت‌های قدرتمند ویم، دارا بودن یک نوع فرمان 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 نمایش تعداد مچ‌ها و عدم جایگزینی
آرگومان های خط فرمان ویم، آپشن هایی هستند که برای تغییر عمل کرد ویم در هنگام باز کردن آن از ترمینال، می توانید مقابل نام دستور ویم قرار دهید. در جدول زیر تعداد زیادی از این آرگومان ها برای شما با توضیحات فارسی قرار داده شده است.

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

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

OptionDescription
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حالت ویرایش فایل‌های باینری
-Cvi حالت هماهنگی با ادیتور
-ddiff باز کردن ویم در حالت دیف , برای مقایسه فایل‌ها
-Eباز کردن ویم در مود ارتقا یافته ی اکس
-Fباز کردن ویم با تنظیمات فارسی، این گزینه دیگر وجود ندارد
-hنمایش پیام کمکی
-mغیر فعال کردن امکان ایجاد تغییر
-Nvi خاموش کردن تطابق با
-Rread 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
من اینجا از کاراکتر | برای نشان دادن نیم فاصله استفاده می کنم.

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

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

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

vim ~/.vimrc

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

optionDescription
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
طبعا گزینه های بی‌شماری برای تنظیمات و شخصی‌سازی ویم وجود دارند. برخی از آن‌ها شامل: چشمک زدن نشانگر، رفتار فولد‌ها، چک‌کردن املا، انکودینگ و بسیاری دیگر می‌شوند. توضیح همه‌ی آن‌ها از حوصله‌ی این فصل خارج است، بنابراین گزینه‌های دیگر در فصل‌های مربوط به خودشان مطرح خواهند شد.

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

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

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

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

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

شایان ذکر است که ویم دارای هیچگونه پلاگین یا قابلیتی برای سرچ کردن پلاگین‌ها از داخل خود ویم نیست و هیچ‌ برنامه‌ای جهت ساخت این‌چنین چیزی وجود ندارد.

برای نصب ویم‌پلاگ، به مخزن آن در گیت‌هاب رفته و دستور 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 'https://github.com/wolandark/browser-sync.git', { 'do': 'npm install browser-sync' }

call plug#end()
در کد بالا که جایی در ویم‌آرسی خود قرار می‌دهیم، نمونه‌ی استفاده از آدرس کامل مخرن و آدرس کوتاه شده قابل مشاهده است.

سینتکس دستورات ساده‌ی ویم‌پلاگ به شکل زیر است. Plug 'address in single quotes' <\code>

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

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

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

CommandDescriptionb
: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روی واژگان قرمز شده، می‌توانیم اولین پیشنهاد اصلاح را اعمال کنیم.


آخرین آپدیت:

۲۱ بهمن ۱۴۰۲

Sha Bah 21 18:24:03 +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
  • spell check
  • cursor shapes
  • custom mappings
  • NETRW
  • Compiling Vim
  • tcl (maybe)