Telescope, Nvim-tree và Bufferline là gì ❓
Để có được một IDE hoàn chỉnh, đủ dùng, thì 1 vài tính năng cần thiết cần phải có là: hỗ trợ tab, hỗ trợ menu sidebar, hỗ trợ tìm kiếm file.
- telescope.nvim: hỗ trợ việc tìm kiếm file theo tên, tìm kiếm nội dung bên trong file, ...
- nvim-tree.lua: hỗ trợ hiển thị cấu trúc thư mục, tạo mới file, folder
- bufferline.nvim: hỗ trợ hiển thị file theo dạng tab
Để bắt đầu cài đặt, bên nên đảm bảo là đã làm theo hướng dẫn của tôi ở bài viết trước
Nhắc lại chút về cách cài đặt plugin
Có thể các bạn vẫn chưa quen về cách cài đặt plugin trong Neovim. Nên tôi sẽ liệt kê thứ tự cần thực hiện có bổ sung thêm plugin hoặc thay đổi options.
Bước | Lệnh | Mô tả |
---|---|---|
1 | :w | Lưu lại thay đổi |
2 | :q | Thoát neovim |
3 | $ nvim | Khởi động lại nvim |
Các bạn có thể kết hợp lệnh cùng 1 lúc nhé. VD: thay vì viết :w
và :q
lần lượt, thì các bạn có thể viết :wq
.
Bắt đầu cài đặt thôi 🚀
Cài đặt telescope.nvim
Như đã nói ở trên, plugin này hỗ trợ việc tìm kiếm file theo tên hoặc nội dung bên trong file. Nên tôi sẽ lựa chọn nó làm plugin đầu tiên để cài đặt.
Để tăng tốc độ tìm kiếm của Telescope ta cần phải cài đặt 1 cái tool bên ngoài nữa thông qua scoop
. Với scoop
thì bạn không cần chạy trong chế độ Admin đâu nhé 🌝
$ scoop install ripgrep
Tiếp theo, mở /lua/plugins.lua
ra và thêm đoạn code sau
-- /lua/plugins.lua
require("lazy").setup({
-- ......
{
'nvim-telescope/telescope.nvim',
branch = '0.1.x',
dependencies = {
-- đây là plugin bổ sung thêm để hỗ trợ chức năng của telescope
'nvim-lua/plenary.nvim'
}
},
})
Giờ các bạn khởi động lại Neovim và đợi lazy.nvim cài đặt xong là có thể sử dụng được.
Sử dụng telescope.nvim
Để sử dụng các bạn mở Neovim và gõ lệnh
:Telescope find_files
Các bạn có thể xem danh sách câu lệnh bằng cách, gõ :Telescope, ấn phím <Space>
và sau đó ấn <Tab>
. Kết quả sẽ hiển thị giống như hình bên dưới
Cài đặt keymap (phím tắt) cho telescope
Sử dụng qua một chút chắc các bạn thấy oải đúng không 😆. Kiểu cứ mỗi lần lại phải gõ lệnh, tìm tìm, mệt.
Thế nên giờ tôi sẽ hướng dẫn các bạn cài đặt phím tắt, đảm bảo sẽ nhanh gọn hơn nhiều.
Tạo mới file /plugin/telescope.lua
nhé. Nó sẽ tự load sau file init.lua
, cái này tôi nhắc lại thôi.
-- /plugin/telescope.lua
local status, telescope = pcall(require, 'telescope')
if not status then return end
-- load cái thư viện builtin của telescope ra
-- trong này có 1 tá các function cho chúng ta lựa chọn
local builtin = require('telescope.builtin')
-- gõ `;f` ở chế độ Normal để hiển thị danh sách file
vim.keymap.set('n', ';f', builtin.find_files, {})
-- tương tự, gõ `;r` để tìm kiếm nội dung trong file
vim.keymap.set('n', ';r', builtin.live_grep, {})
-- cứ như thế nhé, các bạn có thể thay đổi kí tự tùy thích
vim.keymap.set('n', ';fb', builtin.buffers, {})
vim.keymap.set('n', ';gbr', builtin.git_branches)
vim.keymap.set('n', ';gst', builtin.git_status)
vim.keymap.set('n', ';gcm', builtin.git_commits)
vim.keymap.set('n', ';xx', builtin.diagnostics)
Các sử dụng cơ bản như sau, tôi lấy ví dụ khi bạn ấn ;f
- ngay khi mở lên, bạn có thể nhập tên file để tìm kiếm luôn
- ấn Enter để chọn file,
- ấn Esc để thoát chế độ nhập
- ấn i để quay trở lại chế độ nhập liệu
- hoặc ấn Esc lần nữa để thoát hẳn Telescope
Cài đặt nvim-tree.lua
Plugin tiếp theo, ta sẽ cài đặt trong bài viết này là nvim-tree
. Tiếp tục mở file /lua/plugins.lua
và thêm vào đoạn code sau
-- /lua/plugins.lua
require("lazy").setup({
-- .....
{
'nvim-tree/nvim-tree.lua',
dependencies = {
-- plugin này hỗ trợ nvim-tree hiển thị icon
-- tương ứng với từng loại file
"nvim-tree/nvim-web-devicons"
}
},
})
Tiếp theo, ta lại tạo thêm 1 file plugin/nvim-tree.lua
để gọi nó hoạt động.
-- /plugin/nvim-tree.lua
local status, nvimtree = pcall(require, 'nvim-tree')
if not status then return end
local function on_attach(bufnr)
-- chúng ta sẽ cài đặt keymap cho nvim-tree ở mục bên dưới
end
nvimtree.setup({
on_attach = on_attach,
})
Khởi động lại Neovim để cài đặt nvim-tree
, sau đó ta sẽ bắt đầu cài đặt keymap để tiện sử dụng hơn.
Cài đặt keymap cho nvim-tree.lua
Các bạn bổ sung tiếp đoạn code bên dưới vào file /plugin/nvim-tree.lua
nhé.
-- /plugin/nvim-tree.lua
-- ....
local function on_attach(bufnr)
local api = require('nvim-tree.api')
local function opts(desc)
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
end
-- Ấn `Ctrl + ]` để thay đổi thư mục root
vim.keymap.set('n', '<C-]>', api.tree.change_root_to_node, opts('CD'))
-- Ấn `Enter` để edit
vim.keymap.set('n', '<CR>', api.node.open.edit, opts('Open'))
vim.keymap.set('n', '<Tab>', api.node.open.preview, opts('Open Preview'))
-- Ấn `a` để tạo file
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
-- Copy file or folder
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
-- Delete file or folders
vim.keymap.set('n', 'd', api.fs.remove, opts('Delete'))
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
vim.keymap.set('n', 'p', api.fs.paste, opts('Paste'))
vim.keymap.set('n', 'r', api.fs.rename, opts('Rename'))
vim.keymap.set('n', 'R', api.tree.reload, opts('Refresh'))
vim.keymap.set('n', 'W', api.tree.collapse_all, opts('Collapse'))
vim.keymap.set('n', 'A', api.tree.expand_all, opts('Expand All'))
vim.keymap.set('n', 'x', api.fs.cut, opts('Cut'))
vim.keymap.set('n', 'y', api.fs.copy.filename, opts('Copy Name'))
vim.keymap.set('n', 'Y', api.fs.copy.relative_path, opts('Copy Relative Path'))
end
Có một số kí tự đặc biệt ở trong đoạn code trên như sau:
<C-]>
: tổ hợp phím này nghĩa là Ctrl + ]<CR>
: tương ứng với phím Enter
Gõ lệnh :h key-notation
để xem danh sách kí tự dành cho các phím đặc biệt.
Cài đặt keymap để bật/tắt nvim-tree
Nốt cài đặt này thôi là ta có thể sử dụng rồi nhé. Các bạn mở file /lua/map.lua
và đặt đoạn code sau vào.
-- /lua/map.lua
local keymap = vim.keymap
-- Ấn <Space> + e để bật/tắt `nvim-tree` trong chế độ Normal
keymap.set('n', '<leader>e', ':NvimTreeToggle<cr>')
Giờ thì đóng neovim và mở lại để trải nghiệm nhé 😍
Cài đặt bufferline.nvim
Plugin cuối cùng của bài viết này, các bạn bổ sung thêm đoạn code sau nhé
-- /lua/plugins.lua
require("lazy").setup({
-- ....
{
'akinsho/bufferline.nvim',
version = "*",
dependencies = 'nvim-tree/nvim-web-devicons'
},
})
Tiếp theo, như mọi khi, tạo file /plugin/bufferline.lua
để bắt nó hoạt động
-- /plugin/bufferline.lua
local status, bufferline = pcall(require, 'bufferline')
if not status then return end
-- Tab pages
bufferline.setup {
options = {
offsets = {
{
-- đoạn cài đặt này cho phép Tab
-- tự động thụt vào khi Nvim-tree được mở ra
filetype = "NvimTree",
text = "File Explorer",
text_align = "center",
separator = true
}
},
buffer_close_icon = "×"
}
}
Các bạn lặp lại việc tắt/bật neovim để plugin được cài đặt là ok rồi nhé. Giờ ta có thể thử dùng Telescope để mở các file khác nhau, các bạn sẽ thấy tab được hiển thị.
Khó khăn khi sử dụng nvim-tree
và bufferline
Do hướng dẫn này cũng khá dài nên tôi chưa hướng dẫn các bạn một số cài đặt keymap dành cho 2 plugin trên.
Với nevim-tree
nếu các bạn đang muốn di chuyển con trỏ sang file thì bạn có thể sử dụng phím Ctrl + W + k
hoặc Ctrl + W + ArrowRight
Với bufferline
nếu bạn muốn chọn tab khác, thì có thể click chuột vào file đó. Tuy nhiên, đây ko phải là cách sử dụng neovim đúng đắn.
Bạn có thể sử dụng ;f
của telescope
để chọn file hoặc cài đặt keymap theo những câu lệnh mà bufferline
cung cấp như ảnh dưới.
Kết
Như vậy, trong bài viết này chúng ta đã cài đặt thêm được 1 số plugins chính. Ở bài viết tiếp theo, tôi sẽ hướng dẫn các bạn cài đặt keymap
để giúp quá trình làm việc với Neovim mượt mà hơn.
Hi vọng hướng dẫn này dễ giúp các bạn hiểu thêm về cách cài đặt plugin và keymap trong Neovim. Hẹn gặp lại các bạn ở bài viết tiếp theo.