Các lệnh Linux cơ bản (Phần 8 – Vim)

Trong bài viết lần này về các câu lệnh Linux cơ bản, mình sẽ chỉ giới thiệu một lệnh duy nhất để bật một công cụ text editor tuyệt vời ở trên Linux terminal – đó là Vim.

vim là phiên bản mở rộng của vi, một text editor và là một trong những chương trình core của hệ thống Unix. vim rất nhẹ và nhanh, khi thao tác trên server với ssh chẳng hạn, chúng ta thường rất khó có thể sử dụng những text editor có giao diện GUI.
Còn một text editor khác là nano nhưng mình không prefer nó lắm vì vim cung cấp nhiều tính năng tuyệt vời hơn. Thao tác trên vim sẽ hơi khó với những người mới làm quen với nó, nhưng khi đã sử dụng nhiều ta sẽ thấy việc dùng vim là nhanh hơn nhiều so với nano.

Để khởi động vim, đơn giản chúng ta chỉ cần gõ lệnh vim:

➜  ~ vim 

để thao tác trong vim thì chủ yếu chúng ta phải sử dụng lệnh, một số lệnh chúng ta chỉ cần gõ một ký tự trên bàn phím, một số lệnh chúng ta phải gõ lệnh đi trước là dấu : (colon), mình sẽ thêm cả dấu : nếu câu lệnh cần trong bài viết này.

Để thoát vim chúng ta sử dụng lệnh :q, nếu chúng ta không thể thoát, có nghĩa là chúng ta đã thay đổi một file mà chưa save nó lại, chúng ta có thể discard phần chúng ta thay đổi bằng cách sử dụng lệnh :q!.

Chế độ inserting trong vim

Để bắt đầu với phần này chúng ta sẽ tạo trước một file text ví dụ:

➜  /tmp touch vim_example.txt
➜  /tmp vim vim_example.txt 

Khi mở file lên mặc định chúng ta sẽ không thể gõ được nội dung, vì chúng ta đang ở trong command mode, nghĩa là chỉ có thể sử dụng lệnh để điều khiển vim. Để có thể thêm nội dung chúng ta phải dùng lệnh i, có nghĩa là insert mode, lúc này chúng ta có thể gõ text vào bình thường. Có thể biết chúng ta đang trong mode này bằng cách nhìn vào line cuối của terminal

-- INSERT --

Bây giờ chúng ta thêm vào:

The quick brown fox jumped over the lazy dog.

Để thoát chế độ insert chúng ta nhấn Esc. Để lưu lại thay đổi, chúng ta sử dụng lệnh :w.

Di chuyển con trỏ trong chế độ command mode

Trong command mode, chúng ta có thể sử dụng những lệnh sau để di chuyển con trỏ, vim không chỉ giới hạn di chuyển con trỏ di chuyển từng kí tự một hay từng dòng một, mà có rất nhiều lệnh khiến việc di chuyển con trỏ rất thuận tiện và nhanh chóng:

Key commandMove the cursor
lsang phải một ký tự
hsang trái một ký tự
jxuống một dòng
klên một dòng
0đến đầu dòng hiện tại
^đến đầu dòng hiện tại nơi chứa ký tự khác space (có thể một số file config yml indent chẳng hạn thì lệnh này sẽ giúp bỏ qua phần indent đó)
$đến cuối dòng hiện tại
wđến đầu word tiếp theo hoặc đến dấu chấm câu tiếp theo
Wđến đầu word tiếp theo, ignore chấm câu
bđến đầu word trước, hoặc chấm câu trước
Bđến đầu word trước, ignore chấm câu trước
Ctrl + ftrang tiếp theo
Ctrl + btrang trước
[number] + Gđến dòng thứ [number] của file
Gđến dòng cuối file

Edit text cơ bản

Trong chế độ command mode, chúng ta có sử dụng một số lệnh để edit text như sau:

Trước hết hay bật lại file lên

➜  /tmp vim vim_example.txt

Append text

Để thêm mới text vào sau kí tự cuối cùng của file, chúng ta dùng lệnh a, sau đó chúng ta lại được vào insert mode và có thể thêm text bình thường. Thêm vào nội dung như sau.

