Bạn đang làm quen với Linux và cảm thấy bối rối khi cần chỉnh sửa một file văn bản? Lệnh vi, một trình soạn thảo văn bản mạnh mẽ có sẵn trên hầu hết các hệ thống Linux, chính là công cụ bạn cần làm chủ. Tuy nhiên, với giao diện hoàn toàn dựa trên dòng lệnh, vi có thể gây khó khăn cho người mới bắt đầu, vốn đã quen với các trình soạn thảo đồ họa như Notepad hay VS Code. Đừng lo lắng, đây là cảm giác chung của rất nhiều người khi lần đầu tiếp xúc.
Bài viết này được tạo ra để trở thành người bạn đồng hành, giúp bạn vượt qua những bỡ ngỡ ban đầu. Chúng tôi sẽ cùng nhau tìm hiểu chi tiết về lệnh vi, từ các chế độ hoạt động khác nhau cho đến những lệnh cơ bản và cần thiết nhất. Bạn sẽ học được cách mở file, chỉnh sửa nội dung, lưu lại thay đổi và thoát khỏi trình soạn thảo một cách chính xác. Qua các ví dụ minh họa trực quan và những mẹo hữu ích, bạn sẽ nhanh chóng tự tin hơn và sử dụng vi một cách hiệu quả trong công việc hàng ngày.
Giới thiệu về lệnh vi trong Linux
Khi bước chân vào thế giới Linux, một trong những công cụ đầu tiên và quan trọng nhất bạn nên làm quen chính là vi. Vậy vi là gì? Vi là một trình soạn thảo văn bản dựa trên màn hình (screen-oriented text editor) được tạo ra cho hệ điều hành Unix là gì và sau đó trở thành một phần không thể thiếu của các hệ điều hành tương tự Unix, bao gồm cả Linux. Đây được xem là một công cụ cực kỳ mạnh mẽ và phổ biến, có mặt ở hầu hết mọi bản phân phối Linux mà bạn có thể gặp.
Sức mạnh của vi không nằm ở giao diện đồ họa bóng bẩy, mà ở hiệu suất và khả năng hoạt động hoàn toàn bằng bàn phím. Điều này giúp các lập trình viên và quản trị viên hệ thống có thể chỉnh sửa file cấu hình, viết mã nguồn, hay soạn thảo văn bản ngay trên cửa sổ terminal mà không cần chuyển đổi qua lại giữa các ứng dụng.

Tuy nhiên, vấn đề lớn nhất đối với người mới là vi không hoạt động theo cách “trực quan” như các trình soạn thảo văn bản hiện đại. Bạn không thể chỉ cần nhấp chuột và bắt đầu gõ. Chính điều này đã tạo ra một rào cản ban đầu, khiến nhiều người cảm thấy “bị kẹt” và không biết làm sao để gõ chữ, lưu file hay thậm chí là thoát khỏi nó.
Bài viết này sẽ là kim chỉ nam chi tiết giúp bạn giải quyết vấn đề đó. Chúng ta sẽ cùng nhau khám phá cấu trúc và triết lý hoạt động của vi. Nội dung sẽ đi sâu vào các chế độ làm việc cốt lõi, hướng dẫn bạn cách sử dụng các lệnh cơ bản để di chuyển, chỉnh sửa, lưu file và thoát. Kèm theo đó là những ví dụ thực tế và các mẹo hữu ích để bạn không chỉ học thuộc lòng lệnh mà còn hiểu rõ cách áp dụng chúng một cách hiệu quả nhất. Hãy cùng bắt đầu hành trình chinh phục trình soạn thảo vi ngay bây giờ!
Các chế độ làm việc cơ bản trong vi
Để sử dụng thành thạo vi, điều quan trọng nhất là phải hiểu rằng nó hoạt động dựa trên các “chế độ” (modes). Mỗi chế độ có một chức năng riêng, và việc chuyển đổi qua lại giữa chúng là chìa khóa để làm chủ công cụ này. Vi có ba chế độ làm việc cơ bản mà bạn cần nắm vững.

