linux basic vim - It costs 7 mins to read

Khi bắt đầu học cách sử dụng VIM, cái cảm giác phải chậm chạp học gõ từng phím như 13 năm trước, lúc mình mới làm quen với máy tính đã trở lại. Sử dụng VIM khó thế nhưng cũng thú vị thế.

Cách học VIM tốt nhất là Learn by Usage bởi vì chỉ có sử dụng VIM thường xuyên một thời gian đủ lâu, các command trong VIM mới thấm vào một cách tự nhiên mà chúng ta không phải bỏ ra nỗ lực để nhớ và tiêu hóa chúng. Vậy nên, nếu bạn quyết tâm muốn nhuần nhuyễn VIM, có một biện pháp cực đoan là không cho mình một sự lựa chọn nào khác ngoài VIM - Bạn phải gỡ hết tất cả các Code Editor, IDE khác đang có trong máy và chuyển qua sử dụng VIM, Có thể sẽ khiến bạn làm việc chậm chạp trong vài ngày hoặc thậm chí vài tuần đầu tiên. Nhưng rồi bạn sẽ được đền đáp xứng đáng. (Afternatively, bạn có thể sử dụng Vintage Mode cho Code Editor chẳng hạn, dù có một số hạn chế)

Bài này mình chỉ ghi lại phần Summary của vimtutor, nếu bạn cài đặt gói đầy đủ của vim (thông thường thì Ubuntu sẽ cài sẵn gói vim-tiny mà thôi) thì sẽ có vimtutor, một ứng dụng nhỏ để học và thực hành ngay trong vim.

Vim is a very powerful editor that has many commands, too many to explain in a tutor such as this. This tutor is designed to describe enough of the commands that you will be able to easily use Vim as an all-purpose editor.


Lesson 1 - Moving the Cursor, Editing A File, Exiting, Insertion, Deletion, Appending

1.1 - Moving the Cursor (In Command Mode ESC) Di chuyển trỏ chuột trong VIM (Có thể dùng các phím mũi tên nhưng không khuyến khích)

h(left) j(down) k(up) l(right)

1.2 - Opening and Exiting VIM

vim FILENAME (Hoăc vi FILENAME)

:q! to trash all changes. :wq to save the changes.

1.3 - Delete character at the cursor type: x

1.4 - i để insert before cursor. a để insert after cursor. A (Shift a) để append after the line.

Lesson 2 - Moving Cursor, Deletion and Undo

type de to delete to the end of current word. type dw to delete until the start of next word. type dd to delete the line.

de,dw,dd có thể dùng kèm với số để xóa nhanh nhiều từ, ví dụ d2w, d3e, 2dd

type d$ to delete to the end of the line.

type 2w to move the cursor two words forward. type 3e to move the cursor to the end of the third word forward. type 0 to move to the start of the line. type $ to move to the end of the line. type b - opposite with w

type u to undo the last commands, U to fix a whole line. type Ctrl+R to redo the undo command.

Lesson 3 - Replace, Delete

Những lệnh liên quan đến deletion như x, dd, dw, de… đều được vim đưa nội dung đã xóa vào register (giống Clipboard vậy)… và bạn có thể dùng p để dán nội dung trong register vào nơi bạn muốn.

r để replace ký tự tại cursor.

cecw để replace từ hoặc phần còn lại của từ tại cursor. (ce là kết hợp giữa dei)

c$ là kết hợp giữa d$i - Xóa phần còn lại của dòng.

Lesson 4 - Moving, Search & Replace

Ctrl+G để biết thêm thông tin về File hiện hành: Tên file, vị trí hiện tại trong file (số dòng)

G (shift G) để di chuyển đến dòng cuối của file (tương tự :$)

gg để di chuyển đến dòng đầu tiên của file (tương tự :0)

:line_number để di chuyển đến dòng cụ thể trong File. (Tương tự việc gõ line_numer G - Shift G)

/từ_cần_tìm - Tìm kiếm trong vim, cursor sẽ nhảy đến từ đầu tiên mà nó tìm thấy. n để di chuyển next, N để đến previous trong lúc tìm kiếm

