Trong bài viết này, tôi sẽ chia sẻ cho các bạn các cài đặt keymap (phím tắt) mà hiện tại tôi đang sử dụng, cũng như giải thích tại sao tôi lại cài đặt như vậy.

Tất nhiên là các bạn có thể cài đặt theo ý thích, vì như tôi đã nói trên, đây hoàn toàn là những cài đặt của cá nhân tôi.

Demo 📺

Giải thích cú pháp keymap ❔

Cú pháp Keymap
Cú pháp Keymap (Xem ảnh gốc)

Để dễ dàng cho việc làm quen với việc cài đặt keymap, tôi sẽ không giải thích chi tiết toàn bộ cú pháp của keymap.

Như các bạn thấy ở hình trên, keymap bao gồm 3 tham số (thực tế là 4), các tham số này lần lượt đại diện cho:

Tham số Ví dụ Giải thích
#1 n Tương ứng với mode trong neovim. VD:
n - normal mode
v - visual mode
#2 <C-a> Phím tắt mà ta muốn sử dụng, nghĩa là, khi ấn phím Ctrl + A thì neovim sẽ thực hiện các lệnh mà ta cài đặt trong tham số #3
#3 gg<S-v>G Lệnh được thực hiện, sau khi ta ấn phím tắt được quy định ở tham số #2

Như vậy, 2 cài đặt trong ảnh ở trên có thể được hiểu như sau:

local keymap = vim.keymap

