Trang chủTác giảLiên hệ

[Vim cơ bản] Bài 2. Di chuyển con trỏ trong Vim

By Lê Hải Băng
Published in VIM
June 08, 2021
6 min read

[Vim cơ bản] Bài 2. Di chuyển con trỏ trong vim

Chào các bạn, ở bài trước mình đã giới thiệu qua về vim editor cùng một số thao tác cơ bản như mở, đóng, lưu file, … Trong bài này, mình sẽ giới thiệu các thao tác di chuyển con trỏ trong vim. Các bạn cân nhắc trước khi luyện tập các thao tác này vì rất dễ … gây nghiện và cảm giác so high. Trước tiên chúng ta hãy khởi động với vài thao tác di chuyển cơ bản.

Di chuyển qua từng kí tự hoặc dòng

Chúng ta bắt đầu với việc di chuyển qua từng kí tự hoặc dòng. Các bạn thử mở file nào đó bằng vim và di chuyển con trỏ lên, xuông, trái, phải thử xem nào. Ok, đơn giản đúng không, “xời, dùng các phím mũi tên là được chứ gì, có thế cũng đố”. Đúng là bạn có thể dùng các phím mũi tên để di chuyển, nhưng đó không phải cách ‘đúng đắn’ khi dùng Vim. Với Vim, ta có các lệnh sau:

  • Sang trái 1 kí tự: h
  • Sang phải 1 kí tự: l
  • Lên trên 1 dòng: k
  • Xuống dưới 1 dòng: j

Các bạn lưu ý là các lệnh trên phải được thực hiện khi vim ở command mode. Ok, thử cái coi. Và bạn có để ý là tay của bạn hầu như không phải dịch chuyển mấy so với vị trí đặt tay khi soạn thảo không? Đây chính là một điểm rất cool khi dùng vim nếu bạn đã thuần thục với các lệnh di chuyển.

Bạn cũng có thể kết hợp số đếm với các lệnh trên để di chuyển qua nhiều kí tự hoặc dòng. VD: 4h để sang trái 4 kí tự, 34l để sang phải 34 kí tự, …

Chúng ta cũng có thể di chuyển từng dòng với các lệnh sau:

  • Tới kí tự đầu tiên của dòng tiếp theo: ENTER hoặc +
  • Tới kí tự đầu tiên của dòng phía trên: -

Điểm khác của các câu lệnh trên so với kj là con trỏ được di chuyển tới kí tự đầu tiên (không tính dấu cách hoặc tab) của dòng.

Di chuyển tới các vị trí nhất định trong một dòng

Trước tiên ta cần làm rõ khái niệm ‘dòng’, nếu như ở phần trên bạn di chuyển theo từng dòng thì đó là dòng bạn nhìn thấy trên màn hình. Khi bạn gõ một câu dài quá bề ngang màn hình mà không xuống dòng, vim tự động hiển thị tiếp ở dòng tiếp theo. Với các câu lệnh ở phần này, ta cần hiểu chỉ khi bạn gõ phím Enter để xuống dòng thì khi đó mới kết thúc một dòng. Bạn hãy thử gõ lệnh :set nu (nu viết tắt của number) sẽ thấy hiển thị số thứ tự các dòng như cách hiểu mình vừa nói. Để bỏ hiển thị số thứ tự các dòng, các bạn dùng lệnh :set nonu.

Chúng ta có một số lệnh di chuyển con trỏ trong một dòng như sau:

  • Di chuyển con trỏ về đầu dòng: 0 (số không)
  • Di chuyển xuống cuối dòng: $
  • Di chuyển con trỏ tới kí tự đầu tiên của dòng: ^
  • Di chuyển con trỏ tới cột thứ n của dòng: n|

Di chuyển theo khối kí tự

