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

من قبلا یه پست نوشتم که توضیح میدم چطور ویم رو به یه ادیتور کامل تبدیل کنید.

https://vrgl.ir/Yi0F1

تنظیم vim مثل vs code (یا حتی بیشتر!)
تنظیم vim مثل vs code (یا حتی بیشتر!)
نمیدونم چرا ولی بعضی ها یه پدر کشتگی خاصی با ویم دارن و منطق شون هم معمولا اینه که وقتی همین کار ها رو راحت میشه با vs code کرد چرا باید…

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

برای شما

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

نصب neovim

نئو ویم یک ورژن پیشرفته تر از ویم اصلیه. اگر از اوبونتو یا هر لینوکس دیگه ای استفاده میکنید اینطوری نصبش کنید:

1sudo apt-get install neovim

یا اینکه:

12sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

یا اگر ویندوزی هستید:

123iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
    ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq
$env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force

با دستور :

1nvim <filename>

میتونید یک فایل رو با neovim باز کنید. اولین فایلی که باهاش باز میکنیم فایل تننظیمات هست که توی آدرس

12~/.config/nvim/init.vim (لینوکس)
~/AppData/Local/nvim/init.vim (ویندوز)

ذخیره شده. اگر فایلی به اسم init.vim وجود نداشت خودتون یکی بسازید.

نصب vim-plug

نصب در لینوکس:

12curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

نصب در ویندوز:

12iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
    ni $HOME/vimfiles/autoload/plug.vim -Force

بعد باید یه چیزایی به فایل init.vim اضافه کنید که vim-plug از اونها استفاده میکنه.

1234call plug#begin('~/.config/nvim/plugins')
 " 1
call plug#end()
" 2

بخش یک جایی هست که اسم پلاگین ها رو مینویسیم و بخش دو جایی هست که تنظیمات مربوط به پلاگین ها و خود neovim رو وارد میکنیم. config/nvim/plugins./~ هم جایی هست که پلاگین ها نصب میشن. میتونید خودتون تغییرش بدید.

وقتی خواستیم پلاگین ها رو نصب کنیم اول باید یک بار از ویم خارج بشیم و دوباره وارد بشیم و بعد دستور PlugInstall: رو بزنید تا همه پلاگین ها نصب بشه. به جای اینکه از ویم خارج بشید و دوباره وارد بشید میتونید خیلی راحت دستور s%: رو بزنید تا ویم ری‌لود بشه.

تنظیمات خود ویم

میتونید فایل init.vim من رو از اینجا ببینید

قبل از اینکه وارد بحث پلاگین ها بشیم یکم خود ویم رو باید تنظیم کنیم. همه این تنظیمات به بخش ۲ اضافه میشه.

12let mapleader = ""
inoremap jk <ESC>

کلید لیدر که برای خیلی از کار ها ازش استفاده میکنیم رو به ; تغییر دادیم که به نظرم راحت تره. توی کد بالا بین دو تا ” علامت ; قرار داره که نمیدونم چرا ویرگول حذفش میکنه. میتونید به هر حرفی تغییرش بدید. و تو خط دوم هم گفتیم که برای خروج از insert mode میخوایم از کلید های jk استفاده کنیم که خیلی راحت تر است ESC هست.

1234set number
set cursorline
set termguicolors
set signcolumn=yes

خط اول شماره خط که کنار صفحه هست رو فعال میکنه. خط دوم باعث میشه خطی که الان توش هستید هایلایت بشه تا پیدا کردنش راحت تر باشه. دو خط بعدی هم برای اینکه پلاگین هامون درست اجرا بشه لازمه.

123set tabstop=2
set shiftwidth=2
set expandtab

این خط ها کلید تب رو تبدیل به ۲ تا اسپیس میکنند. در واقع با زدن تب cursor دو حرف میره جلو. بسته به نیازتون میتونید با ۴ که فکر کنم به صورت پیشفرض باشه عوضش کنید. پس اگر میخوایم تب برابر با ۴ تا اسپیس باشه این هارو ننویسید.

1set nowrap

حتما متوجه شدید که اگر یه خط خیلی طولانی باشه اون خط میشکنه و ادامش رو تو خط بعدی نشون میده. این خط از این جلوگیری میکنه و باعث میشه مثل بقیه ادیتور ها خط ها بتونن از صفحه خارج بشن.

