برنامه نویسی

راه اندازی Vim برای PHP و لاراول در سال 2024

من بیشتر قصد دارم سفر خودم را در راه اندازی Vim (نه Neovim!) برای PHP و laravel مستند کنم. با خیال راحت دنبال کنید.

ما قصد داریم از Vim+VimPlug+CoC.nvim استفاده کنیم، بنابراین باید nodej و npm را نصب کنیم. ناگفته نماند که باید Vim8+ را نیز داشته باشید. نسخه فعلی Vim در حال نوشتن این مقاله Vim-9.1 است

پس بیایید از یک تمیز شروع کنیم ~/.vimrc

اجازه می دهد این بلوک را که به طور خودکار VimPlug را نصب می کند، در بالای ما قرار دهیم ~/.vimrc.

function! VimplugInstaller()
  let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
  if empty(glob(data_dir . '/autoload/plug.vim'))
    silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
    autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
  endif
endfunction

call VimplugInstaller()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چندین پلاگین ضروری دنبال می شود:

call plug#begin()

Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'https://github.com/preservim/tagbar.git'
Plug 'vim-php/phpctags', {'for':'php'}
Plug 'honza/vim-snippets'
Plug 'SirVer/ultisnips'
Plug 'tpope/vim-commentary'
Plug 'sheerun/vim-polyglot'
Plug 'jwalton512/vim-blade'

call plug#end()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مهمترین آنها، coc.nvim است. بقیه برای بهبودهای مختلف است که به زودی به آنها خواهیم پرداخت، اما قبل از انجام، اجازه دهید چند افزونه برای coc.nvim تعریف کنیم و سایر پلاگین ها را پیکربندی کنیم.

"===[Coc.nvim]==="
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#_select_confirm() : "\u\"
" use  to trigger completion and navigate to the next complete item
function! CheckBackspace() abort
  let col = col('.') - 1
  return !col || getline('.')[col - 1]  =~# '\s'
endfunction

inoremap <silent><expr> <Tab>
      \ coc#pum#visible() ? coc#pum#next(1) :
      \ CheckBackspace() ? "\" :
      \ coc#refresh()
inoremap <expr><s-tab> coc#pum#visible() ? coc#pum#prev(1) : "\"

" Enhanced  for pairs
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
            \: "\u\\=coc#on_enter()\"

" Disable < expansion for pairs
autocmd FileType * let b:coc_pairs_disabled = ["<"]

"===[ Coc-Explorer ]==="
" set up coc-explorer to open in the current directory
let g:coc_explorer_global_mirror = 0
let g:coc_explorer_disable_default_keybindings = 1
let g:coc_explorer_global_root = 'current'
nnoremap <space>e <Cmd>CocCommand explorer<CR>

"===[ Coc Global Extensions ]==="
let g:coc_global_extensions = [
  \ 'coc-html',
  \ 'coc-css',
  \ 'coc-pairs',
  \ 'coc-emmet',
  \ 'coc-explorer',
  \ 'coc-phpactor',
  \ 'coc-laravel',
  \ 'coc-blade'
\ ]

" 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 `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)
"
" List code actions available for the current buffer
nmap <leader>ca  <Plug>(coc-codeaction)

nnoremap <silent> K :call ShowDocumentation()<CR>
function! ShowDocumentation()
  if CocAction('hasProvider', 'hover')
    call CocActionAsync('doHover')
  else
    call feedkeys('K', 'in')
  endif
endfunction

" Add `:Format` command to format current buffer
command! -nargs=0 Format :call CocActionAsync('format')
" Formatting selected code
vmap <leader>f  <Plug>(coc-format-selected)

" coc-pairs
" disable characters for a specified filetypes
autocmd FileType markdown let b:coc_pairs_disabled = ['txt']
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد بالا، تکمیل برگه، جفت‌های خودکار، کاوشگر فایل coc-explorer و دیگر کلید‌بایدینگ‌ها را پیکربندی می‌کند تا بیشترین بهره را از coc.nvim ببرید.
در قسمت coc global extension ها را تعریف می کنیم که به صورت خودکار نصب شوند. من تصمیم گرفتم از phpactor استفاده کنم، ممکن است آن را تغییر دهید coc-intelephense.

بیایید قطعات را نیز پیکربندی کنیم:

ما می‌توانیم اسنیپت‌هایمان را با coc.nvim نیز مدیریت کنیم، اما من استفاده از UltiSnips را برای آن انتخاب می‌کنم.

"===[ SNIPPETS ]==="
"Use Ctrl j key to trigger the snippets, default was TAB but that conflicts with
"The Completion trigger see :h keycodes to change this to sth else 
"Use Ctrl j and k to move visually within the snippet that was just triggered
"Ctrl l lists the available snippets
let g:UltiSnipsExpandTrigger=''
let g:UltiSnipsListSnippets=''
let g:UltiSnipsJumpForwardTrigger=''
let g:UltiSnipsJumpBackwardTrigger=''
let g:copypath_copy_to_unnamed_register = 1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Vim را ذخیره کرده و از آن خارج شوید و دوباره آن را باز کنید و منتظر بمانید تا افزونه ها و افزونه ها نصب شوند.

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

