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é.