12set scrolloff=7
set sidescrolloff=20

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

خط دوم هم برای وقتیه که یه خط طولانی داشته باشیم و در این صورت اسکرول کردن از ۲۰ کاراکتر مونده به پایان خط شروع میشه.

12set splitbelow
set splitright

الان وقتی با دستور split: یا vsplit: صفحه رو نصف میکنیم، صحفه های جدید سمت راست یا پایین صفحه موجود باز میشن که منطقی تره.

123456set hidden
set nobackup
set nowritebackup
set cmdheight=2
set updatetime=300
set shortmess+=c

این تنظیمات هم برای پلاگین coc.nvim هست که بعدا نصب میکنیم. البته حتی اگر coc.nvim رو هم نصب نکردید پیشنهاد میکنم خط اول رو بگذارید بمونه.

میانبر ها

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

1234567891011let t:is_transparent = 1
function! Toggle_transparent_background()
  if t:is_transparent == 0
    set bg=dark
    let t:is_transparent = 1
  else
    hi Normal guibg=NONE ctermbg=NONE
    let t:is_transparent = 0
  endif
endfunction
nnoremap <leader>tt :call Toggle_transparent_background()<CR>

وقتی کلید لیدر و tt رو بزنید پس زمینه به حالت شفاف در میاد و اگر دوباره اون رو بزنید به حالت اول بر میگرده. البته این در صورتی کار میکنه که ترمینال شما هم شفاف باشه. فقط محض تنوع:)

12nnoremap <leader>vs :vsplit<CR>
nnoremap <leader>hs :split<CR>

با زدن لیدر و vs صفحه رو به صورت عمودی نصف میکنه و با زدن لیدر و hs صفحه رو به صورت افقی نصف میکنه.

1nmap <leader>tn :set nu!<CR>

با زدن لیدر و tn شماره های کنار صفحه رو فعال یا غیر فعال میکنه که کاربر های خودش رو داره. (toggle number)

123vmap <leader>y "+y
nmap <leader>y "+y
nmap <leader>p "+p

این خط ها خیلی مهمه. حتما شده که یه متن رو از جایی به غیر از ویم کپی کنید و برای paste کردندش مجبور شدید از میانبر های خود ترمینال استفاده کنید. یا اینکه بخواید یه متن رو از ویم کپی کنید و جایی به غیر از ویم paste کنید .این خط ها خیلی کمکتون میکنه. الان اگر یه متن رو توی ویم انتخاب کنید و لیدر و y رو بزنید اون متن تو کلیپبورد سیستم کپی میشه و هم جایی خواستید میتونید ازش استفاده کنید. اگر هم خواستید یه خط رو کپی کنید کافیه لیدر و yy رو بزنید. اگر لیدر و p رو بزنید متنی که توی کلیپبورد سیستم کپی شده رو توی ویم paste میکنید. آخر مقاله یه بحث در مورد register ها توی ویم میکنم که خیلی به دردتون میخوره.

12vnoremap K :move '<-2<CR>gv-gv
vnoremap J :move '>+1<CR>gv-gv

یه متن رو انتخاب کنید و J رو بزنید (j بزرگ) اون بخشی رو که انتخاب کردید یه خط رفت پایین! اگر K رو هم بزنید بخش انتخاب شده یه خط میره بالا. در واقع کمکتون میکنه که یه قسمت از کد رو خیلی راحت جابه‌جا کنید. و نیاز نباشه که اول کپیش کنید و یه جای دیگه اون رو paste کنید.

1234nnoremap <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>

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

البته برای اینکه درست کار کنه یادآوری میکنم این خط ها رو هم اضافه کنید:

12set splitbelow
set splitright

میریم سراغ بعدی

1nnoremap <leader>h :set hlsearch!<CR>

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

12vnoremap > >gv
vnoremap < <gv

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

پلاگین ها

با وجود همه اینها ویم بدون پلاگین هنوز آماده برنامه نویسی نیست. قبل از اینکه پلاگین ها رو بهتون معرفی کنم مراحل نصب پلاگین رو مرور میکنیم:

  1. اسم پلاگین رو به این صورت توی بخش یک مینویسیم:
1Plug 'windwp/nvim-autopairs'

۲. تنظیمات مربوط به پلاگین که بهتون میگم رو به بخش ۲ اضافه کنید.