Chế độ Normal (Bình thường)
Đây là chế độ mặc định ngay khi bạn mở một file bằng lệnh vi. Ở chế độ Normal, bạn không thể nhập văn bản trực tiếp. Thay vào đó, mỗi phím bạn nhấn sẽ được hiểu là một lệnh. Chế độ này được tối ưu hóa cho việc điều hướng và thao tác trên văn bản đã có.
Bạn có thể hình dung chế độ Normal giống như bảng điều khiển của một người chỉnh sửa chuyên nghiệp. Thay vì gõ chữ, bạn ra lệnh: “di chuyển đến cuối dòng”, “xóa dòng này”, “sao chép 5 dòng tiếp theo”. Các lệnh này thường là các phím đơn hoặc tổ hợp phím ngắn gọn, giúp bạn thao tác cực kỳ nhanh chóng mà không cần rời tay khỏi bàn phím. Ví dụ, nhấn phím j để đi xuống một dòng, hoặc nhấn dd để xóa toàn bộ dòng hiện tại.
Chế độ Insert (Chèn)
Khi bạn muốn nhập hoặc chỉnh sửa nội dung văn bản, bạn cần chuyển sang chế độ Insert. Đây là chế độ hoạt động gần giống nhất với các trình soạn thảo văn bản thông thường, nơi mọi phím bạn gõ sẽ được chèn vào tài liệu.
Để chuyển từ chế độ Normal sang chế độ Insert, bạn có thể sử dụng một trong các phím lệnh sau:
i: Bắt đầu chèn văn bản tại vị trí con trỏ.
a: Bắt đầu chèn văn bản ngay sau vị trí con trỏ.
o: Mở một dòng mới bên dưới dòng hiện tại và bắt đầu chèn văn bản.
O: Mở một dòng mới bên trên dòng hiện tại và bắt đầu chèn văn bản.
Khi đang ở chế độ Insert, bạn sẽ thấy thông báo -- INSERT -- ở góc dưới cùng bên trái của cửa sổ terminal. Để quay trở lại chế độ Normal, bạn chỉ cần nhấn phím Esc (Escape). Đây là thao tác cực kỳ quan trọng và bạn sẽ sử dụng nó liên tục.
Chế độ Command-line (Dòng lệnh)
Chế độ Command-line cho phép bạn thực hiện các tác vụ ở cấp độ cao hơn như lưu file, thoát khỏi trình soạn thảo, tìm kiếm, thay thế, và nhiều chức năng nâng cao khác. Để truy cập chế độ này, bạn phải đang ở chế độ Normal, sau đó nhấn phím dấu hai chấm :.
Khi bạn nhấn :, một dấu hai chấm sẽ xuất hiện ở góc dưới cùng bên trái của màn hình, và con trỏ sẽ di chuyển đến đó, chờ bạn nhập lệnh. Ví dụ, để lưu file, bạn gõ w rồi nhấn Enter. Để thoát, bạn gõ q. Để lưu và thoát, bạn gõ wq. Chế độ này chính là trung tâm chỉ huy cho các hoạt động quản lý file trong vi.
Các lệnh thường dùng trong trình soạn thảo vi
Sau khi đã hiểu về ba chế độ làm việc, bước tiếp theo là làm quen với các lệnh cụ thể. Thành thạo những lệnh này sẽ giúp bạn tăng tốc độ làm việc đáng kể trên Linux. Tất cả các lệnh dưới đây đều được thực hiện ở chế độ Normal (nhớ nhấn Esc để chắc chắn bạn đang ở chế độ này nhé).

