Rethinking the hjkl | Huy's Blog

<- Quay về trang chủ

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 hl thành bw (để 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 + DCtrl + 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 + KCtrl + 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.