-- Nếu đang ở Normal mode
-- mà ta ấn phím Ctrl + A
-- thì thực hiện câu lệnh `gg<S-v>G
keymap.set('n', '<C-a>', 'gg<S-v>G')

-- Nếu đang ở Normal mode
-- mà ta ấn phím Ctrl +S
-- thì thực hiện câu lệnh :w<cr>
keymap.set('n', '<C-s>', ':w<cr>')

Normal mode, visual mode là gì ? 🙄

Kí hiệu Ý nghĩa Giải thích
n Normal mode Là chế độ mà ta chỉ được view file
i Insert mode Là chế độ khi ta bắt đầu nhập liệu bằng cách ấn phím i hoặc a, ...
v Visual mode Là chế độ khi tachonj 1 hàng, hoặc 1 nhóm nội dung bằng các ấn phím v hoặc Shift + v

Toàn bộ bài đặt của tôi

Các bạn mở file /lua/map.lua ra và đặt toàn bộ cài đặt bên dưới vào nhé. Tôi sẽ giải thích chi tiết một số cài đặt ở mục tiếp theo.

-- /lua/map.lua

local keymap = vim.keymap

keymap.set('n', '<C-a>', 'gg<S-v>G')
-- Toggle NeoTree sidebar
keymap.set('n', '<leader>e', ':NvimTreeToggle<cr>')

-- Moving around windows using s + h,j,k,l
keymap.set('n', 'sh', '<C-w>h')
keymap.set('n', 'sj', '<C-w>j')
keymap.set('n', 'sk', '<C-w>k')
keymap.set('n', 'sl', '<C-w>l')

-- Split windows
keymap.set('n', 'ss', ':split<cr><C-w>w')
keymap.set('n', 'sv', ':vsplit<cr><C-w>w')

-- Next/Prev tab page
keymap.set('n', '<leader>n', ':BufferLineCycleNext<CR>')
keymap.set('n', '<leader>b', ':BufferLineCyclePrev<CR>')

-- Close all tabs
keymap.set('n', '<leader>ta', [[:tabedit<cr>:BufferLineCloseLeft<cr>:BufferLineCloseRight<cr>]])
-- Keep current tab and close the others
keymap.set('n', '<leader>to', [[:BufferLineCloseLeft<cr>:BufferLineCloseRight<cr>]])

-- Save file
keymap.set('n', '<C-s>', ':w<cr>')
-- do somthing else

-- Move lines and group lines left, right
keymap.set('v', '>', '>gv')
keymap.set('v', '<', '<gv')

-- Move lines and group lines up, down
keymap.set('n', 'K', ':m .-2<cr>')
keymap.set('n', 'J', ':m .+1<cr>')

keymap.set('v', 'K', ":m '<-2<CR>gv=gv")
keymap.set('v', 'J', ":m '>+1<CR>gv=gv")

-- Find file in NvimTree
keymap.set('n', '@', ':NvimTreeFindFile<cr>')

-- Duplicate line
keymap.set('n', '<C-d>', 'yyp')

<C-a> chọn toàn bộ nội dung file (Ctrl + A)

keymap.set('n', '<C-a>', 'gg<S-v>G')

Nếu bạn đang ở chế độ Normal và ấn tổ hợp phím Ctrl + a thì neovim sẽ thực hiện câu lệnh gg<S-v>G.

Câu lệnh này là 1 tổ hợp gồm 3 lệnh là:

  • gg: di chuyển con trỏ chuột lên trên cùng 1 file
  • <S-v> : bật chế độ visual và chọn toàn bộ hàng hiện tại
  • G: di chuyển con trỏ chuột xuống cuối cùng của file hiện tại

Bạn có thể thử chạy từng câu lệnh 1 để kiểm tra kết quả nhé.

Việc cài đặt keymap có thể hiểu 1 cách đơn giản là: cài đặt 1 tổ hợp phím để thực hiện nhiều câu lệnh cùng 1 lúc.

<leader-e> tắt/mở Sidebar

keymap.set('n', '<leader>e', ':NvimTreeToggle<cr>')

Cài đặt này thì đơn giản hơn. khi bạn ấn <leader>e thì neovim sẽ thực hiện lệnh :NvimTreeToggle<cr> (tương ứng với phím Enter).

Lưu ý, câu lệnh :NvimTreeToggle chỉ tồn tại khi bạn cài đặt nvim-tree plugin thôi nhé.

Chia cửa sổ theo chiều dọc/ngang

-- Split windows
keymap.set('n', 'ss', ':split<cr><C-w>w')
keymap.set('n', 'sv', ':vsplit<cr><C-w>w')

Theo cài đặt trên, nếu:

  • bạn nhấn ss cửa sổ sẽ chia ra làm đôi, 1 cái trên, 1 cái dưới
  • bạn nhấn sv cửa sổ sẽ chia ra làm đôi, 1 cái trái, 1 cái phải

Để đóng cửa sổ, đơn giản là gõ lệnh :q.

Di chuyển qua lại giữa các cửa sổ

-- Moving around windows using s + h,j,k,l
keymap.set('n', 'sh', '<C-w>h')
keymap.set('n', 'sj', '<C-w>j')
keymap.set('n', 'sk', '<C-w>k')
keymap.set('n', 'sl', '<C-w>l')

Cài đặt này thường được sử dụng để di chuyển qua lại giữa nhiều cửa sổ khác nhau. Đặc biệt khi bạn sử dụng cài đặt "Chia cửa sổ ngang/dọc" ở trên.

Neovim cung cấp tổ hợp phím để di chuyển giữa các cửa sổ như bên dưới, nó khá dài nên bạn chỉ cần cài đặt keymap ngắn hơn để sử dụng

  • <C-w>h : di chuyển tới cửa sổ bên trái
  • <C-w>j : di chuyển tới cửa sổ ở trên
  • <C-w>k : di chuyển tới cửa sổ ở dưới
  • <C-w>l : di chuyển tới cửa sổ bên phải

Vậy, tìm những câu lệnh của Neovim ở đâu ?

Bạn có thể tìm thấy những câu lệnh cần thiết ở trang chủ neovim. Nhưng mà, nội dung họ viết rất dài và lan man. Nên tốt nhất là bạn nên xem link tôi tổng hợp 1 số commands ở đây: https://www.komaster.dev/post/neovim-tong-hop-cheetsheet.

Kết

Như vậy, ta đã cài đặt được một số keymap cho neovim. Hi vọng các bạn hiểu được cách sử dụng keymap để tối ưu cách làm việc với Neovim. Hẹn các bạn ở bài viết tiếp theo