Lệnh di chuyển con trỏ
Việc di chuyển trong vi được thiết kế để bạn không cần dùng đến chuột hay các phím mũi tên (mặc dù các phím mũi tên vẫn hoạt động trên nhiều phiên bản hiện đại). Các lệnh di chuyển cơ bản giúp tay bạn luôn ở trên hàng phím chính.
h: Di chuyển con trỏ sang trái một ký tự.
j: Di chuyển con trỏ xuống một dòng (giống phím mũi tên xuống).
k: Di chuyển con trỏ lên một dòng (giống phím mũi tên lên).
l: Di chuyển con trỏ sang phải một ký tự.
Ngoài ra, vi còn cung cấp nhiều lệnh di chuyển nhanh hơn:
w: Di chuyển đến đầu từ tiếp theo.
b: Di chuyển về đầu từ phía trước.
0 (số không): Di chuyển đến đầu dòng hiện tại.
$: Di chuyển đến cuối dòng hiện tại.
G: Di chuyển đến dòng cuối cùng của file.
gg: Di chuyển đến dòng đầu tiên của file.
Bạn có thể kết hợp số với lệnh di chuyển. Ví dụ, 5j sẽ di chuyển con trỏ xuống 5 dòng.
Lệnh chỉnh sửa cơ bản
Đây là những lệnh bạn sẽ sử dụng hàng ngày để thay đổi nội dung file. Hãy nhớ thực hiện chúng ở chế độ Normal.
Cách mở, chỉnh sửa, lưu và thoát file với vi
Bây giờ chúng ta sẽ kết hợp kiến thức về các chế độ và lệnh để thực hiện một quy trình làm việc hoàn chỉnh: từ lúc mở file cho đến khi lưu lại các thay đổi và thoát khỏi vi. Đây là những kỹ năng nền tảng và quan trọng nhất.
Mở file bằng vi
Để bắt đầu, bạn cần mở cửa sổ terminal trên Linux. Cú pháp để mở một file bằng vi rất đơn giản:
vi tên_file
Ví dụ, để tạo hoặc mở một file có tên là ghichu.txt, bạn gõ:
vi ghichu.txt
Nếu file ghichu.txt đã tồn tại, nội dung của nó sẽ được hiển thị trên màn hình. Nếu file chưa tồn tại, vi sẽ tạo một file mới với tên đó và mở ra một màn hình trống. Ngay sau khi mở, bạn sẽ ở trong chế độ Normal.

Các thao tác chỉnh sửa, lưu và thoát file
Đây là luồng công việc phổ biến nhất khi bạn làm việc với vi. Hãy thực hiện từng bước một cách cẩn thận.
Bước 1: Chuyển sang chế độ Insert để nhập nội dung
Như đã nói, bạn không thể gõ văn bản ở chế độ Normal. Để bắt đầu viết, hãy nhấn phím i. Bạn sẽ thấy con trỏ thay đổi và có thể xuất hiện chữ -- INSERT -- ở dưới cùng. Bây giờ, bạn có thể gõ nội dung như bình thường.
Ví dụ: “Đây là một dòng văn bản mới.”
Bước 2: Quay lại chế độ Normal sau khi chỉnh sửa xong
Khi đã gõ xong nội dung cần thiết, hãy nhấn phím Esc. Thao tác này sẽ đưa bạn trở lại chế độ Normal. Đây là bước bắt buộc trước khi bạn có thể lưu hoặc thoát.