(nếu /từ_cần_tìm là đi tới thì ?từ_cần_tìm là tìm kiếm quay lui.)

Ctrl+O to go back to where you came from.

Ctrl+I to go forward (ngược với Ctrl+O)

Matching parenthesis or bracket:

Khi đặt cursor trên các ký tự như (, [ hoặc { và gõ command % thì cursor sẽ được nhảy đến phần đóng hoặc mở thẻ tương ứng với nó - rất hữu ích trong lập trình và trong lúc cấu hình hệ thống.

:s/old/new/g để Tìm kiếm và thay thế chuỗi old bằng chuỗi new.

Chỉ thị g cho phép thay thế toàn bộ ocurrences của từ đang tìm trong dòng hiện tại. (Bỏ chỉ thị g đi nếu chỉ muốn thay thế First occurrence).

:#,#s/old/new/g Search & Replace tại những dòng cụ thể.

:%s/old/new/g - Search & Replace mọi ocurrences trong toàn bộ nội dung của File.

:%s/old/new/gc Search & Replace mọi ocurrences trong toàn bộ nội dung của File nhưng có prompt để xác định muốn replace occurence đó hay không.

Lesson 5 - Excute External Command

:! cho phép bạn nhập và thực thi external command (Các lệnh ngoài vim như lệnh của shell) trực tiếp trong VIM. (Rất hữu ích đối với Developer)

:w FILE_NAME - Giống Save As ở các Editor thông thường, Lưu lại File hiện tại với Tên khác.

v để chuyển sang Visual Selection mode, bạn có thể select nhiều dòng một cách trực quan trong mode này.

:r FILE_NAME để chèn nội dung của một file khác vào cursor.

:r !ls chèn output của lệnh ls vào cursor

Lesson 6 - Copy && Some Options

o - Open a line below the cursor and place you in Insert mode.

O - Open a line above the cursor and place you in Insert mode.

R - Nếu r có tác dụng replace từng ký tự thì R sẽ chuyển bạn sang hẳn Replace Mode. (Nhấn ESC để thoát Replace Mode nếu không cần)

y để copy nội dung của dòng vào register và p để dán. (Bạn có nhớ là các lệnh liên quan đến Deletion như dw, de, dd,d$…thực ra tương tự lệnh cut)

y kết hợp với Visual Mode v để select và copy highlighted text.

y đóng vai trò là operator như d, nghĩa là bạn có thể kết hợp với số lượng ở trước 2y, 3y để copy nhiều dòng, kết hợp với w,e,y - yw, y2w

Có rất nhiều Option trong VIM.

Lesson 7 - Helper in VIM

Nếu gặp khó khăn trong quá trình sử dụng vim, nếu không nhớ lệnh này có ý nghĩa gì thì ta có thể mở help ngay trong vim. :help, :help lệnh_cần_biết

~/.vimrc - là nơi chứa các cấu hình của vim. vim powerful hơn vi nhiều nhưng do mặc định thì các chức năng hay ho của vim đã bị disabled, đơn cử như chức năng Syntax Highlighting. Bạn có thể edit file .vimrc và copy nội dung file vimrc_example.vim bằng lệnh:

:r $VIMRUNTIME/vimrc_example.vim

:set nocp

Khi gõ một lệnh, Bạn có thể nhấn Ctrl+D để hiển thị hết danh sách các lệnh bắt đầu bằng ký tự bạn gõ, nhấn TAB để auto complete (tương tự như TAB trong Terminal của Linux).


Bài viết tạm kết thúc ở đây. Nhưng thực ra Vim còn rất nhiều thứ để khám phá. Hẹn gặp lại trong những bài viết khác về vim nhé.

Cài đặt Plugin, thiết lập môi trường Code Ruby & Rails trực tiếp trong vim.

Nhìn Anh chàng này code Ruby trên vim & tmux mà mê - https://www.youtube.com/watch?v=9jzWDr24UHQ