Back
Featured image of post [Phần 7] Vim là cái quái gì? - Autocomplete code như thế nào

[Phần 7] Vim là cái quái gì? - Autocomplete code như thế nào

VSCode là 1 IDE rất phổ biến, bởi vì nó hỗ trợ rất nhiều ngôn ngữ, cả VSCode và LSP cho VSCode đều do Microsoft phát triển nên cực kỳ ngon rồi. Trong Vim cũng có rất nhiều giải pháp cho LSP, sau khi thử vài cái thì mình thấy `COC.nvim` là hợp lý và mạnh nhất so với mấy cái còn lại.

Language Server Protocol (LSP):

VSCode là 1 IDE rất phổ biến, bởi vì nó hỗ trợ rất nhiều ngôn ngữ, cả VSCode và LSP cho VSCode đều do Microsoft phát triển nên cực kỳ ngon rồi.

Trong Vim cũng có rất nhiều giải pháp cho LSP, sau khi thử vài cái thì mình thấy COC.nvim là hợp lý và mạnh nhất so với mấy cái còn lại.

Cài đặt [COC.nvim](https://github.com/neoclide/coc.nvim)

vim ~/.vimrc

call plug#begin()
  ...
  Plug 'neoclide/coc.nvim', {'branch': 'release'}
  ...
call plug#end()

:w để lưu, xong gõ tiếp:

:source ~/.vimrc
:PlugInstall

Vậy là đã cài đặt xong COC.nvim, giờ tiếp tục cấu hình

Cài đặt LSP cho javascript/typescript

Chạy lệnh này trên vim của bạn:

:CocInstall coc-json coc-tsserver

Hoặc bạn có thể để vào trong file ~/.vimrc để dễ dàng cài đặt nơi khác, dưới đây là toàn bộ extensions mình đang xài

let g:coc_global_extensions = [
  \ 'coc-ultisnips',
  \ 'coc-json',
  \ 'coc-tsserver',
  \ 'coc-html',
  \ 'coc-css',
  \ 'coc-yaml',
  \ 'coc-highlight',
  \ 'coc-eslint',
  \ 'coc-git',
  \ 'coc-prettier',
  \ 'coc-flutter',
  \ 'coc-angular',
  \ 'coc-pyright',
  \ ]

Bạn có thể xem danh sách các extensions của COC.nvim tại đây: https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions

Cấu hình autocomplete, auto import file:

COC.nvim cũng hỗ trợ autocomplete sau khi cài đặt LSP, cũng như auto import file vô

Cách map key như sau:

"" Map Ctrl + Space để show list functions/biến autocomplete
inoremap <silent><expr> <c-space> coc#refresh()

"" Tự động import file của biến/function khi chọn và nhấn Tab
inoremap <expr> <TAB> pumvisible() ? "\<C-y>" : "\<C-g>u\<TAB>"

Khá đơn giản phải không, thực tế phần auto import hoạt động rất hiệu quả, mình thấy ngon hơn VSCode ở chỗ nhanh hơn nhiều.

Cấu hình phím tắt go to definition…

COC.nvim hỗ trợ các tính năng auto complete, go to definition… rất tốt, bạn đưa phần này vào ~/.vimrc

"" Go to definition ở tab mới
nmap <silent> gd :call CocAction('jumpDefinition', 'tab drop')<CR>
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)

Hiển thị document cho function, biến:

nnoremap <silent> K :call <SID>show_documentation()<CR>

function! s:show_documentation()
  if (index(['vim','help'], &filetype) >= 0)
    execute 'h '.expand('<cword>')
  elseif (coc#rpc#ready())
    call CocActionAsync('doHover')
  else
    execute '!' . &keywordprg . " " . expand('<cword>')
  endif
endfunction

Highlight word chỗ con trỏ đang đứng:

autocmd CursorHold * silent call CocActionAsync('highlight')

Xem tiếp » [Phần 8] Vim là cái quái gì? - Prettier

Lập trình dễ òm.xyz