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.

Cài đặt neovim
Cài đặt neovim (Xem ảnh gốc)

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

Cửa sổ Neovim
Cửa sổ Neovim (Xem ảnh gốc)

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

In ra đường dẫn tới thư mục config của Neovim
In ra đường dẫn tới thư mục config của Neovim (Xem ảnh gốc)

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/plugin

  • 📂/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🎨

Tokyonigh theme
Tokyonigh theme (Xem ảnh gốc)

Để 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 Tokyonight theme
Cài đặt Tokyonight theme (Xem ảnh gốc)

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

Cài đặt Treesitter
Cài đặt Treesitter (Xem ảnh gốc)

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

Cài đặt Lualine
Cài đặt Lualine (Xem ảnh gốc)

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