Monday, November 24, 2008

VIM for dummies [2]

Sau khi biết được cơ bản về VIM thì các bạn đã bắt đầu có thể dùng vim để soạn thảo (edit) rồi, nhưng để hiệu quả hơn thì cần biết thêm một số thiết lập, phím tắt và lệnh.

Bài này sẽ ôn lại một số điểm trong post trước và giới thiệu thêm một số thao tác thường gặp của vim . Hy vọng sau bài này thì các bạn yêu thích máy tính sẽ cảm thấy hứng thú với việc dùng vim trên Linux/BSD.



=== Khởi động vim ===

Ôn lại bài trước:
$ vim myfile.txt

Bài này thì ta khởi động cách khác:
$ vim

Khởi động kiểu này sẽ thấy hiện giữa màn hình các thông tin về tác giả (Bram Moolenaar - hiện đang làm cho Google), phiên bản (7.x.yz) , cách quit bằng :q , cách xem trợ giúp bằng :h , ...
Bây giờ để bắt đầu soạn thảo 1 file (giả sử tên myfile.txt) , ta gõ lệnh
:edit myfile.txt
hoặc đơn giản hơn chỉ cần :e myfile.txt .

Trong trường hợp bạn muốn mở nhiều file cùng lúc (ví dụ: file1.js , file2.cpp, file3.java, ...), thì vim cũng hỗ trợ nhiều cách. Nếu phiên bản vim của bạn hỗ trợ tab các file, thì nên mở bằng cách sau:
$ vim -p file1.js file2.cpp

Hoặc khi đang ở trong chế độ normal của vim, bạn dùng lệnh:
:tabedit file3.java
thì vim sẽ mở cho bạn file3.java trong 1 tab mới :) .
(Để ngắn gọn hơn có thể gõ :tabe file3.java )



=== Di chuyển / Cuộn màn hình ===

Ôn lại bài trước:
* trái và phải : là "h" và tương ứng "l"
* còn xuống , lên : là "j" , "k"


Di chuyển bằng các phím (ở normal mode):
+ Đến tab kế tiếp: gt , tab trước đó: gT
+ Đến file mà tên nằm ở dấu nháy: gf (để trở lại, dùng Ctrl+o hoặc Ctrl+6 )

+ Đến đầu file: gg
+ Đến (đầu) dòng cuối file: G (tức là Shift+g )
+ Đến dòng thứ 17: 17G

+ Đến cuối dòng: $
+ Đến đầu dòng (ký tự đầu): ^
+ Đến đầu dòng (cột 0): 0


Cuộn màn hình :
+ Cả trang : Ctrl+f (forward), Ctrl+b (backward)
+ Nửa trang : Ctrl+d (down), Ctrl+u (up)
+ Từng dòng : Ctrl+n (next), Ctrl+p (previous) . Hoặc phím cũ là Ctrl+e và Ctrl+y

Lưu ý: các tổ hợp phím scroll màn hình này cũng giống như khi dùng lệnh man, more hoặc less , nên khi xem manpage hay file nào các bạn cũng có thể scroll bằng các tổ hợp phím kể trên.



=== Tìm kiếm / Thay thế ===

Ôn lại bài trước:
phím / : tìm từ trên xuống
phím ?: tìm từ dưới lên (thường dùng để tìm cụm từ có chứa / )
Khi đã tìm thấy thì có thể bấm tiếp phím n hoặc N để tìm đến từ kế tiếp (next) .

Tìm ngay các từ giống từ đang ở dấu nháy (cursor) : phím * , hoặc #


Thay thế (substitute) thì dùng cú pháp mới gần giống sed: ( s/OLD/NEW/option )
+ thay toàn bộ chuỗi "OLD" bằng chuỗi "NEW" trong cả file:
:%s/OLD/NEW/g

+ thay toàn bộ chuỗi "OLD" bằng chuỗi "NEW" trong đoạn từ dòng 5 đến dòng 17 :
:5,17s/OLD/NEW/g

+ thay toàn bộ chuỗi "OLD" bằng chuỗi "NEW" trong 1 dòng (đang chứa cursor) :
:s/OLD/NEW/g