۳. یک بار ویم رو باز و بسته کنید یا اینکه دستور s%: رو توی ویم بزنید تا ری‌لود بشه. ممکنه خطا هایی دریافت کنید چون هنوز پلاگین رو نصب نکردید ولی تنظیماتی رو نوشتید که مخصوص اون پلاگین هست. اون هارو نادیده بگیرید.

۴. دستور PlugInstall: رو توی ویم بزنید تا پلاگین ها نصب بشه.

۵. دفعه بعدی که ویم رو باز کردید یا اینکه دستور s%: رو زدید تغییرات اعمال شده.

زیاد در مورد تنظیمات پلاگین ها حرف نمیزنم چون خودتون توی داکیومنت هاش میتونید ببینید ولی خب تنظیمات خودم رو بهتون نشون میدم.

نصب تم

من توی مقاله قبلیم یه لیست از تم هارو معرفی کردم. میتونید یه نگاه بهش بندازید. خودم از این تم ها استفاده میکنم که میتونید یکیش رو نصب کنید:

123Plug 'ayu-theme/ayu-vim'
Plug 'ghifarit53/tokyonight-vim'
Plug 'lifepillar/vim-gruvbox8'

بعد باید فعالش کنید. مثلا من تم ayu رو فعال میکنم:

123set bg=dark
let ayucolor="mirage"
colorscheme ayu

بعضی از تم ها هم حالت روشن دارند هم تاریک خط اول مطمئن میشه که از حالت تاریک استفاده میکنیم. همچنین بعضی تم ها چند تا حالت دارن مثل ayu. تو داکیومنت هاش احتمالا نوشته که چطور از یه حالت خاص استفاده کنید. خط دوم مربوط به همینه. و تو خط سوم هم که خود تم رو فعال میکنیم.

نصب treesitter

این پلاگین تجربه خیلی بهتری از syntax highlighting رو بهتون میده:

سمت چپ بدون treesitter هست و سمت راست با treesitter
سمت چپ بدون treesitter هست و سمت راست با treesitter

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

نصب:

1Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}  " We recommend updating the parsers on update

نکته ای که وجود داره اینه که این پلاگین مثل چنتا از پلاگین هایی که بعدا معرفی میکنم با زبان lua نوشته شده. در واقع یکی از فرق های ویم با نئو ویم هم اینه که نئو ویم علاوه بر vimscript از lua هم پشتیبانی میکنه. حتی میتونید کل تنظیمات رو با زبان lua انجام بدید که من هم همین کار رو کردم ولی موضوع این پست نیست. به صورت کلی میشه گفت پلاگین هایی که با lua نوشته شدن سریعتر هستند. البته لزوما اینطور نیست. چیزی که برای ما مهمه اینه که بعضی از پلاگین ها برای فعال شدن نیاز به یکم‌ lua دارند. راه حلش خیلی سادست. کافیه بعد از چیز هایی که توی بخش “تنظیمات خود ویم” آوردم این خط هارو اضافه کنید:

1234567891011lua << EOF
require('nvim-treesitter.configs').setup {
ensure_installed = {"javascript", "typescript", "css", "html", "python", "rust"},
  highlight = {
    enable = true,
    additional_vim_regex_highlighting = false,
  },
}

" 3
EOF

اینطوری میشه توی فایل init.vim یکم lua بنویسیم. از این به بعد به این بخش میگیم بخش ۳.

وقتی این پلاگین رو نصب کردید باید برای اون رو برای زبان هایی که استفاده میکنید نصب کنید. مثلا توی ویم این دستور رو بزنید:

1:TSInstall python

مطمئن نیستم که زبان هایی که توی لیست ensure_installed نوشتم خود به خود نصب میشه یا نه ولی به صورت دستی نصب کردنشون زیاد وقت نمیبره. البته ارزشش رو داره چون کیفیت syntax highlighting رو خیلی بالا میبره.

nvim-web-devicons

1Plug 'kyazdani42/nvim-web-devicons'

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

این رو هم به بخش ۳ اضافه کنید:

1require("nvim-web-devicons").setup()

nvim-autopairs

براکت ها و پرانتز ها و … رو خود به خود میبنده.

1Plug 'windwp/nvim-autopairs'

