TL,DR
Sau thời gian sử dụng Neovim được 8 tháng, chủ yếu trong công việc hằng ngày, tôi thấy rằng năng suất làm việc của cá nhân tôi đã tăng lên đáng kể. Cho nên lần này tôi muốn làm 1 bài viết để hướng dẫn các bạn cách cài đặt Neovim
Tuy nhiên, hướng dẫn này chỉ dừng lại ở việc hướng dẫn cài đặt. Còn về việc sử dụng thì tôi sẽ chuyển tới 1 bài viết khác. Vì cách sử dụng của Neovim hoàn toàn khác biệt và khó để làm quen
Chuẩn bị môi trường
Những công cụ mà tôi sử dụng trong hướng dẫn này như sau
- Window Terminal
- Powershell 7
- Oh-my-posh (optional)
- Git
- Nodejs - tôi sử dụng npm và yarn để cài đặt 1 số tool
- Scoop - một công cụ quản lý app tển Windows
- Choco - tương tự như scoop, tôi sử dụng để cài đặt
llvm
Nếu bạn chưa cài đặt những công cụ trên, có thể xem hướng dẫn này của tôi https://www.youtube.com/watch?v=sx1SeW-QFdk. Nhớ là, bỏ qua bước cài đặt Neovim trong video nhé.
Cài đặt Neovim
Trước hết, ta cần cài đặt Neovim đã. Mở terminal lên và gõ đoạn command sau
$ winget install Neovim.Neovim
Sau khi đoạn command này chạy xong thì các bạn đã cài đặt Neovim thành công.
Kiểm tra đường dẫn cài đặt
Tắt Terminal đi và khởi động lại. Tại cửa sổ terminal, gõ lệnh bên dưới và ấn Enter
$ nvim
Cửa sổ neovim hiện ra như bên dưới chứng tỏ bạn đã cài đặt thành công
Việc tiếp theo, khá quan trọng, bạn cần phải kiểm tra đường dẫn tới thư mục cài đặt của Neovim đang ở đâu. Bằng cách gõ câu lệnh dưới đây ngay trong cửa sổ Neovim.
:echo stdpath('config')
Kết quả in ra có thể như hình dưới. Đường dẫn này được sử dụng để đặt thư file config của chúng ta, nên các bạn hãy note đường dẫn này
Giờ thì hãy thoát ra bằng cách gõ lệnh :q
hoặc :q!
để ta có thể bắt đầu bước cài đặt
Lưu ý, lần đầu tiên thư mục
C:\Users\<user>\AppData\nvim
sẽ không tồn tại. Do đó, các bạn cần mở trực tiếp đường dẫn cha, và tạo mới 1 thư mục tên lànvim
Cấu trúc thư mục
Để bắt đầu quá trình cài đặt được suôn sẻ, tôi sẽ giải thích cho các bạn về cấu trúc thư mục cài đặt của Neovim trước
📂 .\nvim
├── 📄 init.lua -- file init này sẽ được load đầu tiên khi bạn mở Neovim lên
├── 📂 lua
│ ├── 📄 base.lua
│ ├── 📄 map.lua
│ ├── 📄 plugins.lua
│ └── 📄 theme.lua
└── 📂 plugin
├── 📄 <file-name>.lua
Như bạn có thể thấy, cấu trúc thư mục mà tôi tạo ra cũng khá đơn giản. Về cơ bản, file init.lua
sẽ được load tự động khi bạn mở Neovim lên.
Bên trong file init.lua
tôi sẽ load toàn bộ các file trong thư mục /lua/*.lua
lên. Còn những file bên trong thư mục /plugin/*.lua
thì sẽ được Neovim tự động load ngay sau init.lua
Mục đích của việc tách ra 2 thư mục /lua
và /plugin
là
📂/lua
- được dùng để chứa những cài đặt như keymap, options và danh sách plugin cho dễ quản lý📂/plugin
- còn thư mục này thì được sử dụng để viết những đoạn code cài đặt cho từng plugin
Bắt đầu cài đặt
Rồi, giờ thì các bạn hãy sử dụng IDE hiện tại của mình (nếu bạn chưa quen các thao tác trong Neovim) hoặc dùng chuột để tạo cấu trúc file như trên nhé.
Sau đó, tạo mới file /nvim/init.lua
và cài đặt như sau.
-- init.lua
require('base') -- load file `/lua/base.lua`
require('plugins') -- load file `/lua/plugins.lua`
require('map') -- load file `/lua/map.lua`
Cài đặt /lua/base.lua
Cài đặt đầu tiên, ta sẽ cùng setup 1 số option cơ bản của Neovim. Các bạn mở file /lua/base.lua
và paste vào cài đặt bên dưới.
-- Trong neovim, kí tự \ mặc định được gọi là <leader>
-- tuy nhiên, vì nó quá xa để nhấn, nên ae dev hay đổi kí tự này
-- sang kí tự <space> để gần hơn
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
-- Thay đổi encoding mặc định của file thành utf-8
vim.scriptencoding = 'utf-8'
vim.opt.encoding = 'utf-8'
vim.opt.fileencoding = 'utf-8'
-- Hiển thị số dòng trong file
vim.opt.nu = true
vim.opt.rnu = true
-- Cài đặt thụt dòng mặc định là 2
vim.opt.shiftwidth = 2
vim.opt.tabstop = 2
-- Thụt dòng tự động khi ấn enter
vim.opt.ai = true
vim.opt.si = true
-- Tự động xuống dòng nếu kí tự trên dòng đó quá dài
vim.opt.wrap = true
vim.opt.cursorline = true
vim.opt.termguicolors = true
-- Giảm thời gian thực thi lệnh xuống 250ms
-- mặc định là 500ms
vim.opt.timeoutlen = 250
vim.opt.timeout = true
vim.opt.updatetime = 250
-- Khi tìm kiếm, không phân biệt chữ hoa, chữ thường
-- Ex: name NaME namE
vim.o.ignorecase = true
vim.o.smartcase = true
Bên trên là 1 số cài đặt mà tôi hay sử dụng, các bạn có thể sử dụng lại toàn bộ, hoặc một phần tùy vào ý thích
Để kiểm tra xem mỗi cài đặt này là gì, các bạn có thể save lại file và mở lại neovim sẽ thấy sự thay đổi. Hoặc các bạn có thể dùng lệnh :w
để lưu file và sau đó gõ lệnh :so
để Neovim cập nhật thay đổi trong cài đặt.
Cài đặt lazy.nvim
😴
Lazy.nvim - là một công cụ quản lý plugins cho Neovim. Để cài đặt nó, bạn cần đảm bảo Git được cài đặt.
Giờ thì hãy mở file /lua/plugins.lua
và paste đoạn code sau vào.
-- /lua/plugins.lua
-- Lưu lại đường dẫn tới file lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
-- Nếu đường dẫn trên ko tồn tại, thì dùng Git clone nó về
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
Cài đặt Tokyonight
theme🎨
Để có tí cảm hứng làm việc, ta sẽ cài đặt Tokyonight
theme trước, cho có chút cảm hứng làm việc 😁.
Các bạn mở file /lua/theme.lua
và đặt đoạn cài đặt sau vào.
-- /lua/theme.lua
-- Lua cho phép bạn return mà
-- không cần đặt bên trong 1 function hay class nào cả
return {
"folke/tokyonight.nvim",
lazy = false,
priority = 1000,
config = function()
-- sử dụng lệnh `colorscheme` để load theme theo tên
-- nếu bạn muốn load theme khác thì truy cập vào repo gốc nhé
-- repo gốc: https://github.com/folke/tokyonight.nvim#-usage
vim.cmd([[colorscheme tokyonight-storm]])
end,
}
Bước tiếp theo, các bạn quay trở lại file /lua/plugins.lua
và load /lua/theme.lua
để sử dụng
-- /lua/plugins.lua
-- ....
vim.opt.rtp:prepend(lazypath)
local theme = require('theme')
require("lazy").setup({
theme,
})
Lưu lại file, tắt Neovim và mở lại, nó sẽ tự động tải theme về và cài đặt. Nếu thành công, kết quả sẽ như ảnh dưới. Gõ lệnh :q
để tắt màn hình cài đặt.
Cài đặt nvim-treesitter
Plugin tiếp theo, cũng là 1 trong những plugin cần thiết nhất mà ta cần cài đặt. Đó là nvim-treesitter
, nó là một công cụ để phân tích cú pháp của file, hỗ trợ tốt hơn cho việc hiển thị màu sắc của cú pháp, ...
Với các bạn sử dụng Windows, ta cần phải cài đặt C compiler trước. Vì Treesitter
sử dụng sử dụng C để thực hiện quá trình phân tích của nó.
Mở Terminal trong chế độ Admin và cài đặt C compiler như sau
$ choco install llvm
Sau khi cài đặt thành công, bạn có thể tiến hành bước tiếp theo là cài đặt Treesitter
. Tạo mới file /plugin/tree-sitter.lua
và cài đặt như sau
-- /plugin/tree-sitter.lua
-- load treesitter, lưu lại trạng thái vào biến `status`
local status, treesitter = pcall(require, 'nvim-treesitter.configs')
-- nếu `status` trả về false, ngừng, ko làm gì hết
if not status then return end
treesitter.setup {
-- cài đặt 1 số định dạng file hay sử dụng
-- bạn có thể tìm danh sách file ở đây
-- repo: https://github.com/nvim-treesitter/nvim-treesitter#supported-languages
ensure_installed = {'lua', 'rust', 'tsx', 'typescript', 'vim', 'prisma'},
-- các cài đặt bên dưới thì cứ để mặc định thôi là được
highlight = {enable = true},
indent = {enable = true},
auto_install = false
}
Tiếp theo, mở file /lua/plugins.lua
và cài đặt như sau
-- /lua/plugins.lua
--...
vim.opt.rtp:prepend(lazypath)
local theme = require('theme')
require("lazy").setup({
theme,
{
'nvim-treesitter/nvim-treesitter',
build = ':TSUpdate',
},
})
Giờ các bạn lưu lại toàn bộ file, đóng neovim. Sau đó, mở lại neovim. Nó sẽ tự động cài đặt Treesitter và những ngôn ngữ ta đã liệt kê ở trong file plugin/tree-sitter.lua
Chú ý, khi mở lại neovim, tốt nhất các bạn chỉ sử dụng lệnh
nvim
để mở. Và không mở thêm bất kì file nào khác vì có thể sẽ gặp phải lỗi khi Treesitter đang cài đặt ngôn ngữ.
Cài đặt lualine
Lualine - được sử dụng để hiển thị 1 số thông tin cần thiết như: chế độ chỉnh sửa hiện tại của Neovim là gì?, tên git branch, tên file, encoding của file, loại ngôn ngữ của file, ....
Cách cài đặt cũng khá đơn giản, các bạn tiếp tục mở file /lua/plugins.lua
và bổ sung
-- /lua/plugins.lua
-- ...
local theme = require('theme')
require("lazy").setup({
-- ....
-- Status line
{
'nvim-lualine/lualine.nvim',
opts = {
options = {
icons_enabled = false,
theme = 'tokyonight',
component_separators = '|',
section_separators = '',
}
}
},
})
Ok rồi nhé, giờ các bạn chỉ khởi động lại Neovim để nó tự động cài đặt là được.
Kết
Đến hiện tại, tôi đã hướng dẫn các bạn các cài đặt Neovim và cài đặt 1 số plugins ban đầu. Ở hướng dẫn tiếp theo, tôi sẽ tiếp tục hướng dẫn các bạn cài đặt Sidebar và Tab.
Hi vọng hướng dẫn này giúp bạn hiểu được cách cài đặt neovim và plugins của nó. Hẹn gặp lại các bạn ở bài viết tiếp theo