The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
Line 4
Line 5
Line 6
~                                                                                             
~                                                                                             
~  

Opening a line

Chúng ta có thể chèn thêm dòng vào file hiện tại bằng cách sử dụng lệnh o hoặc O:

CommandÝ nghĩa
ochèn dòng phía dưới dòng hiện tại
Ochèn dòng lên trên dòng hiện tại

Mặc định sau khi dùng 2 lệnh này thì vim sẽ vào inserting mode.

Ta dùng lệnh này để thêm một dòng vào trên và dưới của line 3

The quick brown fox jumped over the lazy dog. It was cool.i
Line 2

Line 3

Line 4
Line 5
Line 6

~  
~  
~  
~  
~  

Deleting text

Chúng ta có thể xóa text theo rất nhiều cách khác nhau bằng những câu lệnh mà vim cung cấp.

CommandÝ nghĩa
xDelete ký tự hiện tại
3xDelete ký tự hiện tại và 2 ký tự sau đó
ddDelete dòng hiện tại
5ddDelete dòng hiện tại và 4 dòng sau đó
dWDelete từ vị trí con trỏ đến đầu word tiếp theo
d0Delete từ vị trí con trỏ đến đầu dòng hiện tại
d$Delete từ vị trí con trỏ đến hết dòng hiện tại
d^Delete từ vị trí con trỏ đến đầu dòng hiện tại trừ ký tự khoảng trắng
dGDelete từ vị trí con trỏ đến hết file
d20GDelete từ vị trí con trỏ đến dòng thứ 20

Chúng ta có thể thử edit lại file ví dụ của chúng ta, sau đó chúng ta có thể sử dụng lệnh u – undo, để khôi phục nội dung file và đến với ví dụ tiếp theo.

Copy, Paste

Về cơ bản thì cách sử dụng copy không khác với delete text là mấy. Chúng ta có thể sử dụng bảng trên, thay vào bằng lệnh y thay thế từ Delete trong phần ý nghĩa thành Copy là xong, chúng ta đã có cách sử dụng lệnh copy.
Để paste nội dung vừa copy, chúng ta sử dụng p paste dưới dòng hiện tại hoặc P paste trên dòng hiện tại.

Joining Line

Để join hai dòng với nhau, chúng ta có thể dùng J, khi đó vim sẽ join dòng hiện tại với dòng ngay dưới nó.

Select text

Để có thể select một đoạn text hay một block of text chúng ta có thể dùng lệnh v, từ đó ta có thể dùng nó để copy text hoặc delete text, khi đó sử dụng p sẽ paste text vào sau vị trí con trỏ, và P sẽ paste text vào trước vị trí con trỏ.

Mở multiple file

vim có thể dùng để edit nhiều hơn là một file, chúng ta có thể dùng lệnh sau:

➜  /tmp vim vim_example_1.txt vim_example_2.txt vim_example.txt

Để chuyển giữa các file chúng ta có thể dùng lệnh :n next file tiếp theo, :N quay lại file trước. Ngoài ra chúng ta có thể dùng lệnh :buffers để view danh sách các file đang được mở.

~                                                                                             
:buffers
  1 %a   "vim_example_1.txt"            line 1
  2      "vim_example_2.txt"            line 0
  3      "vim_example.txt"              line 0

Chia màn hình trong vim

Mình thường prefer một cách khác hơn để edit multiple file hơn bằng cách mở vim ở một file, sau đó sử dụng lệnh :split hoặc :vsplit để chia đôi màn hình theo chiều ngang hoặc dọc.

Chia màn hình ngang

Chia màn hình dọc

sau đó dùng lệnh:

:e [another_file_path.txt]

để mở file khác edit tại cửa sổ còn lại, :e có nghĩa là edit.

Để di chuyển giữa các cửa sổ, chúng ta có thể dùng lệnh Ctrl+w+[arrow key] để chọn cửa sổ tương ứng. Nếu ai sử dụng tmux rồi chắc biết kiểu lệnh điều khiển này.

