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
  • :wq lưu và thoát
  • :x lưu và thoát

Các lệnh khác:

  • echo: xuất ra chuỗi, ví dụ echo "Hello world"
  • let gán giá trị cho biến, ví dụ: let x = 11
  • :set number hiển thị số dòng

Normal

  • ESC: thoát các mode khác và quay về normal mode
  • x xóa một ký tự
  • u (undo) quay lại trạng thái trước đó (giống CTRL + Z)
  • CTRL + R (redo) tái thực hiện trạng thái vừa undo (giống CTRL + 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ại
  • a (append) con trỏ nằm ở sau vị trí hiện tại
  • o thêm một dòng ở sau dòng hiện tại và chuyển con trỏ đến đó
  • I con trỏ nằm ở đầu dòng
  • A con trỏ nằm ở cuối dòng
  • O thê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 mode
  • V bôi đen cả dòng
  • viw (visual in word): bôi đen một từ
  • ggVG bôi đen toàn bộ văn bản

Normal

  • h, j, k, l lần lượt là di chuyển sang trái, xuống dưới, lên trên và sang phải
  • gg lên đầu file
  • G xuố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: {( [] )}.

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.
  • ge di 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        v

Moving Extremely

Normal mode:

  • 0 di 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.
  • ENTER di chuyển con trỏ văn bản đến match đầu tiên.
  • n hoặc N để di chuyển đến match tiếp theo hoặc trước đó.
  • /ENTER hoặ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.

  • :/keywords tìm kiếm với từ khóa keywords.
  • n di chuyển đến kết quả tìm kiếm tiếp theo.

Split Pane

  • :split file thêm một cửa sổ cho tập tin file.
  • CTRL + ww di chuyển giữa các cửa sổ.

Open a Terminal

:term

Navigate between panes: CTRL + W CTRL + W.

Move to the end of the file: SHIFT + G.

Cheatsheet & Plugins

Native commands:

  • Chuyển tab: g t
  • Lùi về tab trước: g T
  • Chuyển đến tab thứ n: n g t
  • Đóng tab: :tabc
  • Thay thế chữ foo đầu tiên tìm được bằng bar: :s/foo/bar/
  • Thay thế tất cả chữ foo trong dòng hiện tại bằng bar: :s/foo/bar/g
  • Thay thế tất cả chữ foo trong file bằng bar: :%s/foo/bar/g
  • Xóa tất cả các chữ foo trong 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: CTRL v.
    • Có thể dùng SHIFT hjkl để chọn các ký tự hoặc SHIFT v để chọn toàn dòng.
    • Dùng x để xóa hoặc SHIFT i để insert dòng đầu tiên.
    • Sau khi insert xong thì trở về normal mode dùng SHIFT a để apply cho các dòng còn lại.
  • Đổ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: SHIFT r.
  • Copy cả dòng: y y.
  • Insert n lần: n i <text> ESC
  • Tìm n occurrence: n f <search>
  • Nhảy đến ký tự {, [ hoặc ( còn lại: SHIFT 5 (%)
  • 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: n SHIFT g
  • 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: CTRL e (tương ứng với :Files)
  • Search trong file: CTRL f (tương ứng với :Rg)
  • Danh sách các theme: CTRL c (tương ứng với :Colors)
  • Lịch sử các câu lệnh: CTRL h (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: CTRL b (tương ứng với :Buffers)

VimPlug:

  • Hiển thị trạng thái: :PlugStatus
  • Cài đặt một plugin :Plug

Plugins: