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()
Gõ :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