1.Giới thiệu về Vim
Vi iMprove là bản cải thiện của Vi – một trình soạn thảo phổ biến trên Unix. Vim có tính cấu hình rất cao được xây dựng để cho phép chỉnh sửa văn bản hiệu quả.Vim thường được gọi là trình soạn thảo của các lập trình viên vì nó rất hữu ích trong lập trình.
Vim có thể được nhúng vào trong các IDE mạnh mẽ như Visual Studio hay Qt Creator, Eclipse, … Vim cũng có thể sử dụng trực tiếp trên nền đồ họa bởi gVim hoặc khởi động từ terminal.
Bạn có thể tự làm quen với Vim thông qua những ví dụ ở : openvim hu ặc ở vim-adventures
2. Cài đặt Vim
Có thể sử dụng gVim chạy được trên cả Linux lẫn Windows như 1 trình soạn thảo độc lập.
Link download gVim: http://www.Vim.org/download.php
Trong Ubuntu có thể cài đặt gVim bằng câu lệnh:
sudo apt-get install gvim
Đối với CentOS:
yum install vim-X11 vim-common vim-enhanced vim-minimal
MacOS
brew install vim
3. Các chế độ làm việc của Vim
Vim làm việc theo 3 chế độ:
- Chế độ câu lệnh(Normal mode)
- Chế độ nhập liệu(Insert mode)
- Chế độ trực quan(Visual mode)
- Ở chế độ câu lệnh, những gì bạn gõ vào sẽ được hiểu như là câu lệnh ra lệnh cho Vim
Lệnh gồm: lưu tập tin, thoát khỏi Vim, chuyển con trỏ đến các vị trí khác nhau trong tập tin, chỉnh sửa, sắp xếp, xóa bỏ, thay thế và tìm kiếm đoạn văn bản, …
- Ở chế độ nhập liệu hoặc còn gọi là nhập văn bản, những gì bạn gõ vào được máy hiểu là nội dung của tập tin mà bạn đang chỉnh sửa. Theo chế độ này, Vim soạn thảo giống như trình soạn thảo đơn thuần.
- Chế độ Visual là 1 mở rộng của Vim so với Vi, là 1 cách đơn giản, linh hoạt để chọn / bôi đen văn bản.
Mở Vim ở chế độ câu lệnh:
Để chuyển sang chế độ nhập liệu, gõ kí tự 'a' hoặc 'i':
Ở chế độ nhập liệu, chúng ta sẽ thấy -- INSERT -- ở dưới cùng. Để chuyển lại sang chế độ lệnh thì nhấn phím ESC.
Tương tự như notepad++ trên Windows, khi mở hoặc tạo các tập tin có phần mở rộng là: html, cpp, c, … Vim sẽ làm sáng các từ khóa, biến, …Để thực hiện chức năng này, bạn có thể mở các file có sẵn bằng Vim:
- Khởi động gVim, chọn File/Open, chọn file cần mở.
- Khởi động gVim, sau đó :e “đường dẫn đến file cần mở”
- Trỏ phải vào tên file, chọn Open with gVim
Bạn có thể thiết lập ngôn ngữ lập trình cho Vim mà chưa cần phải lưu tên file bằng cách chọn Syntax/Show Filetypes in menu rồi sau đó vào lại menu Syntax để chọn ngôn ngữ lập trình thích hợp.
Ví dụ: để thiết lập cú pháp ngôn ngữ C++ :set syntax=cpp Ta có thể dùng :syntax on/off để bật/tắt chức năng này.
Trong chế độ lệnh có thể di chuyển con trỏ bằng các phím h, j, k, l tương ứng với sang trái, xuống dưới, lên trên và sang phải.
Để thoát khỏi Vim, có thể dùng menu lệnh: File/Exit hoặc :wq để lưu trước khi thoát hoặc :q! không lưu gì cả. Chi tiết các lệnh sẽ được giới thiệu ở phần sau.
Dưới đây là mô tả về mối quan hệ giữa các chế độ:
+---------+ i,I,a,A,o,O,r,R,s,S +----------+
| Normal +---------->------------+ Insert |
| mode | | mode |
| +----------<------------+ |
+-+---+---+ <Esc> +----------+
| |
| |
| |
| |
v, | |
V V ^ <Esc>
| |
| |
| |
| |
+---+---+----+
| Visual |
| mode |
+------------+
4. Các lệnh cơ bản của Vim
Làm việc với files:
Vim command | Action |
---|---|
:e | filename Mở file. |
:w | filename Lưu file. |
:q | Thoát khỏi Vim. Lệnh sẽ vô hiệu nếu file chưa được lưu |
:q! | Thoát khỏi Vim kể cả file chưa được lưu |
:wq | Lưu và thoát |
:x | Lưu và thoát. Tương tự :wq |
Di chuyển: Sử dụng cả trong chế độ Command và Visual
Vim command | Action |
---|---|
j or Up Arrow | Di chuyển lên trên 1 dòng. Lưu ý là dòng được kết thúc bằng kí tự Enter. |
k or Down Arrow | Di chuyển xuống dưới 1 dòng |
h or Left Arrow | Sang trái 1 kí tự |
l or Right Arrow | Sang phải 1 kí tự |
e | Di chuyển về cuối từ, bao gồm cả dấu ,”.?!” |
E | Chuyển về cuối từ kết thúc bằng dấu cách |
b | Di chuyển về đầu từ |
B | Di chuyển về đầu từ được bắt đầu bằng dấu cách. |
0 | Di chuyển về đầu dòng |
^ | Di chuyển về kí tự đầu tiên không phải dấu cách của dòng |
$ | Di chuyển về cuối dòng |
H | Di chuyển về đầu dòng đầu tiên |
M | Di chuyển về đầu dòng giữa |
L | Di chuyển về đầu dòng cuối |
:n | Di chuyển về đầu dòng có vị trí n |
Chế độ ghi chèn và đè
Vim command | Action |
---|---|
i | Chèn phía trước con trỏ |
I | Chèn vào đầu dòng |
a | Chèn phía sau con trỏ |
A | Chèn vào cuối dòng |
o | Chèn dòng mới vào bên dưới dòng hiện tại |
O | Chèn dòng mới vào bên trên dòng hiện tại |
C | Xóa từ vị trí con trỏ đến cuối dòng hiện tại để chèn. |
r | Thay thế / ghi đè 1 kí tự. |
R | Thay thế / ghi đè nhiều kí tự. Ấn ESC để kết thúc. |
The ESC key | Thoát khỏi chức năng soạn thảo. Chuyển về chức năng lệnh. |
Xóa văn bản
Vim command | Action |
---|---|
x | Xóa kí tự hiện tại ở vị trí con trỏ. |
X | Xóa kí tự phái trước con trỏ. |
dd or :d | Xóa dòng hiện tại. |
Chế độ Visual
Vim command | Action |
---|---|
v | Bắt đầu bôi đen kí tự. Sử dùng các lệnh di chuyển để chọn văn bản 1 cách thích hợp. |
V | Bắt đầu bôi đen dòng |
The ESC key | Thoát khỏi chế độ Visual trở về chế độ lệnh |
Chỉnh sửa văn bản
Chú ý: Đánh dấu (V) là làm việc trong chế độ Visual, khi bạn đánh dấu văn bản. Các lệnh khác làm việc ở chế độ lệnh, khi không có đoạn văn bản nào được chọn.
Vim command | Action |
---|---|
~ | Chuyển đổi từ kí tự thường sang hoa hoặc ngược lại. Làm việc ở cả chế độ Visual và chế độ lệnh. |
> (V) | Thụt lề sang phải. |
< (V) | Thụt lề sang trái. |
c (V) | Xóa đoạn văn bản được đánh dấu để chèn. |
y (V) | Sao chép đoạn văn bản được đánh dấu vào bộ nhớ đệm. |
d (V) | Cắt đoạn văn bản trong bộ nhớ đệm vào vị trí con trỏ. |
yy or :y or Y | Sao chép 1 dòng. |
dd or :d | Xóa 1 dòng. |
p | Dán đoạn văn bản trong bộ nhớ đệm vào sau vị trí con trỏ. Nếu cả dòng thì dán vào vị trí dòng bên dưới. |
P | Dán đoạn văn bản trong bộ nhớ đệm vào trước vị trí con trỏ. Nếu cả dòng thì dán vào vị trí dòng bên trên. |
Undo và redo
Vim command | Action |
---|---|
u | Undo. |
U | Undo tất cả các thao tác thực hiện với dòng hiện tại. |
Ctrl + r | Redo. |
Tìm kiếm
Vim command | Action |
---|---|
/ | chuỗi Tìm kiếm chuỗi |
n | Sử dụng sau lệnh /, tìm chuỗi phù hợp tiếp theo (tìm về cuối) |
N | Sử dụng sau lệnh /, tìm chuỗi phù hợp phía trước (tìm về đầu) |
Thay thế
Vim command | Action |
---|---|
:rs/foo/bar/g | Substitute foo with bar. r determines the range and a determines the arguments. |
Thay thế foo bởi bar,
:s có nghĩa là tìm kiếm và thay thế
r và a có thể thay đổi.
r có thể là:
Vim command | Action |
---|---|
Không gì cả | Làm việc với dòng hiện tại. |
number | Làm việc trên dòng number được chỉ định |
% | Toàn bộ văn bản |
g có thể là:
Vim command | Action |
---|---|
g | Thay thế toàn bộ, nếu không có tham số này. Vim chỉ thay thế mẫu đầu tiên tìm được trên mỗi dòng. |
i | Không phân biệt chữ hoa chữ thường |
I | Phân biệt cả hoa – thường (mặc định) |
c | Có lựa chọn trước khi thay thế. Khi lựa chọn xuâts hiện, ấn y để đồng ý, n để bỏ qua, a để đồng ý toàn bộ, q để thoát |
Bạn có thể tham khảo chi tiết ở đây
5. Thiết lập môi trường trong Vim
Vim có nhiều tùy chọn để bạn dùng hay không tùy ý. Dành cho bạn sắp xếp môi trường soạn thảo cho riêng mình.Dưới đây là một số tùy chọn thường được sử dụng:
Viết tắt | Nguyên tên và Chức năng |
---|---|
ai | autoindent sẽ thụt lề mỗi dòng cho cùng với dòng phía trên. Mặc đình off. |
ap | autoprint in dòng hiện hành lên màn hình khi dòng thay đổi. Mặc định là on. |
eb | errorbells làm cho máy kêu bíp mỗi khi gõ sai lệnh. Mặc định off. |
nu | number hiển thị số hiệu của dòng. Mặc định off |
redraw | redraw cập nhật màn hình mỗi khi có thay đổi. Mặc định on |
report | report lập ra kích cỡ của một thay đổi trong tiến trình hiệu chỉnh, và đưa kết quả ra dòng trạng thái. Ví dụ, report=3 sẽ bắn lời nhắn mỗi khí bạn ra lệnh xóa nhiều hơn 3 dòng, song sẽ im lặng nếu bạn xóa ít hơn 3 dòng. Mặc định report=5 |
sm | showmatch hiển thị một dấu mở ngoặc nếu bạn gõ vào một dấu đóng ngoặc. Rất tiện cho lập trình viên. Mặc định là off. |
smd | showmode hiển thị các thông báo chế độ như: Insert, Visual, … mặc định là on |
warn | warn hiển thị thông báo khi bạn thoát khỏi Vim khi vùng đệm bị thay đổi mà chưa được lưu. Mặc định là on. |
wm=n | wrapmargin xác định lề phải. Mặc định wm=0 |
sw | shiftwidth số khoảng trắng khi tab lùi (Ctrl+D)trong lúc dùng autoindent và sử dụng cho lệnh << và >>. Mặc định sw=8 |
ts | tabstop định số khoảng trắng khi tab. Mặc định ts=8 |
Để sử dụng các tùy chọn trên, bạn sử dụng lệnh :set “tên tùy chọn[=tham số]“.
Ví dụ:
:set ai eb sw=4 ts=4
Lệnh trên sẽ thiết lập autoindent, errorbells (tham số này không làm việc trên gVim), shift width =4 và tabstop =4.
Nếu muốn xem các thiết lập của Vim, bạn chỉ đánh lệnh :set mà không sử dụng đối số.
Muốn xem danh sách các tùy chọn và cách thiết lập, bạn gõ :set all
Muốn tắt một tùy chọn, bạn thêm “no” vào trước tên tùy chọn đó vào trong lệnh :set.
Ví dụ:
:set nonumber nowarn
Để sử dụng các tùy chọn này là mặc định cho các lần sử dụng tiếp theo, bạn có thể chỉnh sửa file: ~/.vimrc
Trong gVim, bạn có thể chỉnh sửa bằng cách chọn: Edit/Startup Settings
Để thiết lập từng tùy chọn cho từng ngôn ngữ, bạn có thể dùng lệnh:
autocmd Filetype <tên mở rộng của ngôn ngữ> set local <các tùy chọn của lệnh set>
Để thay đổi thiết lập màu nền cũng như màu chữ theo các mẫu có sẵn của Vim, bạn dùng lệnh:
colorscheme <tên mẫu>
tên mẫu có thể là: ron, blue, dark, …
hoặc trong gVim có thể chọn Edit/Color Scheme, chọn mẫu phù hợp.
6. Tabs trong Vim
Tabs ở đây là các thẻ tab dùng cho soạn thảo nhiều tài liệu khác nhau đồng thời một cách đơn giản hơn thay vì mở nhiều chương trình Vim.
Để mở nhiều file một lúc trên các tab khác nhau, bạn có thể dùng câu lệnh sau vim với tham số -p trong terminal:
vim -p file1 file2 file3
Đang trong quá trình soạn thảo, muốn tạo mới một tab để soạn thảo văn bản khác có thể dùng lệnh:
:tabnew [tên file] hoặc :tabe [tên file]
Mặc định số tab có thể mở nhiều nhất là 10, nhưng bạn cũng có thể thay đổi thành n tab bằng câu lệnh:
:set tabpagemax=n
Để xem thông tin về các tab đang được mở, sử dụng lệnh:
:tabs
Để di chuyển giữa các tab có thể dùng lệnh :tabn (tab next) di chuyển đến tab phía sau hoặc :tabp (tab previous) di chuyển về tab phía trước.Bạn cũng có thể di chuyển giữa các tab bằng lệnh gt Để chuyển về tab đầu tiên dùng lệnh:
:tabfirst hoặc :tabfir
Lệnh di chuyển đến tab cuối cùng là: :tablast Để hiển thị tab bar hay không bạn có thể dùng lệnh:
:set showtabline=n
trong đó n có giá trị là 2 hoặc 0 tương đương với hiển thị hoặc không hiển thị.Để di chuyển tab hiện tại đến vị trí khác trong tab bar, có thể dùng lệnh:
:tabm vị trí
chú ý là vị trí tab bắt đầu từ 0.Để thoát khỏi tất cả các tab bạn dùng lệnh: :qa hoặc :qa! hoặc :wqa hoặc :wa tùy vào mục đích muốn thoát.
7. Marco trong Vim
Như bạn đã biết, để lặp lại lệnh đã thực hiện trước đó trong Vim có thể dùng lệnh . nhưng lệnh . chỉ lặp lại các thao tác trong 1 lần nhấn phím ESC.
Marco là một tính năng mạnh mẽ hơn lệnh . giúp bạn lặp lại nhiều thay đổi hơn.Để bắt đầu sử dụng Marco nhấn q, tiếp tục nhấn một phím kí tự bất kì từ a đến z đại diện cho tên marco, sau đó thực hiện các thao tác muốn lặp lại, sau đó lại nhấn q để kết thúc marco đó.
Để áp dụng marco thì nhấn @ rồi nhấn tên marco.
Ví dụ: Để bao hàm một số thư viện trong C:
#include “stdio.h”
#include “stdlib.h”
#include “math.h”
#include “string.h”
thay vì đánh toàn bộ đoạn mã trên, ta chỉ đánh tên các thư viện:
stdio.h
stdlib.h
math.h
string.h
Sau đó nhấn ESC để trở về chế độ lệnh, lúc này con trỏ vẫn đang ở dòng cuối cùng, nhấn qa để bắt đầu marco, tên marco là a nếu là qb thì tên marco là b.
Nhấn a để thêm ” vào cuối, sau đó nhấn ESC, nhấn I để trở về đầu dòng, thêm #include “, sau đó nhấn ESC, nhấn k để trở về dòng bên trên, sau đó nhấn q để kết thúc marco.
Nhấn nhiều lần @a để áp dụng marco bạn sẽ thấy kết quả ra đúng như lúc đầu mong muốn.Để áp dụng marco n lần có thể dùng lệnh: n @ tên marco
Như trong ví dụ trên thay vì nhấn 3 lần @a ta có thể trực tiếp nhấn 3@a.