تنظیم vim مثل vs code (یا حتی بیشتر!)

تنظیم vim مثل vs code (یا حتی بیشتر!)

نمیدونم چرا ولی بعضی ها یه پدر کشتگی خاصی با ویم دارن و منطق شون هم معمولا اینه که : وقتی همین کار ها رو راحت میشه با vs code کرد چرا باید ویم یاد بگیریم؟دلیل برای یادگیری ویم زیاده اما جدا این مسائل، همونطور که vs code ویژگی های خاص خودش رو داره ویم هم ویژگی های منحصر به فرد خودش رو داره که حداقل تو دل من جای vs code رو میگیره. مشکلی که همیشه با ویم بوده و هست اینه که یادگیری اون یکم پشتکار میخواد. دلیل اکثر ادم ها برای یاد نگرفتن ویم.مشکل دوم اینه که ویم از همون اول یک کد ادیتور کامل نیست و خیلی از امکاناتی که برای برنامه نویسی واجب هست رو به صورت پیشفرض نداره و باید خودمون بهش اضافه کنیم. ولی مسئله اینه که خیلی ها نمیدونند ویم رو تا چقدر میشه شخصی سازی کرد. به جرات میگم خیلی بیشتر از vs code. خیلی ها نمیدونند چه امکانات شگفت انگیزی میشه به ویم اضافه کرد. بعضی از اونها حتی تو vs code هم وجود نداره.این پست راهنمای قدم به قدم من برای ساخت یک سوپر کد ادیتور از ویم است.من از لینوکس برای این آموزش استفاده میکنم ولی تقریبا همه چیز توی ویندوز و مک یکسانه. فقط شاید نصب دو سه تا از ابزار ها نیاز به یکم سرچ تو اینترنت داشته باشه. کسی که بخواد از ویم استفاده کنه از دو تا سرچ کوچیک نمیترسه :)نئو ویم یک ورژن پیشرفته تر از ویم اصلیه. اگر از اوبونتو یا هر لینوکس دیگه ای استفاده میکنید اینطوری نصبش کنید:sudo apt-get install neovimیا اینکه: sh -c ‘curl -fLo &quot${XDG_DATA_HOME:-$HOME/.local/share}&quot/nvim/site/autoload/plug.vim –create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim’یا اگر ویندوزی هستید:iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni &quot$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim&quot -Forceبا دستور :nvim <filename>میتونید یک فایل رو با neovim باز کنید. اولین فایلی که باهاش باز میکنیم فایل تننظیمات هست که توی آدرسpath : ~/.config/nvim/init.vim (لینوکس)path : ~/AppData/Local/nvim/init.vim (ویندوز)ذخیره شده. اگر فایلی به اسم init.vim وجود نداشت خودتون یکی بسازید. برای اینکه راحت تر پلاگین ها رو نصب کنید به یک پلاگین منیجر خوب مثل vim-plug نیاز داریم.نصب در لینوکس:curl -fLo ~/.vim/autoload/plug.vim –create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vimنصب در ویندوز:iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni $HOME/vimfiles/autoload/plug.vim -Forceبعد باید یه چیزایی به فایل init.vim اضافه کنید که vim-plug از اونها استفاده میکنه.call plug#begin(‘~/.vim/plugged’)
&quot 1

