سلام! ببخشید این مدت طولانی نبودم درگیر خیلی کارها بودم و ممکنه نبود من طولانی تر هم بشه به هر حال امیدوارم عذر خواهی بنده رو بپذرید.
در این مقاله قرار ادیتور ویم رو شخصی سازی و زیبا کنیم که بتونید ازش نهایت استفاده رو ببرید پس با من همراه باشید:)
( در این پست از شما انتظار میره بلد باشید چطور با ویم کار کنید و اینکه هر کلید و یا رجکس چیکار میکنه ( regex) )
خب اول بزارید بگم قیافه اصلی ویم چه شکلیه :
بله درست دید ویم در حالت دیفالت به این شکله و یک تکست ادیتور ساده است و وقتی شما با سیستم های یونیکس بیس کار میکنید انتظار میره که حداقل ویم رو بلد باشید!!
حالا ویم وقتی تنظیم بشه چه شکلی میشه ؟؟ این شکلی میشه وتبدیل به یک ادیتور تمام اعیار میشه :
هرچند که این با سلیقه بنده ست و انتظار نمیره که شما این رو دوست داشته باشید.ولی خب همینم برای شروع خوبه!
خب این آموزش در درجه اول برای کسانی هستند که سیستم لینوکسی دارن!!
اول از همه شما باید فایل vimrc رو در دایکتوری هوم خودتون بسازید: (به صورت زیر)
touch ~/.vimrc
اگر دقت کرده باشید این فایل مخفی هست .حالا که فایل رو ساختید با دستور زیر چک کنید که این فایل موجود هست یا نه :
file ~/.vimrc
یا هر طور دیگه صلاح میدونید.اگر این فایل وجود داره از و چیزی داخلش نیست؛ لازم نیست یکی دیگه بسازید و اگر هم در داخل فایل اصلی خودتون تنظیمات ست کردید فقط کافیه از فایل اصلی خودتون یک کپی بگیرید که تنظیمات قبلی خودتون رو داشته باشید:)
حالا که فایل رو ساختیم وقتش رسیده که یکم شخصی سازیش کنیم تا بهتر بشه برای اینکار با خود ادیتور ویم فایل رو به صورت زیر باز کنید:
vim ~/.vimrc
حالا باید چند تا خط رو به این ادیتور اضافه کنیم.برای اینکار وارد insert مود بشید.
من دوست دارم مثل یک ادیتور واقعی شماره خط رو کنار هر خط بنویسه. پس بنویسید:
set number
اگر دوست ندارید میتونید با دستور :
set nonumber
خط هایی که میبینید رو بردارید.حالا برای اینکه ببینیم کار میکنه یا نه یک بار فایل رو سیو میکنیم و ازش خارج میشیم و دوباره وارد میشیم(دیگه این روند رو هر بار توضیح نمیدم ).و میبیند داره کار میکنه اگر نکرد میتونید از زیر همین پست از من کمک بگیرید.
برای اینکه اون خطی که هستید هایلایت بشه دستور زیر رو اضافه کنید:
set cursorline
حالا میبنید که خطی که توش هستید یک حالت هایلایت بهش اضافه میکنه.
این چند تا خط هم اختیاری اگه دوست داشتید میتونید اضافه کنید:
:set tabstop=4 :set expandtab
:set softtabstop=4
:set shiftwidth=4
:set textwidth=80
:set showmatch
خب من دوست دوست ندارم برای سرچ کردن از حروف بزرگ و کوچک استفاده کنم پس برای همین دستور زیر هم وارد کنید:( مطمعنا شما هم دوست ندارید!!!)
:set ignorecase
خب وقتشه ک یکم به کد های خودمون ایندنت (indent) اضافه کنیم برای همین دستور های زیر هم اضافه کنید:
:set autoindent
خب کد بالا باعث میشه که اتوماتیک ایندنت کنه.
من برنامه نویسه زبان سی هستم ( سی خالی !! نه سی پی پی !!)برای همین برای خودم ایندنت های زبان سی رو فعال کردم ( کد زیر ) :
:set cindent
اینطور میتونیم از ایندنت های زبان سی هم استفاده کنیم.
خب حالا اگر دقت کرده باشید وقتی میخوایم ویم رو به دوقسمت عمودی یا افقی تقسیم کنیم یک حالت مزخرف و بدی میده برای همین کد زیر رو استفاده کنید:
:set splitbelow
:set splitright
بهتر شد نه؟؟ قراره بهتر از این هم بشه !!
خب تا اونجایی که یادم بود یک ادیتور سینکس هایلایتینگ داره درست ؟ پس ما هم اون رو به ویم اضافه میکنیم که از حالت سرد و خشک بودنش در بیاد!(پلاگین برای همچین حالتی هست اما نمیخوایم زیاد ویم رو سنگین کنیم ) کد زیر رو بزنید:
:syntax enable
خب ما قرار پلاگین و اینجور چیز ها هم به ویم اضافه کنیم و پس یه جورایی باید به ویم بفهمونیم که باید پلاگین های خودش رو بر روی فایل ها فعال کنه پسسسسس کد زیر لطفا!!!:
:filetype plugin on
خب برای اینکه ویم بتونه به صورت دقیق از utf-8 استفاده کنه و بتونیم یکی از پلاگین هایی دارم رو فعال کنیم کد زیر رو بزنید:
:set encoding=UTF-8
خب این ها برای فعال سازی چند تا فیچر ساده و از پیش پا افتاده بودن حالا وقتشه بریم سراغ میانبر ها ( keybindings )
ما میتونیم در ویم از دستورات ترمینال( دقت کنید گفتم دستورات ) هم بهره ببیریم البته باید با کامند زیر این دستور رو استفاده کنیم:
:!
خب این خیلی وقتگیره وقتی بهش دقت کنید میفهمید که وقت ندارید هر دقیقه اون دستور رو بزنید پس برای همین برای اینکار من یه میانبر درست کردم :
map <Leader><Leader> :!
خب اول باید بدونید کلید لیدر چیه؟؟؟؟ کلید لیدر در ویم در حالت دیفالت ویم کلید لیدر بک اسلش هست (\)
برای همین اگر دوبار پشت سر هم بک اسلش رو بزنیم میتونیم از دستورات ترمینال بهر ببریم.
گاهی اوقات شاید لازم باشه ویم رو به صورت عمودی یا افقی نصف کنیم برای همین از میانبر زیر استفاده میکنیم:
nnoremap <leader>vv :vsplit<CR>
nnoremap <leader>hh :split<CR>
دستور اول با زدن کلید لیدر (\) و دوبار vv صفحه رو عمودی نصف میکنه.
دستور دوم با زدن کلید لیدر(\) و دوبار hh صفحه افقی نصف میکنه.
میانبر های دیگری هم گذاشتم که بعد از اینکه پلاگین ها رو گذاشتیم بهتون میگم چیکار کنید .
الان وقتشه بریم سراغ پلاگین های ویم !!!!من عاشق این بخشم پس بزن که بریم !
شما میتونید به صورت دستی پلاگین ها رو نصب کنید که اینکار برای آدم های تکراری و بی حوصله و بیکاره یا اینکه یه پلاگین منیجر نصب کنید که بتونید بقیه پلاگین ها رو نصب کنید!
کدومش ؟؟ پلاگین منیجر!!
ما مقداری زیادی پلاگین منیجر داریم اما به نظرم راحت ترین و سبک ترینشون vim-plug هست که خیلی فوق العاده ست.
برای اینکه بتونیم از vim-plug باید اول نصبش کنیم که خیلی ساده ست.
لینک گیتهاب ویم-پلاگ :https://github.com/junegunn/vim-plug
یا اگر هم دوست ندارید اونو بخونید بیاید خودم بهتون یاد میدم=) البته به ترتیب باید انجام بدید.
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
حالا کد های زیر رو وارد vimrc خودتون کنید
call plug#begin() call plug#end()
نکته:
خب حالا میریم پلاگین ها رو تک تک نصب میکنیم و توضیحی هم درموردشون میدم.
https://github.com/preservim/nerdtree
این پلاگین یک حالت اکسپلور بهتون میده و میتونید مثل vscode خراب شده و کند دنبال فایل های خودتون بگردید
برای فعال شدن این پلاگین رو باید اضافه کنید بین اون دو تابعی که بالاتر گفتم :
Plug 'scrooloose/nerdtree'
خب حالا وقتی دستور بالا رو بالای اون دو تابع گذاشتید فایل رو سیو کنید و از ویم خارج بشید و بعد وارد ویم بشید.
بعدش در حالت کامند مود دستور زیر رو بنویسید.تا پلاگین نصب بشه .
:PlugInstall
حالا از کجا بفهمیم پلاگین نصب شده؟؟ شما تقریبا با همچین چیزی روبرو میشید:
بعدش باید دوباره از ویم خارج بشید و وارد ویم بشید تا پلاگین فعال بشه.
راستی nerdtree یه همچین چیزیه :
خب حالا وقتشه یکم nerdtree تنظیم کنیم که به بهترین حالت ممکنه ازش استفاده کنیم!
اگر دقت کرده باشید وقتی وارد ویم میشید nerdtree درحالت عادی بسته ست و باید وارد کامند مود بشید که صداش بزنید پس کد زیر رو بزنید تا وقتی وارد ویم شدید به صورت همیشگی باز باشه ( بعد از call plug#end باید بنویسید):
autocmd VimEnter * NERDTree
حالا وقتی دوباره وارد ویم بشید میبینید که بله NERDTREE باز شده اما یه نکته منفی وجود داره ! اونم اینه که وقتی هرچیزی رو باز میکنید curser در سمت چپ یعنی روی فایل و دایرکتوری ها هستش و این خیلی آزار دهنده ست و نمیتونید هر دفعه از سر کد بپریم رویه nerdtree یا بر عکسش پس برای همین این دستور زیر رو بزنید تا درست بشه و curser رویه صفحه اصلی متمرکز بشه :
autocmd VimEnter * NERDTree | wincmd p
الان دیگه خیلی راحت curser سر جای اصلی خودشه!
خب حالا شاید یکی دوست داشت nerdtree ببنده برای چند دقیقه یا حتی بازش کنه؛ بعضی وقت ها فقط میخواید رویه کد خودتون تمرکز کنید پس برای اینکار میتونید از میانبر های زیر استفاده بکنید:(بعد از تابع )
:nnoremap <C-x> :NERDTreeClose<CR>
:nnoremap <C-c> :NERDTree<CR>
دستور اول: با زدن ctrl+x نردتری بسته میشه( خیلی سر راسته نه؟؟)
دستور دوم : با زدن دستور ctrl+c نردتری باز میشه
خب یه نکته رو یادتون باشه که من دست چپم و با سمت چپ کیبورد بیشتر کار میکنم
خب بعضی وقت ها nerdtree خیلی بزرگه و دوست دارید یکم کوچیک ترش بکیند؛برای اینکار من ازچهار تا کامند استفاده کردم که خودتون میتونید تستشون بکنید:
nnoremap <C-Up> :resize +2<CR>
nnoremap <C-Down> :resize -2<CR>
nnoremap <C-Left> :vertical resize +2<CR>
nnoremap <C-Right> :vertical resize -2<CR>
حالا میتونی صفحه تون رو بزرگ کوچیک بکنید ( با کلید های چپ و راست و بالا و پایین )خب اینم از nerdtree حالا بریم سراغ بقیه.
این پلاگین باعث میشه که پرانتز ها آکولاد و ... رنگی رنگی بشن و یه جلوه خاصی به کدتون بدن.
https://github.com/frazrepo/vim-rainbow
خب برای اینکه بتونید این پلاگین نصب کنید این دستور بین اون دو تابع بزارید :
Plug 'frazrepo/vim-rainbow'
و حالا برید مثل پلاگین قبلی نصبش کنید ومراحلی که برای نصب پلاگین گفتم نصب کنید.
در حالت عادی زیاد زیبا و قشنگ نیست اما با یکم شخصی سازی درست میشه ( من برای سی تنظیم کردم اما شما میتونید برید گیتهابش رو چک کنید):
let g:rainbow_active = 1
let g:rainbow_load_separately = [
\ [ '*' , [['(', ')'], ['\[', '\]'], ['{', '}']] ],
\ [ '*.tex' , [['(', ')'], ['\[', '\]']] ],
\ [ '*.c' , [['(', ')'], ['\[', '\]'], ['{', '}']] ],
\ [ '*.{html,htm}' , [['(', ')'], ['\[', '\]'], ['{', '}'], ['<\a[^>]*>', '</[^>]*>']] ],
\ ]
let g:rainbow_guifgs = ['RoyalBlue3', 'DarkOrange3', 'DarkOrchid3', 'FireBrick']
let g:rainbow_ctermfgs = ['lightblue', 'lightgreen', 'yellow', 'red', 'magenta']
حالا از ویم خارج بشید و دوباره وارد بشید . و میبینید که رنگی رنگی میشن پرانتز ها و...
بریم سراغ بعدی=)
باعث میشه پرانتز ها و ... وقتی باز میکنید به صورت اتوماتیک بسته بشه
https://github.com/jiangmiao/auto-pairs
مثل قبل نصبش کنید تنظیم خاصی نمیخواد خودش به صورت اتوماتیک براتون باز و بسته میکنه.
https://github.com/neoclide/coc.nvim
این پلاگین چیزی شبیه به LSP ها هست؛خودتون برید تو لینک گبتهابش متوجه میشید.
این پلاگین از بقیه پلاگین هایی که گفتم نصبش دردسر ساز تر و پیچیده تره اما از بقیه LSP ها بهتره.
حتما برید گیتهابش رو چک کنید تا دچار مشکلی نشید.
این پلاگین نیاز به nodejs داره پس اول باید nodejs رو نصب کنید؛ برای اینکار وارد ترمینال خودتون بشید و دستور زیر رو به صورت کامل بزنید ( همش رو کپی پیست کنید ):
curl -sL install-node.vercel.app/lts | bash
یا هرجور دیگه ایی که دوست داشتید nodejs رو نصب کنید.
بعدش این کد رو بین اون دو تابع بزارید:
Plug 'neoclide/coc.nvim', {'branch': 'release'}
خب حالا باید پلاگین رو نصب کنید ( همونطور که قبلا گفتم ) بعدش صبر میکنیدو وقتی هم که نصب شد از ویم خارج میشید و دوباره وارد میشید.
حالا باید سرور ها و چیز هایی که خوده coc نیاز داره و نصب کنیم برای اینکار وارد حالت کامند مود بشید و دستور زیر رو بزنید:
:CocInstall coc-json coc-tsserver
حالا صبر کنید نصب بشن و وقتی نصب شدن از ویم خارج بشید و بعد دوباره وارد بشید یا سیو کنید از ویم خارج بشید ( این بهتره ).
حالا باید وارد ترمینال بشید و وارد دایرکتوری زیر بشید:
cd ~/.vim
حالا که وارد دایرکتوری زیر شدید ببینید که فایل coc-settings.json وجود داره یا نه( به احتمال ۹۹ درصد وجود داره اگر نداشت یکی بسازید )
در این فایل زبان برنامه نویسی خودمون رو انتخاب میکنیم ؛یعنی تنظمات زبان برنامه نویسی خودمون رو اینجا درست میکنیم ( تویه لینک گیتهابش هم هست ) یعنی فقط کپی پیست!! که تویه اون لینک گیتهابی که دادم لیست زبان ها هست که شما خودتون میتونید انتخاب کنید و نصب کنید؛برای همین من زبان خاصی رو نمیگم ولی به شخصه خودم زبان های خانواده سی و bash استفاده میکنم.
بریم بعدی=)
https://github.com/ryanoasis/vim-devicons
آیکون های زیادی رو به ویم اضافه میکنه ( برای شما و من به nerdtree )
نصبه فوق العاده آسونی داره فقط باید پلاگین رو اضافه کنید بین اون دو تابع و نصبش کنید و فقط همین ( البته یه مرحله دیکه داشت اما ما اون رو از قبل انجان دادیم :) )
Plug 'nvim-tree/nvim-web-devicons'
خب حالا نصبش کنید=)
نکته!!!
شما برای کار کردن این پلاگین نیاز به یک nerdfont دارید
شما باید دستور رو بزنید در فایل تنظیمات ویم خودتون set encoding=UTF-8
خب حالا میبنید که nerdtree خیلی خوشگل شده.
بریم بعدی =)
https://github.com/ervandew/supertab
خب برای اینکه بتونید از تب استفاده بکنید برایی کامل کردن کد خودتون باید از این پلاگین استفاده کنید چرا؟؟
چون در حال عادی کامل کردن اتوماتیک کد در ویم با کلید ترکیبی ctrl+n هست !!!! =( این خیلی رو مخه پس برای همین از تب استفاده میکنیم!!
برای نصب فقط کافیه :
Plug 'ervandew/supertab'
خب حالا نصبش کنید و استفاده کنید؛ترکیب این پلاگین با coc فوق العاده خفن میشه پس حتما نصبش کنید
برای من که مشکلی نداشت و همون لحظه ازش استفاده کردم اما اگر شما دوست دارید تنظیمات دیگری رو اضافه کنید حتما برید لینک گیتهابش رو چک کنید
بریم سراغ مبحث بعدی=)
من در ویم از ۳ تم اصلی استفاده میکنم که هر ۳ تاشون فوق العاده هستند
به ترتیب میرم جلو تا بهتون نشون بدم.
dracula
molokayo
molokai
خب من به ترتیب نحوه نصب هر ۳ رو میگم:)
برای اولی فقط کافیه که این پلاگین رو بین اون دو تابع بزارید و نصبش کنید:
Plug 'dracula/vim', { 'as': 'dracula' }
خب حالا بعد call plug#end بنویسید(برای همشون ) :
colorscheme dracula
حالا برای دومی باید این پلاگین رو نصب کنید:
Plug 'fmoralesc/molokayo'
بعد بنویسید:
colorscheme molokayo
برای آخری باید این پلاگین و نصب کنید:
Plug 'tomasr/molokai'
بعد بنویسید:
colorscheme molokai
خب این ها تم ها ویم بودن ولی به جز تم باید خط status bar هم به ویم اضافه کنیم+)
من برای این خط استاتوس از ویم ایرلاین استفاده میکنم.vim-airline
https://github.com/vim-airline/vim-airline
حتما گیتهابش رو چک کنید چون تم های فوق العاده زیاد و قشنگی داره=)
برای نصبش باید بین اون دو تابع بنویسید:
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
خط اول برای اینه که پلاگین رو نصب کنیم خط بعد هم برای نصب هم ی تم های موجوده:)
خب حالا از ویم خارج بشید و بعد دوباره وارد بشید تا پلاگین فعال بشه.حالا این چند خط کد رو بزنید تا یکم بهتر بشه :
let g:airline_powerline_fonts = 2
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme='cyberpunk'
let g:airline#extensions#tabline#formatter = 'unique_tail'
خب خط یکی مونده آخر باعث میشه تم خودتون رو انتخاب کنید که من سایبرپانک گذاشتم و خط آخر هم اینه که چطور اون اطلاعات رو نشون بده ( یه همچین چیزی ) خط اول هم از پاور لاین فونت استفاده میکنه که شما باید یک بزارید ( تاثیری هم نداره )
خب حالا باید چند تا تنظیمات دیگر رو هم انجام بدیم تا دیگه همه چی بر وفق مرادمون باشه :)
به طور کلی من از تب ها بیشتر استفاده میکنم تا بافر ها!برای همین باید خیلی سریع بین تب ها جابجا بشم
در حالت عادی شما با gt و gT بین تب ها در رفت آمدید اما این خیلی بیخود و چرته!!
برای همین من همیشه با ctrl+a و ctrl + s تویه تب های جابجا میشم شما میتونید با دستور زیر این رو به ویم خودتون اضافه کنید:
nnoremap <C-a> :tabprevious<CR>
nnoremap <C-s> :tabnext<CR>
خط اول با ctrl +a به تب قبلی میرید
خط دوم با ctrl +s به تب بعدی میرید
حالا که بحث تب ها شد بگم که من دوتا کامند دیگه برای استفاده از تب ها رو دارم! یکی برای بستن تب و یکی برای درست کردن تب جدید که شما میتونید از اون ها استفاده کنید:
nnoremap <C-d> :tabnew<CR>
nnoremap <C-z> :tabclose<CR>
خط اول با ctrl + d تب جدید درست میکنه
خط دوم با ctrl+z تب رو میبنده
خب من برای اینکه ویم بتونه نوع فایل بنده رو توجه بشه از دستور زید استفاده میکنم که شما هم میتونید به فایل ویم آر سی خودتون اضافه کنید:
autocmd BufWritePre *.m,*.h,*.c,*.mm,*.cpp,*.hpp call StripTrailingWhitespace()
خب این آموزش هم تموم شد اما چند تا نکته رو به خاطر داشته باید:
پیشنهاد میکنم ین دو تا سایتی که میدم رو چک کنید خیلی برای ویم فوق العاده هستند!
اولی:
https://vimawesome.com/
میتونید هر پلاگینی که دوست داشتید توش پیدا کنید!!
دومی:
https://vimcolorschemes.com/
دنیایی از تم هست که میتونید یکی رو انتخاب کنید!!!
این هم پایان پست امروزمون امیدوارم که خوشتون اومده باشه و درضمن این پست همیشه آپدیت میشه
اگر خوشتون اومد حتما نظرتون رو بنویسید.
ایمیل من برای بازخود های شما learnerlearn485@gmail.com
اگر مشکلی بود حتما بگید!! تا راهنمایی تون کنم=)