Tiếp theo, để di chuyển con trỏ theo từng từ đơn (word), chúng ta có các lệnh sau:

  • Di chuyển tới kí tự đầu của từ tiếp theo: w hoặc W
  • Di chuyển tới kí tự đầu của từ hiện tại (hoặc từ phía trước): b hoặc B
  • Di chuyển tới kí tự cuối của từ hiện tại (hoặc từ phía sau): e hoặc E

Trong các lệnh trên, các lệnh w, b, e tính cả các dấu ngắt dòng như là một từ trong khi các lệnh W, B, E thì không.

Ngoài ra chúng ta cũng có thể sử dụng các lệnh sau để di chuyển theo từng khối kí tự lớn hơn như câu (sentence), đoạn văn (paragraph) và mục (section).

  • Di chuyển tới đầu câu hiện tại: (
  • Di chuyển tới đầu câu tiếp theo: )
  • Di chuyển tới đầu đoạn văn hiện tại: {
  • Di chuyển tới đầu đoạn văn tiếp theo: }
  • Di chuyển tới đầu mục hiện tại: [[
  • Di chuyển tới đầu mục tiếp theo: ]]

Bản thân mình chỉ dùng vim để code là chính nên những lệnh di chuyển theo câu, đoạn văn và mục như trên chỉ tham khảo cho biết chứ cũng chẳng bao giờ dùng đến. Nếu các bạn dùng vim để viết sách, paper, … thì các lệnh trên chắc sẽ hữu dụng hơn.

Di chuyển theo trang màn hình

Với những file có rất nhiều dòng, việc di chuyển con trỏ theo các cách trên sẽ khá mất thời gian trong trường hợp bạn phài di chuyển qua nhiều dòng. Không vấn đề, vim cung cấp cho bạn các lệnh có thể di chuyển qua nhiều dòng chỉ trong vài nốt nhạc như sau:

  • Xuống dưới 1 trang màn hình: Ctrl-F
  • Lên trên 1 trang màn hình: Ctrl-B
  • Xuống dưới nửa trang màn hình: Ctrl-D
  • Lên trên nửa trang màn hình: Ctrl-U

Di chuyển trong khuôn khổ một trang màn hình

Trong khuôn khổ một trang màn hình, chúng ta có các lệnh di chuyển tới các dòng nhât định như sau:

  • Di chuyển tới dòng đầu tiên trên màn hình: H
  • Di chuyển tới dòng chính giữa trên màn hình: M
  • Di chuyển tới dòng cuối cùng trên màn hình: L
  • Di chuyển tới n dòng sau dòng đầu tiên trên màn hình: nH (VD: 4H)
  • Di chuyển tới n dòng trước dòng cuối cùng trên màn hình: nL (VD: 4L)

Cuộn trang đến vị trí nhất định

Đôi khi chúng ta cần cuộn một dòng nào đó tới vị trí nhất định trên màn hình, vim cho phép bạn thực hiện điều đó với các câu lệnh như sau:

  • Cuộn màn hình để dòng chứa con trỏ lên đầu trang: z-ENTER
  • Cuộn màn hình để dòng chứa con trỏ đến giữa trang: z.
  • Cuộn màn hình để dòng chứa con trỏ xuống cuối trang: z-

Nếu thêm số đếm trước các lệnh trên, bạn sẽ nhận được kết quả tương tự đối với dòng có số thứ tự tương ứng, ví dụ 40z-ENTER sẽ cuộn màn hình để dòng 40 lên đầu trang.

Tìm kiếm trong file

Việc tìm kiếm một xâu bất kỳ trong file là việc chúng ta sẽ gặp khá thường xuyên khi code. Với vim, để tìm kiếm một xâu bất kỳ, bạn dùng lệnh /pattern hoặc ?pattern sau đó ENTER (pattern là xâu cần tìm, có thể chứa dâu cách). / sẽ tìm kiếm theo chiều xuôi (trái -> phải, trên -> xuống), trong khi ? tìm kiếm theo chiều ngược lại. Thực tế, lệnh tìm kiếm cho phép bạn tìm kiếm với những điều kiện phức tạp hơn, chẳng hạn như tìm kiếm các từ bắt đầu bằng chữ hoa, … Chúng ta sẽ nghiên cứu kĩ hơn về matching xâu kí tự trong vim ở một bài khác.