Bước 3: Truy cập chế độ Command-line để lưu và thoát
Từ chế độ Normal, nhấn phím dấu hai chấm :. Con trỏ sẽ nhảy xuống góc dưới cùng bên trái màn hình, sẵn sàng nhận lệnh của bạn. Dưới đây là các lệnh quan trọng nhất:
:w (viết tắt của “write”): Lưu lại các thay đổi bạn vừa thực hiện vào file nhưng không thoát khỏi vi. Lệnh này hữu ích khi bạn muốn lưu tiến trình làm việc một cách thường xuyên.
:q (viết tắt của “quit”): Thoát khỏi trình soạn thảo vi. Lệnh này chỉ hoạt động khi file không có thay đổi nào chưa được lưu. Nếu bạn đã sửa file nhưng chưa lưu, vi sẽ hiển thị một thông báo lỗi để ngăn bạn mất dữ liệu.
:wq hoặc :x: Đây là lệnh kết hợp, thực hiện cả hai việc: lưu (write) các thay đổi và sau đó thoát (quit). Đây là lệnh bạn sẽ sử dụng thường xuyên nhất để kết thúc công việc.
:q!: Thoát khỏi vi mà không lưu bất kỳ thay đổi nào. Dấu chấm than ! ở đây có nghĩa là “ép buộc”. Hãy cẩn thận khi dùng lệnh này, vì mọi công việc bạn đã làm kể từ lần lưu cuối cùng sẽ bị hủy bỏ. Lệnh này rất hữu ích khi bạn lỡ tay chỉnh sửa sai và muốn hoàn tác tất cả.
Sau khi gõ một trong các lệnh trên, bạn chỉ cần nhấn Enter để thực thi nó.
Ví dụ minh họa thao tác trên vi
Lý thuyết sẽ dễ hiểu hơn rất nhiều khi được áp dụng vào thực tế. Hãy cùng thực hành hai ví dụ cụ thể dưới đây để củng cố kiến thức của bạn.
Sửa một đoạn văn bản đơn giản
Trong ví dụ này, chúng ta sẽ tạo một file mới tên là todo.txt, thêm vào vài dòng công việc, sau đó lưu và thoát.
Bước 1: Mở file trong terminal
Gõ lệnh sau và nhấn Enter:
vi todo.txt
Màn hình vi sẽ hiện ra, trống trơn vì đây là file mới. Bạn đang ở chế độ Normal.

Bước 2: Chuyển sang chế độ Chèn và nhập văn bản
Nhấn phím i để vào chế độ Insert. Bây giờ bạn có thể gõ. Hãy nhập nội dung sau, mỗi mục trên một dòng:
Các công việc cần làm:
- Mua sữa
- Gọi điện cho khách hàng
- Cập nhật server
Bước 3: Quay lại chế độ Normal
Sau khi gõ xong, nhấn phím Esc. Bạn đã quay lại chế độ Normal, sẵn sàng để ra lệnh.
Bước 4: Lưu file và thoát
Nhấn : để vào chế độ Command-line. Gõ wq rồi nhấn Enter.
:wq
Vậy là xong! Bạn đã quay trở lại màn hình terminal, và file todo.txt với nội dung bạn vừa nhập đã được lưu lại.
Tìm kiếm và thay thế từ khóa trong file
Bây giờ, hãy mở lại file todo.txt và thay thế từ “khách hàng” thành “đối tác”.
Bước 1: Mở lại file
vi todo.txt
Nội dung bạn đã nhập trước đó sẽ hiển thị.
Bước 2: Tìm kiếm từ khóa
Đảm bảo bạn đang ở chế độ Normal (nhấn Esc nếu cần). Gõ / và theo sau là từ khóa “khách hàng”, rồi nhấn Enter:
/khách hàng
Con trỏ sẽ ngay lập tức nhảy đến từ “khách hàng” trong dòng “Gọi điện cho khách hàng”.

Bước 3: Thực hiện thay thế
Để thay thế từ này, chúng ta sẽ dùng lệnh thay thế trong chế độ Command-line. Nhấn : và gõ lệnh sau:
:%s/khách hàng/đối tác/g
Phân tích lệnh này:
%: Áp dụng lệnh cho toàn bộ file.
s: Viết tắt của “substitute” (thay thế).
/khách hàng/: Từ khóa cần tìm.
/đối tác/: Từ khóa sẽ thay thế.
g: Viết tắt của “global”, nghĩa là thay thế tất cả các lần xuất hiện của từ khóa trên mỗi dòng, không chỉ lần đầu tiên.
Nhấn Enter. Bạn sẽ thấy dòng chữ đã được cập nhật thành “Gọi điện cho đối tác”.
Bước 4: Lưu và thoát
Cuối cùng, gõ :wq và nhấn Enter để lưu thay đổi và thoát.
Các vấn đề thường gặp và cách khắc phục
Dù mạnh mẽ, vi cũng có thể gây ra một vài tình huống khó xử cho người mới. Dưới đây là những vấn đề phổ biến nhất và cách giải quyết chúng một cách đơn giản.
Không thoát được vi do nhầm lệnh
Đây là “cơn ác mộng” kinh điển của người mới dùng Linux: mở vi, gõ linh tinh và nhận ra mình không biết làm cách nào để thoát ra. Cảm giác như bị nhốt trong một căn phòng không có cửa ra.
Nguyên nhân: Lý do chính là bạn đang không ở đúng chế độ để thực hiện lệnh thoát. Có thể bạn đang ở chế độ Insert và khi gõ :q, các ký tự này lại được chèn vào văn bản thay vì được hiểu là lệnh.
Cách khắc phục:
- Bình tĩnh và nhấn
Esc: Nhấn phím Esc một hoặc hai lần. Thao tác này đảm bảo bạn sẽ thoát khỏi bất kỳ chế độ nào và quay về chế độ Normal an toàn. Đây là bước quan trọng nhất.
- Sử dụng lệnh thoát chính xác: Sau khi đã ở chế độ Normal, bạn có thể vào chế độ Command-line bằng cách nhấn
:.
- Nếu bạn muốn lưu lại thay đổi: Gõ
wq rồi nhấn Enter.
- Nếu bạn muốn thoát mà không cần lưu (hủy bỏ mọi thay đổi): Gõ
q! rồi nhấn Enter. Đây là “lối thoát khẩn cấp” an toàn nhất khi bạn không chắc mình đã làm gì.
Chỉ cần nhớ công thức: Esc -> :q! -> Enter là bạn luôn có thể thoát khỏi vi trong mọi tình huống.

Lỗi khi mở file hoặc không có quyền chỉnh sửa
Một vấn đề khác bạn có thể gặp là không thể lưu file sau khi đã chỉnh sửa, dù đã làm đúng các bước.
Nguyên nhân: Lỗi này thường xảy ra khi bạn mở một file mà tài khoản người dùng của bạn không có quyền ghi (write permission). Các file hệ thống hoặc file thuộc sở hữu của người dùng khác (như root) thường rơi vào trường hợp này.
Cách khắc phục:
- Kiểm tra thông báo lỗi: Khi bạn cố gắng lưu bằng
:w, vi sẽ hiển thị thông báo lỗi ở dưới cùng, chẳng hạn như “Permission denied” (Quyền bị từ chối) hoặc “‘tên_file’ is read-only” (File chỉ đọc).
- Thoát mà không lưu: Trước tiên, hãy thoát khỏi file bằng
:q! để tránh các rắc rối không cần thiết.
- Kiểm tra quyền của file: Sử dụng lệnh
ls -l tên_file trong terminal để xem chi tiết quyền. Bạn sẽ thấy các ký hiệu như -r--r--r--, cho thấy file chỉ có quyền đọc.
- Mở file với quyền root: Nếu bạn chắc chắn rằng mình cần chỉnh sửa file đó (đặc biệt là các file cấu hình hệ thống), bạn cần mở nó với quyền quản trị viên (root). Sử dụng lệnh
sudo:
sudo vi tên_file
Hệ thống sẽ yêu cầu bạn nhập mật khẩu. Sau khi xác thực, vi sẽ mở file với đầy đủ quyền hạn, và bạn có thể lưu lại thay đổi một cách bình thường. Tuy nhiên, hãy cực kỳ cẩn thận khi chỉnh sửa file với quyền sudo, vì một sai sót nhỏ cũng có thể ảnh hưởng đến toàn bộ hệ thống.

