Vim là gì? Chế độ soạn thảo và phím tắt cho lập trình viên

Cửa sổ gvim 7.3 trên Linux với thanh menu File, Edit, Tools, Buffers, Window, Help và nội dung tệp vimrc

Vim là gì? Chế độ soạn thảo và phím tắt cho lập trình viên

Vim là trình soạn thảo văn bản chạy trong terminal, nổi tiếng với các chế độ Normal, Insert, Visual cùng hệ thống phím tắt giúp thao tác nhanh hơn cả thao tác chuột. Tên đầy đủ là Vi IMproved, phiên bản đầu tiên do Bram Moolenaar bắt đầu viết vào năm 1988 dựa trên mã nguồn trình soạn thảo Stevie, và bản phát hành công khai đầu tiên 1.14 hoàn tất vào tháng 11 năm 1991. Kể từ đó, Vim được chuyển đổi sang hàng trăm môi trường khác nhau và hiện là trình soạn thảo mặc định trên macOS cũng như trong rất nhiều container Linux.

Sơ đồ chuyển đổi giữa các chế độ Normal, Insert, Visual và Cmdline của Vim kèm phím tắt

Ba chế độ làm việc cốt lõi

Điều làm Vim khác biệt so với trình soạn thảo quen thuộc là bàn phím được chia thành nhiều chế độ, và mỗi chế độ diễn giải phím gõ theo một ý nghĩa khác nhau. Ba chế độ dùng nhiều nhất là:

  • Normal: chế độ mặc định, dùng cho các lệnh chỉnh sửa. Muốn xóa một từ thì gõ dw, muốn lưu file thì gõ :w. Ở chế độ này các phím chữ cái được hiểu như lệnh chứ không phải ký tự cần nhập.
  • Insert: chế độ gõ văn bản thuần như Notepad. Bấm phím i để chèn trước con trỏ, a để chèn sau con trỏ, o để mở một dòng mới bên dưới. Nhấn Esc để quay lại Normal.
  • Visual: chế độ chọn vùng văn bản. Gõ v để chọn theo ký tự, V để chọn cả dòng, Ctrl-V để chọn hình chữ nhật. Sau khi chọn, các lệnh như d xóa, y cắt, c thay thế sẽ áp dụng cho vùng đang chọn.

Ngoài ra còn có chế độ dòng lệnh phía dưới để gõ lệnh bắt đầu bằng dấu hai chấm, và chế độ lệnh với : cho phép nhập nhiều lệnh cùng lúc. Toàn bộ tài liệu hướng dẫn nằm ngay trong trình biên tập, truy cập bằng lệnh :help, và bài hướng dẫn cho người mới nằm ở lệnh vimtutor.

Màn hình Vim chạy trong terminal hiển thị mã nguồn C, với số dòng, phần trăm hiển thị và chỉ báo chế độ ở cuối màn hình

So sánh các cách soạn thảo phổ biến

Công cụ Giao diện chính Điểm mạnh Điểm yếu
Vim Dòng lệnh, có bản đồ hoạ Nhẹ, mọi phím ở hàng nhà, tự nhiên chạy qua SSH Đường cong học khá cao
Neovim Dòng lệnh, có bản đồ hoạ Cấu hình bằng Lua, hiệu năng tốt hơn, có giao diện đồ họa sẵn Một số plugin cũ không tương thích
Emacs Dòng lệnh, mở rộng sâu Cực kỳ tùy biến, quen thuộc cho người dùng Unix lâu năm Nặng hơn, khái niệm nhiều lớp
Trình soạn thảo đồ họa Cửa sổ và con trỏ chuột Dễ học, trực quan, hợp người mới Chậm hơn khi làm việc trên máy chủ từ xa

Điểm quyết định thường nằm ở môi trường làm việc. Khi bạn phải sửa cấu hình trực tiếp trên máy chủ qua kết nối SSH, một trình soạn thảo chạy trong terminal vẫn hoạt động trơn tru, còn trình soạn thảo đồ họa thường phải mở qua giao diện đồ họa hoặc thiếu bảng phím hợp lệ. Vim cũng hợp với người dùng gõ phím chạm kiểu touch typing, vì phần lớn thao tác nằm ở hàng phím nhà.