Để lặp lại tìm kiếm theo cùng chiều tìm kiếm hiện tại, chúng ta dùng lệnh n, và lệnh N nếu muốn tìm theo tiếp theo chiều ngược với chiều tìm kiếm hiện tại.

Tìm kiếm trong một dòng

Trong phạm vi trên một dòng, chúng ta cũng có các lệnh tìm kiếm khá hữu dụng trong một số tình huống. Các lệnh sau cho phép bạn tìm kiếm kí tự bất kì ở dòng chứa con trỏ (ở đây mình dùng kí tự x để mình họa):

  • Di chuyển con trỏ tới kí tự x tiếp theo: fx
  • Di chuyển con trỏ tới kí tự x phía trước: Fx
  • Di chuyển con trỏ tới kí tự ngay trước kí tự x tiếp theo: tx
  • Di chuyển con trỏ tới kí tự ngay sau kí tự x phía trước: Tx
  • Lặp lại lệnh tìm kiếm theo chiều tìm kiếm hiện tại: ;
  • Lặp lại lệnh tìm kiếm theo chiều ngược chiều tìm kiếm hiện tại: ,

Các lệnh trên nếu được dùng kết hợp với các lệnh chỉnh sửa như xóa, thay thế sẽ rất tiện lợi trong nhiều tình huống. Ví dụ, khi bạn đang thao tác trên file php và muốn xóa từ vị trí con trỏ hiện tại cho đến trước kí tự ; trên dòng đó, lệnh dt; sẽ thực hiện trong một nốt nhạc :smile:. Mình sẽ giới thiệu kĩ hơn về các lệnh chỉnh sửa ở bài sau.

Di chuyển tới dòng bất kỳ

Trong nhiều tình huống chúng ta sẽ cần di chuyển tới dòng nhất định trong file, chẳng hạn sau khi đọc xong thông báo lỗi và cần di chuyển tới dòng gây ra lỗi để tìm hiểu kĩ hơn, … Để di chuyển tới dòng có số thứ tự n nào đó, chúng ta dùng lệnh nG. Ví dụ, lệnh 34G sẽ di chuyển con trỏ tới đầu dòng số 34. Một cách khác là dùng lệnh :n, ví dụ :34 cũng cho kết quả tương tự và mình hay dùng cách này hơn.

Hai lệnh khác mình cũng hay dùng đó là gg để di chuyển tới dòng đầu tiên của file và G để di chuyển tới dòng cuối của file (rất tiện lợi khi bạn muốn xem dòng cuối cùng của một file log dài miên man). Để hiện thị thông tin dòng hiện tại và tổng só dòng của file, chúng ta dùng lệnh Ctrl-G

Refresh màn hình

Nếu bạn muốn bỏ hiển thị thông báo ở thanh command, hoặc đôi khi vì lý do nào đó (phóng to, thu nhỏ màn hình, …) mà vim không hiển thị đầy đủ nội dung file, bạn có thể dùng lệnh Ctrl-L để refresh lại màn hình.

Kết

Trên đây mình đã tổng hợp các thao tác di chuyển cơ bản và thường dùng với vim. Tất nhiên để nhớ được hết các lệnh thì cần thời gian để luyện tập. ‘Practice make perfect’, khi đã thành thục rồi thì bạn có thể ‘lăng ba vi bộ’ tới bất kì vị trí nào trong file một cách nhanh chóng. Ok, giờ thì bật vim lên và luyện tập thôi. Have fun!

Tài liệu tham khảo


Lê Hải Băng

Related Posts

VIM
[Vim cơ bản] Bài 1. Giới thiệu về Vim
June 07, 2021
4 min
© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media