Lời khuyên và mẹo sử dụng hiệu quả trình soạn thảo vi
Để chuyển từ việc “biết dùng” sang “thành thạo” vi, bạn cần luyện tập và áp dụng một vài chiến lược thông minh. Dưới đây là những lời khuyên và mẹo hữu ích từ kinh nghiệm thực tế để giúp bạn làm việc hiệu quả hơn.
- Thường xuyên luyện tập các tổ hợp lệnh: Đừng chỉ dừng lại ở các lệnh cơ bản. Hãy dành thời gian học các lệnh kết hợp. Ví dụ,
d2w để xóa 2 từ, hoặc 3yy để sao chép 3 dòng. Việc này ban đầu có vẻ chậm, nhưng một khi đã thành thói quen, tốc độ của bạn sẽ nhanh hơn rất nhiều so với dùng chuột.
- Sử dụng bản vi cải tiến như Vim: Hầu hết các hệ điều hành Linux hiện đại ngày nay đều cài đặt sẵn Vim (Vi IMproved) và dùng nó làm trình soạn thảo mặc định khi bạn gõ lệnh
vi. Vim có đầy đủ tính năng của vi, cộng thêm nhiều cải tiến vượt trội như tô màu cú pháp (syntax highlighting), hệ thống plugin phong phú, và nhiều lệnh mạnh mẽ hơn. Hãy tận dụng những tính năng này để làm việc dễ dàng hơn, đặc biệt là khi lập trình.
- Tận dụng chế độ Command-line để tự động hóa: Đừng ngại khám phá các lệnh trong chế độ
:. Bạn có thể thực hiện những tác vụ phức tạp như sắp xếp các dòng theo thứ tự alphabet (:sort) hay thực thi một lệnh shell ngay bên trong vi (:!lệnh_shell). Đây là sức mạnh thực sự của vi/vim.
- Luôn sao lưu file trước khi chỉnh sửa quan trọng: Đây là một quy tắc vàng, đặc biệt khi bạn làm việc với các file cấu hình hệ thống (ví dụ:
/etc/ssh/sshd_config). Trước khi mở file bằng vi, hãy tạo một bản sao lưu bằng lệnh cp tên_file tên_file.bak. Nếu bạn lỡ làm sai, bạn luôn có thể khôi phục lại từ bản sao lưu này.
- Không chỉnh sửa trực tiếp file hệ thống nếu chưa chắc chắn: Khi bạn dùng
sudo vi, bạn đang có toàn quyền thay đổi hệ thống. Hãy luôn tìm hiểu kỹ về chức năng của file và những gì bạn định thay đổi trước khi nhấn :wq. Một thay đổi sai lầm có thể khiến hệ thống của bạn không thể khởi động.
- Tùy chỉnh file cấu hình
.vimrc: Vim cho phép bạn tùy chỉnh sâu sắc thông qua một file cấu hình tên là .vimrc trong thư mục home của bạn. Bạn có thể cài đặt các tùy chọn như hiển thị số dòng (set number), kích thước tab (set tabstop=4), và nhiều hơn nữa. Việc tạo file .vimrc cho riêng mình sẽ giúp môi trường làm việc của bạn trở nên thoải mái và hiệu quả hơn.

Kết luận
Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết để khám phá và làm chủ trình soạn thảo vi trên Linux. Từ việc tìm hiểu khái niệm cơ bản, phân biệt các chế độ làm việc cốt lõi là Normal, Insert và Command-line, cho đến việc thực hành các lệnh di chuyển, chỉnh sửa, lưu và thoát file. Hy vọng rằng những bỡ ngỡ và cảm giác “bị kẹt” ban đầu của bạn đã được thay thế bằng sự tự tin và hiểu biết rõ ràng hơn về công cụ mạnh mẽ này.
Điểm mấu chốt để thành thạo vi không nằm ở việc ghi nhớ hàng trăm lệnh phức tạp, mà ở việc nắm vững triết lý hoạt động của nó: chuyển đổi linh hoạt giữa các chế độ và sử dụng các lệnh cơ bản một cách nhuần nhuyễn. Việc này sẽ giúp bạn tăng tốc đáng kể quy trình làm việc trên môi trường terminal, đặc biệt là trong các công việc quản trị hệ thống, lập trình hay phân tích dữ liệu.
Đừng ngần ngại mở terminal lên và thực hành ngay bây giờ. Hãy tạo một file nháp và thử tất cả các lệnh bạn đã học. Càng luyện tập thường xuyên, các thao tác sẽ càng trở thành phản xạ tự nhiên. Chúc bạn sẽ sớm chinh phục được vi và biến nó thành một trợ thủ đắc lực trong công việc hàng ngày của mình trên Linux.