Trong ví dụ trên hình là mình mở 3 files để edit.

Như vậy là chúng ta đã hiểu sơ qua về cách sử dụng Vim. Mình cũng đã từng có thời rất khó nhọc và không thể nào dùng nổi Vim, nhưng qua tìm hiểu và mày mò, giờ mình cũng đã trở thành một người chơi hệ Vim rồi. Mong là các bạn cũng nhìn ra điểm mạnh mẽ của nó và sẽ yêu thích nó trong tương lai. Sau đây mình sẽ tổng hợp lại một số cách dùng

Tổng hợp một số command và các phím di chuyển khi sử dụng Vim

Một số lệnh settings:

LệnhÝ nghĩa
:syntax onHighlight theo cú pháp code của file đang mở
:syntax hlsearchHighlight các kết quả search
:set tabstop=2Độ rộng của một ký tự tab = 2 dấu cách
:set autoindentTự động indent khi xuống dòng
:set numberHiển thị line number/số dòng bên trái nội dung file

Một số lệnh cơ bản

LệnhÝ nghĩa
:help [keyword]Tìm kiếm trong help document từ khóa mà bạn muốn tra cứu.
:e [file]Mở một file mà bạn nhập tên vào.
:wLưu file.
:wqLưu file và thoát Vim.
:q!Thoát Vim mà không lưu lại thay đổi.

Lệnh & phím di chuyển (chú ý hoa thường thì chúng ta kết hợp nhấn giữ shift nhé)

Lệnh/PhímÝ nghĩa
h l j kTương ứng là phím di chuyển trái, phải, xuống, lên.
H M LTương ứng là phím đưa con trỏ về đầu, giữa, cuối của màn hình.
w b eTương ứng là phím đưa con trỏ về nơi bắt đầu từ tiếp theo, nơi bắt đầu từ trước đó, kết thúc của một từ.
0 ^ $Tương ứng là phím đưa con trỏ về đầu dòng, đầu dòng không tính khoảng trắng, cuối dòng.
) (Tương ứng đưa con trỏ đến câu tiếp theo, câu trước đó.
} {Đưa con trỏ đến block text tiếp theo, trước đó
Ctrl + f/bDi chuyển đến trang tiếp hoặc trước đó
ggDi chuyển con trỏ đến đầu file
GDi chuyển con trỏ đến cuối file
:[line number]Di chuyển đến dòng tương ứng với số nhập vào

Câu lệnh chỉnh sửa văn bản

LệnhÝ nghĩa
yyCopy một dòng
ywCopy một từ
vbôi đen từng chữ một, dùng kết hợp phím di chuyển lên, xuống, trái, phải để bôi đen
Ctrl + vbôi đen theo block
ddXóa một dòng
dwXóa một từ
xXóa một chữ
uUndo
Ctrl + rRedo
  

Câu lệnh tìm kiếm

LệnhÝ nghĩa
/[keyword]Tìm kiếm một keyword
?[keyword]Tìm kiếm từ đằng trước của keyword bạn nhập
nĐi đến kết quả tiếp theo (khi search xong nhấn enter, con trỏ sẽ đi đến kết quả search, nhấn n sẽ đi đến kết quả tiếp theo)
NĐi đến kết quả trước đó
:%s/[pattern]/[replacement]/gTìm kiếm pattern sau đó thay thế từ đó với replacement trên toàn bộ file, nếu không có g chỉ thay thế trên một dòng thôi
:%s/[pattern]/[replacement]/gcTương tự trên nhưng sẽ confirm với bạn có thay đổi không cho từng kết quả

Trên đây là toàn bộ vốn liếng của mình khi sử dụng Vim. Vim còn nhiều khả năng hơn thế nữa mà nhiều dev còn sử dụng để thay thế code editor nhờ những plugin vô cùng hữu ích. Ở bài viết tiếp theo mình sẽ viết về chủ đề package management của Linux. Các bạn hãy đón đọc nhé. Trong thời gian đó hãy ôn tập Vim bằng cách chơi game Vim cho đỡ khô khan nhé.

  • Linux

Leave a Reply

Your email address will not be published. Required fields are marked *