Modes
Command
Các lệnh thoát:
:q(quit) thoát khỏi vim (khi đang ở normal mode):q!thoát khỏi vim nhưng không lưu:w(write) lưu:wqlưu và thoát:xlưu và thoát
Các lệnh khác:
echo: xuất ra chuỗi, ví dụecho "Hello world"letgán giá trị cho biến, ví dụ:let x = 11:set numberhiển thị số dòng
Normal
ESC: thoát các mode khác và quay về normal modexxóa một ký tựu(undo) quay lại trạng thái trước đó (giốngCTRL + Z)CTRL + R(redo) tái thực hiện trạng thái vừa undo (giốngCTRL + Y)
Insert
Các lệnh sau đều giúp chuyển sang insert mode, nhưng vị trí con trỏ của mỗi lệnh là khác nhau
i(insert) con trỏ nằm ở trước vị trí hiện tạia(append) con trỏ nằm ở sau vị trí hiện tạiothêm một dòng ở sau dòng hiện tại và chuyển con trỏ đến đóIcon trỏ nằm ở đầu dòngAcon trỏ nằm ở cuối dòngOthêm một dòng ở trước dòng hiện tại và chuyển con trỏ đến đó
Visual
v(visual) vào visual modeVbôi đen cả dòngviw(visual in word): bôi đen một từggVGbôi đen toàn bộ văn bản
Navigation
Normal
h, j, k, llần lượt là di chuyển sang trái, xuống dưới, lên trên và sang phảigglên đầu fileGxuống cuối file
Common
:#nhảy đến dòng số#
Moving Word by Word
Một word trong VIM là:
- Chuỗi các ký tự viết liền nhau và không có khoảng trắng.
- Ví dụ sau có 3 word:
hello world!. - Ví dụ sau cũng có 3 word:
{( [] )}.
- Ví dụ sau có 3 word:
Normal
w(word) di chuyển đến chữ cái đầu tiên của word tiếp theo.b(back) di chuyển đến chữ cái đầu tiên của word trước đó.e(end) di chuyển đến chữ cái cuối cùng của word hiện tại.gedi chuyển đến chữ cái cuối cùng của word trước đó.
WORD là sự kết hợp tất cả các chữ cái, chữ số và ký tự, chẳng hạn như function foo(param). Các câu lệnh trên ở dạng viết hoa sẽ giúp di chuyển giữa các WORD, riêng ge thì tương ứng với gE. Ví dụ:
type wwww ==> v v v v v
word. are two words
word. is one WORD
type WWW ==> ^ ^ ^ ^Move to a Specific Character
Normal mode:
f{character}(find) để di chuyển đến một ký tự cụ thể trong dòng hiện tại.F{character}di chuyển đến ký tự cụ thể trước đó.t{character}(until) di chuyển đến trước ký tự cần tìm.
type t ==> v v
const fireball = function(target){
type f ==> ^ ^Để có thể di chuyển đến kết quả tìm kiếm tiếp theo hoặc trước đó sau khi dùng lệnh f{character} hoặc t{character}, ta có thể dùng lệnh ; (tiếp theo) và lệnh , (trước đó).
type fdfdfd ==> v v v v
let damage = weapon.damage * d20();
let damage = weapon.damage * d20();
type fd;; ==> v v v vMoving Extremely
Normal mode:
0di chuyển đến ký tự đầu tiên của dòng.$di chuyển đến cuối dòng.^di chuyển đến ký tự non-blank đầu tiên của dòng.g_di chuyển đến ký tự non-blank ở cuối dòng.
Vertically
Normal mode:
}di chuyển đến đoạn tiếp theo.{di chuyển đến đoạn trước đó.CTRL-D(down) di chuyển xuống nửa trang.CTRL-U(up) di chuyển lên nửa trang.
Search Pattern
Normal mode:
/{pattern}: tìm kiếm pattern trong các đoạn văn bản bên dưới.?{pattern}: tìm kiếm pattern trong các đoạn văn bản bên trên. Cũng có thể không cần pattern nếu đã nhập một pattern trước đó (VIM sẽ lưu lại pattern gần đây nhất). Khi đó, lệnh này sẽ giúp đổi chiều tìm kiếm.ENTERdi chuyển con trỏ văn bản đến match đầu tiên.nhoặcNđể di chuyển đến match tiếp theo hoặc trước đó./ENTERhoặc?ENTER: so khớp pattern gần đây nhất trong các đoạn văn bản bên dưới hoặc bên trên.*hoặc#: tìm kiếm word tại vị trí hiện tại của con trỏ văn bản trong các đoạn văn bản bên dưới hoặc bên trên.
Edit
Normal mode:
-
dd(delete) xóa dòng hiện tại. -
y(yank) sao chép đoạn văn bản đang chọn vào clipboard. -
p(paste) dán đoạn văn bản có trong clipboard vào editor.
Search
:/keywordstìm kiếm với từ khóakeywords.ndi chuyển đến kết quả tìm kiếm tiếp theo.
Split Pane
:split filethêm một cửa sổ cho tập tinfile.CTRL + wwdi chuyển giữa các cửa sổ.
Open a Terminal
:termNavigate between panes: CTRL + W CTRL + W.
Move to the end of the file: SHIFT + G.
Cheatsheet & Plugins
Native commands:
- Chuyển tab:
gt - Lùi về tab trước:
gT - Chuyển đến tab thứ n:
ngt - Đóng tab:
:tabc - Thay thế chữ
foođầu tiên tìm được bằngbar::s/foo/bar/ - Thay thế tất cả chữ
footrong dòng hiện tại bằngbar::s/foo/bar/g - Thay thế tất cả chữ
footrong file bằngbar::%s/foo/bar/g - Xóa tất cả các chữ
footrong dòng hiện tại::s/foo//g - Mở một file trong vim:
:e <filename> - Edit nhiều dòng:
- Đặt cursor ở nhiều dòng:
CTRLv. - Có thể dùng
SHIFThjklđể chọn các ký tự hoặcSHIFTvđể chọn toàn dòng. - Dùng
xđể xóa hoặcSHIFTiđể insert dòng đầu tiên. - Sau khi insert xong thì trở về normal mode dùng
SHIFTađể apply cho các dòng còn lại.
- Đặt cursor ở nhiều dòng:
- Đổi thư mục làm việc:
:cd <dir> - Uppercase/Lowercase: chuyển sang visual mode và tô đen những ký tự cần uppercase/lowercase, sau đó nhấn
Uđể uppercase vàuđể lowercase. - Chuyển sang mode replace:
SHIFTr. - Copy cả dòng:
yy. - Insert n lần:
ni<text>ESC - Tìm n occurrence:
nf<search> - Nhảy đến ký tự
{,[hoặc(còn lại:SHIFT5(%) - Tìm occurrence tiếp theo của từ ở vị trí con trỏ:
* - Tìm occurrence trước đó của từ ở vị trí con trỏ:
# - Nhảy đến dòng thứ n:
nSHIFTg - Lặp lại câu lệnh trước đó:
.
Nerd Tree:
- Mở file:
o - Mở thư mục recursive (mở các thư mục con):
O - Mở trong tab mới:
t - Đóng thư mục cha:
x - Đóng toàn bộ các thư mục con:
X - Mở file và split vertically:
s - Tìm kiếm:
/<pattern> - Hiển thị các file ẩn:
I. Set trong.vimrc:let NERDTreeShowHidden=1
Fzf:
- Search file:
CTRLe(tương ứng với:Files) - Search trong file:
CTRLf(tương ứng với:Rg) - Danh sách các theme:
CTRLc(tương ứng với:Colors) - Lịch sử các câu lệnh:
CTRLh(tương ứng với:History:) - Danh sách các câu lệnh:
Backspace(tương ứng với:Commands) - Danh sách các buffer:
CTRLb(tương ứng với:Buffers)
VimPlug:
- Hiển thị trạng thái:
:PlugStatus - Cài đặt một plugin
:Plug
Plugins:
nightfox.nvim: theme.vim-airline.vim: custom status/tabline (status bar ở trong Vim)vim-airline-themes.vim: themes cho vim-airline.vim-bufferline: hiển thị danh sách các buffer ở tabline.vim-move: di chuyển các dòng.vim-visual-multi: tìm next occurrence.