برای فعال کردنش این رو به بخش ۳ اضافه کنید:

1require("nvim-autopairs").setup()

vim-commentary

1Plug 'tpope/vim-commentary'

با زدن gcc یک خط یا با زدن gc بخش انتخاب شده رو کامنت میکنه. البته من اون رو تغییر دادم و هرجا لیدر و c رو بزنم اون خط یا بخش انتخاب شده کامنت میشه:

12nmap <leader>c gcc
vmap <leader>c gc

nvim-colorizer.lua

1Plug 'norcalli/nvim-colorizer.lua'

هرجا یه کد رنگ دید اون رو رنگی میکنه:)

برای فعال سازیش این رو به بخش سه اضافه کنید:

1require("colorizer").setup()

bufferline.nvim

1Plug 'akinsho/nvim-bufferline.lua'

این رو به بالای صفحه اضافه میکنه:

برای فعال کردنش این رو به بخش ۳ اضافه کنید:

1require("bufferline").setup()

این یکی از دلایل اصلی سریع بودن من تو ویمه. این رو به بخش ۲ اضافه کنید:

123nnoremap <Leader>b :BufferLineCyclePrev<CR>
nnoremap <Leader>n :BufferLineCycleNext<CR>
nnoremap <Leader>d :bd<CR>

الان با لیدر + n و لیدر + b میتونم به سرعت برق بین بافر ها جا به جا بشم. با لیدر + d هم راحت یه بافر رو میبندم. اگر نمیدونید، وقتی یه فایل رو باز میکنیم یه بافر براش ایجاد میشه و با لطف این پلاگین بالای صفحه نشون داده میشه. مثل vscode

lualine.nvim

1Plug 'hoob3rt/lualine.nvim'

یکی از اینا به پایین ویم اضافه میکنه:

برای فعال کردنش این رو به بخش ۳ اضافه کنید:

12345require("lualine").setup({
    options= {
      theme= 'ayu_mirage'
    }
})

البته من تم اون رو به ayu_mirage تغییر دادم. لیست همه تم هاش رو اینجا میتونید ببینید. اگر تم پیشفرض رو میخواستید:

1require("lualine").setup()

fzf.vim

فایل هارو به سرعت بخش براتون پیدا میکنه

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

میتونید این میانبر رو به بخش ۲ اضافه کنید:

1nnoremap <leader>f :Files<CR>

الان با زدن لیدر + f یه صفحه به نمایش در میاد که توش میتونید بین فایل هاتون سرچ کنید.

nvim-tree.lua

مثل Nerd tree که شاید باهاش آشنا باشید. با nerd treed یکم مشکل داشتم به خاطر همین با nvim-tree جایگزینش کردم و عالیه.

1Plug 'kyazdani42/nvim-tree.lua'

این تنظیمات منه که میتونید به بخش ۲ اضافه کنید:

123456789101112131415let g:nvim_tree_ignore = [ '.git', 'node_modules', '.cache' ]
let g:nvim_tree_show_icons = {
    \ 'git': 0,
    \ 'folders': 1,
    \ 'files': 1,
    \ 'folder_arrows': 1,
    \ }
let g:nvim_tree_auto_open = 1
let g:nvim_tree_quit_on_open = 1
let g:nvim_tree_follow = 1
let g:nvim_tree_hide_dotfiles = 1
let g:nvim_tree_highlight_opened_files = 1
let g:nvim_tree_tab_open = 0

nnoremap <leader>e :NvimTreeToggle<CR>

الان با زدن لیدر + e همچین چیزی براتون باز میشه :

میتونید خیلی راحت بین پوشه ها جا به جا بشید . برای باز و بسته کردن یه پوشه ENTER رو بزنید. برای اضافه کردن فایل a و برای حذف فایل هم d رو بزنید. r یه فایل یا پوشه رو تغییر اسم میده و R هم خود nvim -tree رو ری‌لود میکنه تا فایل های جدید بهش اضافه بشه. خیلی راحت.

gitsigns.nvim

12Plug 'nvim-lua/plenary.nvim'
Plug 'lewis6991/gitsigns.nvim'

مثل vscode یه نوار کنار صفحه اضافه میکنه که خط های اضافه شده یا تغییر یافته رو بر اساس گیت بهتون نشون میده:

برای فعال سازی و یکم خوشگل تر کردنش این رو به بخش ۳ اضافه کنید:

