Bài viết được sự cho phép của tác giả Huy Trần
Vãi thật, mình nhớ là mới viết một bài về Neovim 0.4 đây thôi, thế mà đã 2 năm rồi cơ à.
Phiên bản 0.5 của Neovim vừa release cách đây không lâu và chính thức trình làng rất nhiều thay đổi lớn, lớn nhất trong số đó là khả năng config bằng Lua và một loạt chức năng built-in liên quan đến LSP.
Lua Config
Với phiên bản 0.5, chúng ta đã có thể thay thế init.vim
bằng init.lua
, cơ chế load config của bản này cũng khá dễ hiểu:
- Đầu tiên là check coi có file
$HOME/.config/nvim/init.lua
không - Nếu có thì load file này
- Không có thì fallback về
$HOME/.config/nvim/init.vim
Lưu ý là Neovim sẽ chỉ load một trong 2 file trên, chứ không load cả 2.
Và không chỉ có config file, Lua còn được tích hợp sâu rộng vào toàn bộ runtime của Vim, và bạn có thể dùng nó để thay thế cho Vimscript trong mọi tình huống, từ module/plugin cho đến execute command.
Ví dụ bạn có thể chạy Ex command sau để kiểm chứng:
:lua print("Hello, Lua!!!")
Cơ chế load module của Lua cũng không phức tạp lắm, mọi file *.lua
nằm trong thư mục $HOME/.config/nvim/lua
đều sẽ được load bằng lệnh require()
, ví dụ với cấu trúc thư mục như sau:
~/.config/nvim
├── lua
│ ├── module_a.lua
│ └── big_ass_modules
│ ├── something.lua
│ └── init.lua
Ta có thể load module bằng nhiều cách khác nhau như sau:
require('module_a')
let mod_a = require('module_a')
require('big_ass_modules/something')
require('big_ass_modules.something')
-- load file big_ass_modules/init.lua
require('big_ass_modules')
Ngoài ra, chúng ta còn có thể chèn Lua script vào Vimscript thông qua khối lệnh:
lua << EOF
-- lua code here
EOF
Trong trường hợp bạn chưa có thời gian để migrate toàn bộ Vim config từ Vimscript sang Lua thì có thể dùng cách trên để vừa sử dụng Lua plugin vừa sử dụng Vimscript plugin.
Đọc thêm về Lua support trong Vim tại đây https://github.com/nanotee/nvim-lua-guide
Built-in LSP Client
Trước Neovim 0.5, có rất nhiều LSP Client plugin, mà phổ biến nhất có lẽ là coc.nvim
.
Phiên bản 0.5 tích hợp sẵn LSP Client nên chúng ta không cần dùng các plugin như coc.nvim
nữa, các bạn có thể xem qua hình bên dưới để thấy sự khác biệt giữa việc sử dụng built-in LSP Client trong Neovim 0.5 so với các plugin LSP Client khác.
Trong trường hợp của coc.nvim
thì bá đạo hơn tí, vì nó sẽ run luôn cả extension host của VSCode ở bên dưới, nhưng nhờ thế mà cho trải nghiệm gần với VSCode hơn.
Còn Built-in LSP Client của Neovim thì khá đơn giản:
Chúng ta tiết kiệm được một layer khi giao tiếp với language server, nhanh hơn hay không thì chưa biết, mình đoán là nhanh hơn, cứ so sánh với mô hình của coc.nvim
là sẽ thấy.
Ngoài ra, phiên bản 0.5 còn tích hợp Treesitter, đây là chức năng cho phép Neovim thực hiện syntax highlighting thông qua kết quả phân tích code của LSP, nên chất lượng nhận diện code để highlight sẽ tốt hơn thông thường.
Bản thân việc sử dụng built-in LSP Client cũng có rất nhiều cách cấu hình khác nhau, với các plugin hỗ trợ khác nhau. Hiện tại có các plugin hữu dụng như:
- nvim-treesitter/nvim-treesitter: Hỗ trợ syntax highlighting
- neovim/nvim-lspconfig: Bộ config mặc định dành cho LSP client
- glepnir/lspsaga.nvim: Wrapper cho built-in LSP, cung cấp thêm một số tính năng và UI cho LSP
- hrs7th/nvim-compe: Hỗ trợ Autocomplete dùng LSP (vì built-in LSP ko cung cấp chức năng autocomplete)
Ở bài sau mình sẽ hướng dẫn chi tiết hơn về cách cấu hình. Són dần ra mới câu được nhiều view.
Bài viết gốc được đăng tải tại thefullsnack.com
Có thể bạn quan tâm:
- Cách mạng 0.4 của Neovim: Floating Window
- Sử dụng ứng dụng HTTP Client của Angular v4
- Kết nối JMS Client với ActiveMQ
Xem thêm Việc làm IT hấp dẫn trên TopDev