+ chỉ thay chuỗi "OLD" đầu tiên trong dòng bằng chuỗi "NEW" thì ko cần "g" :
:s/OLD/NEW

+ nếu muốn có xác nhận (confirm) trước khi thay thì ta thêm option là "c" :
:%s/OLD/NEW/gc


Các thao tác tìm kiếm và thay thế trên VIM cũng hỗ trợ biểu thức chính quy (Regular Expression) khá tốt. Các Regex được hỗ trợ trên vim hiện nay giống như của egrep, khá giống của perl . Nhưng để tránh phức tạp cho người mới dùng thì tớ chưa nêu ví dụ ở đây :D .



=== Sao chép / Xóa / Dán ===

Đơn giản:
- chép (copy/yank) : phím y
- xóa : phím d (hoặc phím x)
- dán : phím p

btw, trong VIM thì xóa (delete) luôn có nghĩa là cắt (cut), tức là mất đi trên màn hình hiển thị , nhưng ngay lúc đó đã lưu lại trong vùng nhớ nào đó (gọi là vùng register hoặc còn gọi là vùng buffer). Khi đó có thể dán (paste) lại màn hình soạn thảo của vim bằng phím p .


Để xóa 1 đoạn thì ta có thể làm các cánh sau:

1/ chuyển qua chế độ visual rồi chọn vùng cần xóa và bấm phím xóa

2/ dùng chức năng đánh dấu (mark) bằng phím m , đánh dấu 2 điểm rồi xóa từ điểm đầu đến điểm cuối

3/ chuyển sang chế độ chuột
set mouse=a
hoặc
set mouse=i
rồi dùng chuột để chọn vùng cần xóa, rồi bấm phím xóa.

4/ Ánh xạ các thao tác xóa thành tổ hợp phím nào đó (VD: kiểu Ctrl+C của Windows) , để chọn và xóa dễ hơn.

5/ Chuyển sang chế độ soạn thảo giống các chương trình trên Windows , tức là dùng lệnh behave mswin để nó chuyển chế độ chuột và các phím tắt giống kiểu Notepad++ trên Windows.

Đại khái như vậy, nhưng phần này tớ khoan nói rõ, ai quan tâm sẽ tự tìm hiểu :D .




=== Thiết lập / vimrc ===

Ôn lại bài trước:
* Chuyển theme màu khác cho vim, chẳng hạn theme "murphy" :
:colorscheme murphy

* Bật syntax highlight màu cho các ngôn ngữ lập trình, script :
:syntax on

* Bật số dòng (line number) lên cho dễ theo dõi:
:set number

* Bật chức năng hiện các lệnh (show command) đã gõ :
:set showcmd

* Bật "cây thước" để hiện số dòng, số cột, số ký tự đã gõ:
:set ruler

* Bật chức năng highlight các từ được search :
:set hlsearch

* Bật chức năng ignore case của từ được search để tìm được nhiều hơn :
:set ignorecase




=== Ánh xạ phím tắt ===

Ôn lại bài trước:
Để undo, thì trước tiên chuyển về normal mode (nhấn ESC) , rồi bấm phím u , thế là undo 1 lần. Muốn undo nữa thì nhấn u nữa, cứ thế. Còn để redo thì ở Normal mode ta bấm Ctrl+r (trong VIM thường ký hiệu là C-R) . Nếu muốn redo nữa thì lại bấm Ctrl+r tiếp, bạn có thể redo đến hết lần undo liên tục gần nhất.



=== Một số tham khảo ===

Ôn lại bài trước:
:h word
(với "word" là từ mà mình muốn coi help)

vim cũng có built-in sẵn 1 cái tutor về cách dùng VIM:
$ vimtutor

4 comments:

Anonymous said...

nice tips :)

Anonymous said...

VERY GOOD !

Keep it , guy !

james tiet said...

làm sao gõ tiếng việt bằng unikey vào trong gvim nhỉ

Mediocre Ninja said...

bồ chỉnh setencoding và setfileencoding là utf-8 rồi thì có thể gõ tiếng Việt trong gvim được rồi :-)