Vim buffer


Hôm nay chúng ta sẽ tìm hiểu vim buffer. Nếu ta mở nhiều file cùng lúc như sau.

nvim a.txt b.txt c.txt 

Thì vim sẽ tạo 3 buffer ( load 3 file này lên RAM). Và file đầu tiên là a.txt sẽ hiện lên window (màn hình).

Ta muốn xem lại các buffer này

:ls                                             
  1 %a   "a.txt"                        line 1
  2      "b.txt"                        line 0
  3      "c.txt"                        line 0

Ta có 3 buffer. Ta muốn chuyển sang buffer 2, ta gõ như sau

:b2

Ta xem lại buffer

:ls                                              
  1 #h   "a.txt"                        line 1
  2 %a   "b.txt"                        line 2
  3      "c.txt"                        line 0
Press ENTER or type command to continue

Ta thấy ký hiệu % có nghĩa là buffer đó đang active, có nghĩa là file ta đang xem.

Nếu muốn xoá buffer 2 ta dùng

:bd2

Ta xem lại buffer

:ls                                            
  1 %a   "a.txt"                        line 1
  3      "c.txt"                        line 0
Press ENTER or type command to continue

Đã xóa được buffer 2.

Để xóa hết các buffer ta dùng

:1,3bd

Xóa từ buffer 1 đến buffer 3.

Nếu ta xem lại buffer

:ls                                             
 12 %a   "[No Name]"                    line 1
Press ENTER or type command to continue

Ta thấy vim tạo 1 buffer mới, và buffer này chưa được lưu thành file nên tên là No Name. Ta có thể lưu buffer này thành file d.txt

:w d.txt

Ta xem lại.

:ls                                             
 12 %a   "d.txt"                        line 1
Press ENTER or type command to continue

Ta muốn tạo 1 buffer mới

:new 

Xem lại buffer

:ls                                             
 12 #a   "d.txt"                        line 0
 14 %a   "[No Name]"                    line 1
Press ENTER or type command to continue

:new sẽ tạo 1 window bên dưới, nếu muốn tạo 1 window bên cạnh ta dùng

:vnew

Còn muốn xóa windown thì cứ gõ

:q

Lưu ý là :q chỉ đóng cửa sổ thôi, buffer vẫn còn muốn xóa buffer thì dùng bd<số buffer> nhé.

:ls                                            
 12 #a   "d.txt"                        line 0
 14 %a   "[No Name]"                    line 1
 15  h   "[No Name]"                    line 0
Press ENTER or type command to continue

Nếu muốn mở file ban đầu như a.txt, ta dùng

:edit a.txt

Nếu muốn di chuyển qua lại giữa 2 buffer ta mở gần nhất ta gõ.

ctrl+shift+6

Nếu muốn mở tất cả buffer lên xem luôn ta dùng.

:ball

Lúc này tất cả file sẽ mở từ trên xuống dưới. Nếu muốn tất cả file mở lên xem từ trái sang phải.

:vertical ball

Muốn move giữa các window cho nhanh ta cấu hình thêm trong ~/.config/nvim/init.vim.

" Cycle through splits.
nnoremap <S-Tab> <C-w>w

Lưu và cập nhật.

:w 
:so %

Lúc này ta chỉ cần nhấn shitf+tab sẽ chuyển qua lại giữa các window.

Còn nếu ta có nhiều window được sắp xếp phức tạp trên dưới trái phải ta map thêm các dòng sau trong ~/.config/nvim/init.vim

" Navigate around splits with a single key combo.
nnoremap <C-l> <C-w><C-l>
nnoremap <C-h> <C-w><C-h>
nnoremap <C-k> <C-w><C-k>
nnoremap <C-j> <C-w><C-j>

Lưu và cập nhất.

:w 
:so %

Lúc này nhấn

  • ctrl+h : qua trái
  • ctrl+l : qua phải
  • ctrl+j : đi xuống
  • ctrl+k : đi lên

Còn nếu ta quá nhiều buffer ta muốn xóa hết chỉ để lại buffer hiện tại ta map thêm vào ~/.config/nvim/init.vim

" close all buffer except current
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>

Lưu và cập nhật

:w
:so %

Ta chỉ cần gõ \+ca thì lúc đó nvim sẽ xóa hết tất cả buffer chỉ trừ lại buffer hiện tại.

Như vậy là ta đã tìm hiểu xong buffer trong vim rồi nhé.