123456789require("gitsigns").setup({
  signs = {
    add          = {hl = 'GitSignsAdd'   , text = '▎', numhl='GitSignsAddNr'   , linehl='GitSignsAddLn'},
    change       = {hl = 'GitSignsChange', text = '▎', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'},
    delete       = {hl = 'GitSignsDelete', text = '▎', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'},
    topdelete    = {hl = 'GitSignsDelete', text = '▎', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'},
    changedelete = {hl = 'GitSignsChange', text = '▎', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'},
  },
})

coc.nvim

این مهم ترین پلاگین منه که امکانات مهمی از جمله تکمیل کد، go to definition ، مرتب کردن import ها و نشون دادن ارور ها و فرمت کردن فایل هنگام ذخیره شدن رو انجام میده.

برای اینکه این پلاگین کار کنه باید node.js روی سیستم تون نصب باشه که البته خیلی آسونه.

تنظیمات زیادی میشه روی این پلاگین انجام داد که نمیتونم همش رو بهتون توضیح بدم و اصلا نیاز هم نداره. کافیه برید به اینجا و از بین تنظیمات مختلف اونهایی که به دردتون میخوره رو اضافه کنید.

به نظرم اینها رو حتما باید داشته باشید:

1234567891011121314151617181920212223242526" Use <c-space> to trigger completion.
if has('nvim')
  inoremap <silent><expr> <c-space> coc#refresh()
else
  inoremap <silent><expr> <c-@> coc#refresh()
endif

" Make <CR> auto-select the first completion item and notify coc.nvim to
" format on enter, <cr> could be remapped by other vim plugin
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
                              \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

" GoTo code navigation.
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)

" Use K to show documentation in preview window.
nnoremap <silent> K :call <SID>show_documentation()<CR>

" Highlight the symbol and its references when holding the cursor.
autocmd CursorHold * silent call CocActionAsync('highlight')

" Add `:OR` command for organize imports of the current buffer.
command! -nargs=0 OR   :call     CocAction('runCommand', 'editor.action.organizeImport')

معنی این خط ها هم کاملا مشخصه. مثلا خط آخر دستور OR: رو به ویم اضافه میکنه که import ها رو مرتب میکنه. یا مثلا چند تا خط اول باعث میشه با زدن کلید کنترل و اسپیس، منو تکمیل کد نشون داده بشه. یا مثلا اگر روی یه متغیر یا تابع کلید K رو بزنید، توی یه منو شناور تایپ یا امضا اون متغیر یا تابع رو نشون میده. توصیه میکنم حتما اینجا رو ببینید. دستور های خیلی مفیدی پیدا میکنید.

یه کار خوبی که میتونید انجام بدید هم اینه که تو همون پوشه ای که init.vim هست یه فایل به اسم coc-settings.json بسازید و این هارو بهش اضافه کنید:

12345678{
    "coc.preferences.formatOnSaveFiletypes": ["*"],
    "prettier.tabWidth": 4,
    "diagnostic.errorSign": "",
    "diagnostic.warningSign": "",
    "diagnostic.infoSign": "",
    "diagnostic.hintSign": "",
}

چند تا از آیکون هارو تغییر دادم و فرمت خودکار فایل رو فعال کردم.

بعد از اینکه نصبش کردید باید یک سری پلاگین مربوط به خود coc.nvim رو نصب کنید. نصبشون به این صورت هست که توی ویم دستور زیر رو میزنید و خودشون نصب میشن:

1:CocInstall <name>

مثلا برای پشتیبانی از جاوااسکریپت و تایپ اسکریپت این پلاگین رو باید نصب کنید:

1:CocInstall coc-tsserver

به همین ترتیب پیشنهاد میکنم پلاگین های زیر رو هم نصب کنید:

1234coc-json
coc-css
coc-prettier
coc-eslint

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

صحبتی در مورد LSP

توی نسخه ۵. نئو ویم پشتیبانی از LSP بهش اضافه شد. LSP یا language server protocol یه پروتوکل هست که ویژگی هایی مثل go to definition و تکمیل کد و خیلی چیز های مهم توی برنامه نویسی رو تعریف میکنه. یک سری language server داریم (مثل tsserver که بالاتر نصبش کردیم) که ویژگی های مهم یه زبان یا یه کتابخانه رو به یه ادیتور اضافه میکنند. برای اینکه از این language server ها استفاده کنید باید یه LSP client داشته باشیم که دقیقا چیزیه که نئو ویم توی نسخه ۵. اضافه کرده.

نکته اینه که این قضیه مال خیلی وقت پیش نیست و LSP خود ویم یکم جای کار داره و در حال توسعه هست. این رو به عنوان کسی بهتون میگم که خیلی روی تنظیم کردنش وقت گذاشته ولی بازم تجربه coc.nvim رو بهم نداد. همچنین منابع کمی هم براش وجود داره پس ما ازش استفاده نکردیم. قبل از این نسخه نئو ویم coc.nvim همه این امکانات رو به نئو ویم اضافه میکرد. coc.nvim یکم فراتر از یه LSP client هست و امکانات بیشتری رو بهش اضافه میکنه در ضمن خیلی راحت تر و خیلی سریع هست. پس نیاز نیست فعلا سراغ LSP نئو ویم برید چون coc.nvim رو داریم:) البته اگر دوست داشته باشید تو یه پست جدا میگم چطور LSP رو تنظیم کنید و حتی چطور از زبان lua برای نوشتن تنظیمات ویم استفاده کنید.

توضیحی در مورد رجیستر های ویم

رجیستر ها در واقع یه جا هایی هستند که میشه توشون چیزی ذخیره کرد. مثلا وقتی یه متن رو تو ویم کپی میکنید توی دو تا رجیستر ذخیره میشه: رجیستر پیشفرض و رجیستر ۰.نکته اینه که وقتی یه متن رو حذف میکنیم فقط توی رجیستر پیشفرض ذخیره میشه. از این یه استفاده جالب میشه کرد.

حتما براتون پیش اومده که یه متن رو بخواید با یه متن دیگه جا به جا کنید. خب اول میرید متنی که میخواید جایگزین کنید رو کپی میکنید، بعد اون متن به درد نخور رو حذف میکنید و بعد p رو میزنید و انتظار دارید که متنی که کپی کردید paste بشه ولی اینطور نیست و دوباره همون متنی که حذف کردید paste میشه چون داریم از رجیستر پیشفرض استفاده میکنیم و با حذف کردن متن اون رو توی رجیستر پیشفرض ذخیره کردیم. ولی متنی که کپی کردید همچنان توی رجیستر 0 هست و میتونید ازش استفاده کنید. کافیه به جای p دستور 0p” رو بزنید. الان متنی که کپی کردیم paste میشه چون از رجیستر 0 استفاده کردیم. یه استفاده دیگه از رجیستر ها رو هم قبلا دیدیم که این سه تا خط بودند و کارشون اینه که کپی کردن و paste کردن رو به جای رجیستر پیشفرض از کلیپبورد سیستم یا یه جورایی رجیستر سیستم انجام بدن:

123vmap <leader>y "+y
nmap <leader>y "+y
nmap <leader>p "+p

فقط یه نکته جانبی بود که امیدوارم به دردتون بخوره. شاید خوندن این هم خالی از لطف نباشه.


امیدوارم این مطلب به دردتون خورده باشه و تا حدی اشتباهاتی که تو مقاله قبل کردم رو جبران کرده باشم. یه سری پلاگین دیگه هم بود که ازش استفاده میکنم ولی نخواستم خیلی مطلب طولانی بشی. از اینجا میتونید فایل فایل init.vim من رو ببینید. اگر نگاهی به مقاله قبل هم بیندازید ممکنه چنتا پلاگین خوب پیدا کنید. از ویم لذت ببرید:)

شاید از این ها هم خوشتون بیاد:

https://vrgl.ir/lOVp3

چرا باید از tiling window manager استفاده کنیم؟ + راهنمای شروع با leftwm

به فکر سرمایه‌گذاری هستی؟

با هر سطحی از دانش در سریع‌ترین زمان با آموزش گام به گام، سرمایه گذاری را تجربه کن. همین الان میتونی با لینک زیر ثبت نام کنی و ۱۰ درصد تخفیف در کارمزد معاملاتی داشته باشی

ثبت نام و دریافت جایزه
ممکن است شما بپسندید
نظر شما درباره این مطلب

آدرس ایمیل شما منتشر نخواهد شد.