call plug#end()
&quot 2بخش یک جایی هست که اسم پلاگین ها رو مینویسیم و بخش دو جایی هست که تنظیمات مربوط به پلاگین ها و خود neovim رو وارد میکنیم. بعد با دستور:PlugInstallهمه پلاگین ها رو نصب میکنیم. پلاگین ها همونطور که توی خط یک میبینید توی آدرس ~/.vim/pluggedنصب میشه.اینکه حروف فارسی توی ویم جدا از هم نشون داده میشه واقعا بزرگترین مشکل اون برای ماهاست. خیلی گشتم تا راه حلی برای این پیدا کنم و فهمیدم به عوامل مختلف بستگی داره. از جمله فونتی که استفاده می کنید و ترمینال تون. بهترین روشی که تونستم این مشکل رو باهاش حل کنم اضافه کردن این به بخش دو بود::set termbidiالبته هنوز کمی مشکل داره ولی بازم خیلی بهتره. قبلش این شکلی بود:قبلو بعد شد این: بعدهمچنین تو اینترنت بعضی ها گفتند که با ترمینال konsole که به صورت پیشفرض روی لینوکس هایی که دسکتاپ KDE دارند نصب هست بهتر عمل میکنه. البته میتونید راحت روی هر لینوکسی نصبش کنید.به هر حال اگه با فارسی خیلی کار دارید و با راه حل های بالا کارتون راه نیفتاد از طرف تیم vim از شما معذرت خواهی میکنم و توصیه میکنم از vs code با پلاگین ویم استفاده کنید. من که با وجود این مشکلات همچنان از ویم استفاده میکنم :)اگه با neovim توی یک فایل بنویسیم ) علامت پرانتز بسته به صورت خودکار اضافه نمیشه. از پلاگینی به اسم auto-pairs استفاده میکنیم. توی بخش یک این رو بنویسید: Plug ‘jiangmiao/auto-pairs’بعد neovim رو یک بار ببندید و دوباره باز کنید یا دستور %so: رو بزنید. بعد دستور:PlugInstallرو بزنید. وقتی پلاگین نصب شد یک بار neovim رو ببندید و دوباره باز کنید یا دستور %so: رو بزنید و حالا میبینید که وقتی مینویسیم ) به صورت خودکار ( به اون اضافه میشه.این فرایند رو برای همه پلاگین ها تکرار میکنیم ولی دیگه اینقدر توضیح نمیدم.یک file explorer عالی. میتونید توی پوشه ها جست و جو کنید و فایل مورد نظر رو باز کنید، فایل جدید بسازید، فایل ها رو حذف کنید و خلاصه همه چی.این رو به بخش یک اضافه کنید:Plug ‘preservim/nerdtree’و همون مراحل قبل. دقیق یادم نیست که کلید پیشفرض برای باز و بسته کردن nerdtree چیه ولی میتونید با اضافه کردن این به بخش دو که تنظیمات باشه، با ctrl + m اون رو باز و بسته کنید:map <C-m> :NERDTreeToggle<CR>چیز های زیاد دیگه هم هست که توی داکیومنت هاش نوشته و من نمیخوام این مطلب رو زیادی طولانی کنم. ولی فایل init.vim خودم رو آخر مقاله میگذارم و میتونید اونها رو ببینید.نمیشه که هر بار فایلی رو خواستیم یک ساعت تو nerdtree دنبالش بگردیم. fzf این امکان رو برامون فراهم میکنه که بین فایل ها جست و جو کنیم و سریع تر اون ها رو پیدا کنیم.Plug ‘junegunn/fzf’, { ‘do’: { -> fzf#install() } }
Plug ‘junegunn/fzf.vim’میتونید این رو هم به تنظیمات اضافه کنید تا با کلید Ctrl + p در واقع fzf فعال بشه و بتونید بین فایل سرچ کنید.nnoremap <C-p> :Files<CR> این پلاگین کامنت کردن رو اسون میکنه. ++ رو بزنید تا همون خط کامنت بشه. میتونید چند خط رو انتخاب کنید و بعد ++ رو بزنید تا همه کامنت بشه.Plug ‘preservim/nerdcommenter’و این رو هم به بخش دو اضافه کنید (البته میتونید به جای ++ هر چی خواستید بگذارید):vmap ++ <plug>NERDCommenterToggle
nmap ++ <plug>NERDCommenterToggleتوصیه میکنم بخش settings توی صفحه گیتهاب پلاگین رو بخونید چون تنظیماتی داره که شاید دوست داشته باشید اضافه کنید.تکمیل خودکار کد ها بدون شک مهم ترین ویژگی ای هست که یک کد ادیتور باید داشته باشه. از خیلی از اشتباهات تایپی جلو گیری میکنه و سرعت رو افزایش میده. پلاگین های مختلفی برای این کار وجود داره مثل:این پلاگین ها کار نسبتا پیچیده ای رو انجام میدن و هر کدوم نیاز به یک سری پیش نیاز ها دارند. چون قبلا با coc.nvim کار کردم و نسبت به اون دو تا نصب خیلی آسون تری داره این رو توضیح میدم. Plug ‘neoclide/coc.nvim’, {‘branch’: ‘release’}بعد از اینکه دستور PlugInstall: رو زدید و پلاگین بالا نصب شد به راحتی دستور زیر رو اجرا کنید::CocInstall coc-json coc-tsserverنصب اون دو تا رو ببینید دلتون میخواد خودکشی کنید. باور کنید. به همین قانع باشید :)برای اینکه بهتر کار کنه توصیه میکنم برید به داکیومنت ها و از بخش Example vim configuration کل فایلی که برای مثال آورده رو کپی کنید توی بخش دو. این به خاطر اینه که یه مشکل کوچیک با این پلاگین داشتم و حوصله نداشتم دنبال راه حل بگردم ولی بعد از این حرکت خشن مشکل حل شد:) و بعد با این صحنه زیبا رو به رو میشید:اگر با زبان هایی غیر از جاوااسکریپت سر و کار دارید باید language server اونها رو نصب کنید. مثلا::CocInstall coc-pyrightلیست کاملش اینجاست.ویم یه ادیتور زشت عجوزه نیست. البته در حالت پیشفرض هست ولی میتونید از توش سیندرلا در بیارید.تم محبوب من چیزی نیست جز gruvbox:Plug ‘morhetz/gruvbox’این رو هم باید به تنظیمات اضافه کنید تا فعال بشه:colorscheme gruvboxاین تم ها هم هستند. برای من در حد سیندرلا نیستند ولی خب …DraculaPlug ‘dracula/vim’, { ‘as’: ‘dracula’ }و این رو هم یادتون نره به بخش دو اضافه کنید:colorscheme draculaBase-16Plug ‘chriskempson/base16-vim’این رو هم به بخش دو اضافه کنید:set termguicolors
let base16colorspace=256
colorscheme base16-default-darkاگه با رنگ ها مشکل داشتید توصیه میکنم نگاهی به داکیومنت ها بندازید.MolokaiPlug ‘tomasr/molokai’اینم به بخش دو اضافه کنید:colorscheme molokai
let g:rehash256 = 1OnehalfPlug ‘sonph/onehalf’, {‘rtp’: ‘vim/’}و این رو به بخش دو اضافه کنید:colorscheme onehalfdarkvim-onePlug ‘rakr/vim-one’و اینم به بخش دو اضافه کنید:colorscheme one
set background=dark &quot for the dark versionدر حالت پیشفرض شماره های خط نشون داده نمیشه. اگر دوست دارید فعال بشه این رو بخش دو اضافه کنید:set numberپلاگین vim-devicons آیکون رو به nerdtree اضافه میکنه.Plug ‘ryanoasis/vim-devicons’نکته مهم اینه که باید فونت ترمینال تون حتما یکی از nerd fonts باشه. از اینجا یکی رو دانلود کنید (پیشنهاد من Fira code هست) و روی سیستم تون نصبش کنید. بعد برید توی تنظیمات ترمینال و فونت اون رو به چیزی که نصب کردید تغییر بدید.البته به دلایلی که نمی دونم این پلاگین برای من کار نمیکنه که باعث ناراحتیه.این پلاگین یه نوار خوشگل پایین صفحه میگذاره که اطلاعاتی در مورد اینکه تو چه فایلی هستید، کجای فایل هستید یا اینکه تو چه مودی هستید(مثلا insert یا select) به شما میده.Plugin ‘vim-airline/vim-airline’
Plugin ‘vim-airline/vim-airline-themes’تم های خیلی خیلی زیادی داره که میتونید از بینشون انتخاب کنید. اگر مثل من گوشه ها به جای مثلثی بودن مستطیلی بود:این رو به بخش دو اضافه کنید تا درست بشه:let g:airline_powerline_fonts = 1بی نهایت پلاگین ویم برای سرعت بخشیدن به برنامه نویسی وجود داره. بعضی اونها حتی شبیه اون توی vs code وجود نداره. این پلاگین ها رو آموزش نمیدم و خودتون میتونید با صرف چند دقیقه در داکیومنت ها اون ها رو یاد بگیرید. بعضی از اونها رو تو این مقاله بیشتر توضیح دادم: https://vrgl.ir/jdukM emmet-vimهمون پلاگینی که باعث میشه وقتی تو vs code بنویسیم classname. و اینتر رو بزنیم تبدیل به این بشه.<div class=&quotclassname&quot></div>یا وقتی اول فایل html بنویسیم ! و اینتر بزنیم قالب اولیه فایل html رو برامون بنویسه!vim-surroundبگذارید یک مثال بزنم. فرض کنید کلمه hello رو یه جایی توی فایل داریم و میخوایم اون رو ببریم تو تگ h1. کافیه cursor یا نشانگر کیبورد رو ببرید روی کلمه مورد نظر و دستور <ysiw<h1 رو بزنید. اینطوری میشه:<h1>hello</h1>همین کار رو میتونید با ‘ و ” و {} و () و هر چیز دیگه ای انجام بدید. یا میتونید اسم تگ ها رو به یک دستور عوض کنید و خیلی کار های دیگه. حتما داکیومنت هاش رو بخونید.vim-prettierعده کمی هستند که هنوز دوست دارن خودشون کد هاشون رو فرمت کنند. بقیه این وظیفه رو به prettier میسپارند که یه پلاگین خوب برای ویم هم داره. با دستور زیرمیتونید نصبش کنید:Plug ‘prettier/vim-prettier’, {
‘do’: ‘yarn install’,
‘for’: [‘javascript’, ‘typescript’, ‘css’, ‘less’, ‘scss’, ‘json’, ‘graphql’, ‘markdown’, ‘vue’, ‘yaml’, ‘html’] }اگر بخواهید فایلی که توش هستید فرمت بشه باید دستور :Prettier رو بزنید. راه آسون تری هم هست که تو پلاگین بعد میبینید.اندازه پیشفرض tab به اندازه هشت تا اسپیس هست. اگه دوست دارید چهار تا باشه این ها رو اضافه کنید::set tabstop=4
:set shiftwidth=4
:set expandtabvim-aleمخفف Asynchronous Lint Engine. داکیومنت هاش رو بخونید تا بفهمید یعنی چیه :)Plug ‘dense-analysis/ale’و این رو به بخش دو اضافه کنید:let g:ale_fix_on_save = 1به محض اینکه فایل رو ذخیره کنید خودش فرمت میشه. دقیق نمیدونم که این پلاگین بدون پلاگین بالایی کار میکنه یا نه. ولی به هر حال. مهم اینه کار ما رو راحت میکنه.vim-visual-multiفکر کنم از رو گیف های بالا متوجه درجه خفن بودنش شدید.Plug ‘mg979/vim-visual-multi’از اینجا یاد میگیرید چطور ازش استفاده کنید.vim-easymotionPlug ‘easymotion/vim-easymotion’با این پلاگین میتونید مثل یه نینجا توی فایل حرکت کنید. ساده ترین کاربردش برای من اینه که دو بار ; رو بزنم که با خط زیر به عنوان leader انتخابش کردم(بخش دو):let mapleader = &quot&quotبعدکلید w رو می زنم و این پلاگین تمام “اول کلمات” رو بهم نشون میشه. به هر کدوم یک یا دو حرف نسبت داده شده که پر رنگ تر هست و وقتی اون حرف رو بزنم میرم به همونجا !الان اگه z; رو بزنم میرم به خط 40. این پلاگین خیلی خیلی امکانات بیشتری داره. هنوز میتونیم کار هایی انجام بدیم که کار کردن با ویم رو برامون آسون تر کنه.کلید ctrl رو خیلی استفاده می کنیم ولی قبول دارید برای فشرندش انگشت کوچیکه باید 180 درجه بزنه؟ چرا با caps lock که استفاده کمتری داره عوضش نمیکنید؟ باور کنید کارتون خیلی راحت و سریع تر میشه. هر وقت خواستید با حروف بزرگ بنویسید هم به جای caps lock شیفت رو بگیرید. به جایی بر نمیخوره.برای این کار برید توی تنظیمات>کیبورد>advanced و از بخش caps lock behavior گزینه caps lock is also a ctrl رو انتخاب کنید. شاید توی سیستم شما فرق کنه ولی کلیت اش همینه.برای خروج از insert mode و همه مد های ویم باید از esc استفاده کنیم. این هم به عنوان یک دکمه پر کاربرد یکم دوره. میتونید به جاش از کلید های jk استفاده کنید. اگر j و k رو پشت سر هم بزنید همون کار رو انجام میده. البته به شرط اینکه این رو به فایل vimrc اضافه کنید(بخش دو):inoremap jk <ESC>میتونید از jj هم استفاده کنید.همین دو تا کار تغییر بزرگی توی زندگی تون ایجاد میکنه.خیلی از تنظیماتی که خودم دوست دارم رو توضیح ندادم چون دیگه خیلی طولانی میشد. ولی اگر کنجکاو هستید از اینجا میتونید اون ها رو ببینید.فکر کنم تا همینجا کافی باشه. اگi بعدا چیز دیگه ای یادم اومد بهش اضافه میکنم. و شاید خوندن پست زیر هم براتون جالب باشه. البته در محفل ویم دوستان حرف زدن از vs code گناهه. من رو ببخشید. شوخی کردم. ما vs code رو خیلی دوست داریم. (مثل رامبد جوان که ایران رو خیلی دوست داشت) https://vrgl.ir/OkTir

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *