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

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