Cửa sổ gvim 7.3 trên Linux với thanh menu File, Edit, Tools, Buffers, Window, Help và nội dung tệp vimrc

Các phím tắt đáng học trước

Nếu mới bắt đầu, chỉ cần nhớ một nhóm phím sau là dùng được phần lớn công việc hằng ngày:

  • gg và G nhảy tới đầu và cuối tệp, :42 nhảy thẳng tới dòng 42.
  • 0 và $ di chuyển tới đầu dòng và cuối dòng, w và b nhảy theo từ.
  • dd xóa cả dòng, yy sao chép cả dòng, p dán, u hoàn tác, Ctrl-R làm lại.
  • /từ khóa tìm kiếm, n và N di chuyển giữa các kết quả.
  • :w lưu, :q thoát, :wq lưu rồi thoát, :q! bỏ qua thay đổi và thoát.
  • Ctrl-W cắt một từ, Ctrl-U xóa cả dòng, Ctrl-A nhảy tới đầu dòng.

Hai khái niệm còn lại rất đáng đầu tư thời gian là macro và register. Ghi macro bằng q rồi thực thi bằng @ giúp phát lại một chuỗi thao tác lặp đi lặp lại. Mỗi lần cắt, sao chép hay dán, Vim lưu nội dung vào một register, và có 36 register đánh số cùng chữ cái, nên bạn có thể dán lại nhiều đoạn khác nhau đã cắt trước đó.

Lỗi thường gặp của người mới

  • Gõ phím trong Normal mà không ra chữ: đây là hành vi đúng, không phải lỗi. Khi cảm giác nhầm, bấm Esc một lần là mọi thứ trở lại bình thường.
  • Không thoát được Vim: nếu đã lỡ sửa file mà muốn bỏ hết thay đổi, gõ :q! để thoát ngay mà không lưu. Thao tác này không thể hoàn tác, nên cần phân biệt rõ :q với :q!.
  • Không biết phím nào làm gì: dùng :help insert để xem bảng toàn bộ phím tắt trong từng chế độ, hoặc :map để tra cứu các phím tắt tự định nghĩa.
  • Sao lưu file cũ bị ghi đè: bật :set backup hoặc dùng plugin undo-tree để có thể lấy lại các phiên bản trước khi sửa.

Cuối cùng, Vim không đi kèm cấu hình sẵn nào. Cấu hình nằm trong tệp .vimrc ở thư mục home, và mọi tùy chọn đều có thể bật bằng lệnh :set rồi lưu vĩnh viễn vào tệp đó. Trang chủ của dự án tại vim.org có tài liệu đầy đủ, còn mã nguồn và phần hướng dẫn cài đặt chi tiết nằm trong kho vim/vim trên GitHub. Nếu muốn nắm bối cảnh lịch sử và các tính năng nâng cao, đọc bài giới thiệu về Vim trên Wikipedia.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Giao diện danh sách workflow GitHub Actions hiển thị trạng thái chạy thành công của các pipeline tự động

GitHub Actions tự động hoá CI/CD: workflow, cache, secrets

GitHub Actions là hệ thống tự động hoá tích hợp và triển khai (CI/CD) tích hợp sẵn trong mọi kho mã nguồn trên GitHub. Chỉ cần một file YAML đặt…

Xem thêm
Sơ đồ Bloom filter trong bộ nhớ đứng trước kho lưu trữ trên đĩa, loại bỏ các lần truy cập đĩa không cần thiết

Bloom filter là gì? Cấu trúc dữ liệu xác suất chống trùng lặp

Bloom filter là gì? Cấu trúc dữ liệu xác suất chống trùng lặp Bloom filter là cấu trúc dữ liệu xác suất dùng một mảng bit và nhiều hàm băm…

Xem thêm
Bảng so sánh bốn định dạng ảnh động GIF, WebP, APNG và TGS theo giới hạn màu, hỗ trợ kênh alpha, khả năng co giãn và mức nén

WebP là gì? Cách chuyển ảnh sang WebP để tăng tốc website

WebP là định dạng ảnh do Google công bố năm 2010, được thiết kế để thay thế JPEG, PNG và GIF trên web nhờ nén nén có tổn hao và…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất