Rethinking the hjkl
Chắc cũng có đôi lần mình nhắc tới vấn đề này trên blog, đại khái là
từ khi xài vim, mình mắc phải một vấn đề khó chữa, đó là, có những lúc
mình rơi vô trạng thái không muốn làm gì mà chỉ ngồi bấm hjkl
để
chạy đi chạy về trên file, từng dòng một, từng kí tự một...
Thực ra khi mình có làm việc thì cũng vậy, việc di chuyển từng dòng và từng kí tự một khiến cho tốc độ làm việc của mình giảm đi khá nhiều. Nên gần đây mình có thay đổi một tí trong cách mình xài vim.
Đầu tiên, để di chuyển nhanh hơn, hiển nhiên là mình sẽ sử dụng
motion. Ví dụ nhảy tới trước 10 dòng (10j
) hay nhảy lui 5 dòng
(5k
), hay nhảy tới một dòng thứ n
bất kỳ (:n
).
Tiếp theo, là nhảy nhanh đến một kí tự trong một dòng bằng f
hoặc
F
, ví dụ, bấm f
kèm theo một kí tự để nhảy đến vị trí tiếp theo có
kí tự đó trên dòng hiện tại. Bấm ;
để lặp lại thao tác nhảy đó với kí
tự tiếp theo.
Lệnh F
nhảy hướng ngược lại với lệnh f
.
Giờ mới tới phần thú vị. Đó là remap lại phím h
và l
thành b
và
w
(để dịch chuyển theo word thay vì character). Làm như vậy sẽ giúp
di chuyển nhanh hơn, và khi cần di chuyển chậm lại thì mình map tổ hợp
Shift + L
/ Shift + H
về dạng dịch chuyển từng character.
nnoremap L l
nnoremap H h
nnoremap l w
nnoremap h b
Mặc định, vim có tổ hợp Ctrl + D
và Ctrl + U
để nhảy lên xuống
từng trang màn hình, nhưng bố trí phím như vậy hơi phiền phức đối với
mình nên mình cũng remap lại thành Ctrl + K
và Ctrl + J
:
nnoremap <C-k> <C-u>
nnoremap <C-j> <C-d>
Thêm nữa, vì có một thời gian xài Emacs nên mình cảm thấy tổ hợp phím
Ctrl + F
/ Ctrl + B
để dịch chuyển trái phải trên một dòng rất
tiện dụng, nhất là khi đang ở trong INSERT mode, kèm theo đó là tổ hợp
phím Ctrl + A
/ Ctrl + E
để nhảy tới đầu / cuối của một dòng, cũng
trong INSERT mode, cho nên đem cái này vô trong vim luôn:
inoremap <C-f> <Right>
inoremap <C-b> <Left>
inoremap <C-e> <C-o>$
inoremap <C-a> <C-o>^
Vậy mới thấy cái lợi của việc xài nhiều editor khác nhau đi nhiều học nhiều, ăn cắp nhiều thứ về mix lại với nhau rồi xài.