اکنون اجازه می‌دهیم افزونه‌های coc را پیکربندی کنیم.

صادر کند :CocConfig از حالت فرمان Vim دستور دهید و موارد زیر را در داخل فایل قرار دهید.

{
    "suggest.noselect": true,
    "explorer.icon.enableNerdfont": true,
    "explorer.file.reveal.auto": true
    "languageserver": {
        "phpactor": {
            "command": "phpactor",
            "args": ["language-server"],
            "trace.server": "verbose",
            "filetypes": ["php"]
        }
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر تصمیم گرفتید از نصب محلی phpactor استفاده کنید، فقط می توانید آن را حذف کنید coc-phpactor با :CocUninstall coc-phpactor و اصلاح کنید ~/.vim/coc-settings.json برای اضافه کردن مسیری به فایل اجرایی phpactor و حذف کامل بلوک سرور زبان.

{
    "phpactor.enable": true,
    "phpactor.path": "/usr/bin/phpactor",
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کلیدبندی ها:

تنها کلید‌بایدینگ‌هایی که باید بدانید، علاوه بر کلید‌بندی‌های معمول Vim، عبارتند از:

کلید عمل
Tab تکمیل
gd تعریف
gy تعریف نوع
gi پیاده سازی
گرم منابع
[g diagnostics prev
]g تشخیص بعدی
حدود اقدامات کد
ک اسناد شناور
f (در حالت بصری) کد قالب
Ctrl-j Snippet را بزرگ کنید و به Placeholder بعدی بروید
Ctrl+k به مکان‌گردان قبلی بروید
Ctrl-l فهرست اسنیپت ها
Space-e Explorer را باز کنید

اکنون باید یک راه اندازی کارآمد و راحت برای کار با PHP و لاراول داشته باشیم.

اجازه می دهد تا چندین چیز دیگر را برای راحتی راه اندازی کنیم

موضوع:

این افزونه ها را به لیست افزونه ها اضافه کنید و با آن نصب کنید :PlugInstall پس از تامین منابع ~/.vimrc.

Plug 'ryanoasis/vim-devicons'
Plug 'catppuccin/vim', { 'as': 'catppuccin' }

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Vim را برای استفاده از تم محبوب catppuccin راه اندازی کنید.

"===[ Theme ]==="
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 = "\[38;2;%lu;%lu;%lum"
        let &t_8b = "\[48;2;%lu;%lu;%lum"
        let &t_TI = ""
        let &t_TE = ""
        set termguicolors
        set mouse=a
        colorscheme catppuccin_mocha
    endif
    else
        colorscheme catppuccin_mocha
        let &t_TI = ""
        let &t_TE = ""
endif

if has('gui_running')
    set mouse=a
    set guicursor+=a:blinkon0
    set guifont=FiraCodeNerdFont\ 12
    colorscheme catppuccin_mocha
endif

"===[ Curosr Shape ]==="
let &t_SI = "\[6 q"
let &t_SR = "\[4 q"
let &t_EI = "\[2 q"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بلوک بالا باعث می‌شود vim از رنگ‌های termgui (در ترمینال با قابلیت termgui) استفاده کند و از اشکال مکان‌نمای مختلف برای حالت‌های مختلف استفاده کند.
مطمئن شوید که $TERM گزارش های متغیر xterm-256color.

در تصویر زیر می توانید phpactor، coc-explorer و tagbar را در حال کار مشاهده کنید.
من یک خطا در نحو گذاشتم تا به شما نشان دهم عیب‌یابی درون خطی چگونه است.

توضیحات تصویر

بهتر است با مستندات و دستورات coc.nvim آشنا شوید.

مثلا دویدن :CocDiagnostics یک کشو با تمام خطاهای یافت شده توسط coc.nvim باز می شود.

توضیحات تصویر

با فشار دادن اینتر روی هر مورد، به خط حاوی خطا می‌روید.

من نتوانستم یک پلاگین phpdoc مناسب برای Vim پیدا کنم، اما علاوه بر آن، این راه اندازی بسیار موثر است. تنها چیزهایی که می توانید به آن اضافه کنید، پلاگین های دلخواه شما برای مقابله با git و یافتن فازی است.

می توانید پیکربندی کامل من را در github (احتمالاً در شاخه Devel) Woland’s Vim پیدا کنید.

اگر نکته یا سوالی دارید، لطفا نظر خود را بنویسید.

آیا می توانم از این با Nvim استفاده کنم؟
بله، شما فقط باید تمام کدها را در آن قرار دهید ~/.config/nvim/init.vim

چرا از Nvim با lspconfig و cmp و غیره استفاده نمی کنید؟
زیرا پیکربندی زمان بیشتری طول می‌کشد و نتایج بهتر از چیزی نیست که coc به راحتی ارائه می‌کند.

نوشته های مشابه

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

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

دکمه بازگشت به بالا