Vim Fundamental

From Zero to Modal Editing Hero

Agenda

  1. Apa itu Vim ?
  2. Instalasi
  3. Mode di Vim
  4. Navigasi Dasar
  5. Editing Text
  6. Search & Replace
  7. ...
  1. Visual Mode
  2. Registers & Macros
  3. Buffers, Windows & Tabs
  4. Konfigurasi (.vimrc)
  5. Plugin Management
  6. Tips & Tricks
  7. Best Practices

1. Apa itu Vim?

Vim — Vi IMproved

Vim adalah text editor berbasis terminal yang powerful, efisien, dan tersedia di hampir semua sistem Unix/Linux

Tanpa Vim              Dengan Vim
─────────────          ─────────────
Butuh mouse +          Edit teks super
klik sana-sini 😅      cepat, pure keyboard ✅

Sejarah Singkat

Tahun Event
1976 vi dibuat oleh Bill Joy
1991 Bram Moolenaar rilis Vim (Vi IMproved)
2015 Neovim fork dimulai
2022 Bram Moolenaar wafat, komunitas lanjutkan
2023+ Neovim & Vim terus berkembang aktif

Vim ada di setiap server Linux — skill yang selalu relevan!

Mengapa Belajar Vim?

  • Tersedia di mana saja — default di Linux/macOS server
  • Editing tanpa mouse — tangan tidak meninggalkan keyboard
  • Sangat cepat — setelah terbiasa, produktivitas meningkat drastis
  • Dapat dikustomisasi — dari minimalis hingga full IDE
  • Ringan — berjalan di terminal, bahkan di server remote via SSH
ssh user@server
vim /etc/nginx/nginx.conf    # Edit config langsung di server!

2. Instalasi

Install Vim

# Ubuntu / Debian
sudo apt update && sudo apt install vim

# Fedora / RHEL
sudo dnf install vim

# macOS (Homebrew)
brew install vim

# Windows (via Chocolatey)
choco install vim

# Neovim (versi modern, rekomendasi)
sudo apt install neovim     # Ubuntu
brew install neovim         # macOS

Verifikasi & Vimtutor

vim --version
# VIM - Vi IMproved 9.x

nvim --version
# NVIM v0.x.x

# Tutorial interaktif bawaan Vim!
vimtutor

vimtutor adalah cara terbaik untuk belajar Vim dari nol — jalankan sekarang!

3. Mode di Vim

Konsep Mode — Inti dari Vim

Vim adalah modal editor — setiap tombol punya fungsi berbeda tergantung mode aktif

┌─────────────────────────────────────────┐
│              NORMAL MODE                │  ← Default, navigasi & command
│         (Esc dari mode lain)            │
└──────┬──────────┬───────────┬───────────┘
       │ i/a/o    │ v/V/Ctrl+v│ :
       ▼          ▼           ▼
  INSERT       VISUAL      COMMAND
   MODE         MODE        MODE
  (edit text) (seleksi)  (simpan, quit)

Normal Mode

Mode default saat membuka Vim

  • Semua tombol adalah perintah, bukan karakter
  • Navigasi, cut, copy, paste, undo
  • Tekan Esc untuk kembali ke Normal Mode dari mode lain
Vim baru dibuka  →  Normal Mode  ✓
Sedang di Insert →  tekan Esc   →  Normal Mode
Sedang di Visual →  tekan Esc   →  Normal Mode

Insert Mode

Mode untuk mengetik teks

Tombol Fungsi
i Insert sebelum cursor
I Insert di awal baris
a Append setelah cursor
A Append di akhir baris
o Baris baru di bawah
O Baris baru di atas
Esc Kembali ke Normal Mode

Command Mode

Menjalankan perintah Vim

:w          " Simpan file
:q          " Keluar
:wq         " Simpan & keluar
:q!         " Keluar tanpa simpan (force)
:wq!        " Simpan & keluar (force)
:x          " Simpan & keluar (hanya jika ada perubahan)
ZZ          " Normal mode shortcut untuk :wq
ZQ          " Normal mode shortcut untuk :q!

: mengaktifkan Command Mode dari Normal Mode

4. Navigasi Dasar

Gerakan Dasar — hjkl

Navigasi tanpa meninggalkan home row keyboard!

        k
        ↑
   h ←     → l
        ↓
        j
Tombol Arah
h Kiri
j Bawah
k Atas
l Kanan

Navigasi Kata & Baris

Tombol Fungsi
w Word ke depan (awal kata berikut)
b Word ke belakang (awal kata sebelumnya)
e Akhir kata saat ini
0 Awal baris
^ Karakter pertama baris (non-whitespace)
$ Akhir baris
gg Baris pertama file
G Baris terakhir file
50G Pergi ke baris 50

Navigasi Layar

Tombol Fungsi
Ctrl+f Scroll satu halaman ke bawah
Ctrl+b Scroll satu halaman ke atas
Ctrl+d Scroll setengah halaman ke bawah
Ctrl+u Scroll setengah halaman ke atas
H Pergi ke baris pertama layar
M Pergi ke baris tengah layar
L Pergi ke baris terakhir layar
zz Pusatkan baris saat ini di layar

Navigasi Cepat dengan Count

Tambahkan angka sebelum command untuk repeat!

5j      →  turun 5 baris
10k     →  naik 10 baris
3w      →  maju 3 kata
4l      →  kanan 4 karakter
50G     →  pergi ke baris 50

Pattern: [count] + [motion] — ini adalah dasar power Vim!

5. Editing Text

Operator + Motion

Cara kerja editing di Vim:

[operator] + [count] + [motion/text-object]
Operator Fungsi
d Delete (cut)
y Yank (copy)
c Change (delete + masuk insert)
> Indent ke kanan
< Indent ke kiri
= Auto-indent

Delete & Cut

x         →  hapus karakter di cursor
X         →  hapus karakter sebelum cursor
dd        →  hapus seluruh baris
dw        →  hapus dari cursor ke depan 1 kata
d$        →  hapus dari cursor ke akhir baris
d0        →  hapus dari cursor ke awal baris
D         →  sama dengan d$
5dd       →  hapus 5 baris
diw       →  hapus kata di bawah cursor
dip       →  hapus paragraf

Copy & Paste

yy        →  copy seluruh baris
yw        →  copy 1 kata
y$        →  copy ke akhir baris
yiw       →  copy kata di bawah cursor
5yy       →  copy 5 baris

p         →  paste setelah cursor/baris
P         →  paste sebelum cursor/baris

Semua yang di-delete dengan d otomatis masuk clipboard!

Change (Delete + Insert)

cw        →  ganti kata (hapus + masuk insert)
cc        →  ganti seluruh baris
C         →  ganti dari cursor ke akhir baris
ciw       →  ganti kata di bawah cursor
ci"       →  ganti teks di dalam tanda kutip
ci(       →  ganti teks di dalam tanda kurung
ci{       →  ganti teks di dalam kurung kurawal

Text Objects

Seleksi berdasarkan struktur teks — sangat powerful!

Command Aksi
iw / aw inner word / a word (+ spasi)
i" / a" dalam kutip / termasuk kutip
i( / a( dalam kurung / termasuk kurung
i{ / a{ dalam kurung kurawal
i[ / a[ dalam kurung siku
ip / ap inner paragraph / a paragraph
it / at inner HTML tag / a tag

Undo & Redo

u           →  undo
Ctrl+r      →  redo
U           →  undo semua perubahan di baris ini
.           →  repeat perintah terakhir (SANGAT berguna!)

Tombol . (dot) adalah salah satu tombol paling powerful di Vim!

Contoh:
  ciwHello<Esc>  →  ganti kata dengan "Hello"
  w.             →  pindah ke kata berikut, ganti juga dengan "Hello"
  w.w.           →  ganti dua kata berikutnya juga!

6. Search & Replace

Search

/kata        " Cari ke depan
?kata        " Cari ke belakang
n            " Hasil berikutnya
N            " Hasil sebelumnya
*            " Cari kata di bawah cursor (ke depan)
#            " Cari kata di bawah cursor (ke belakang)
" Aktifkan highlight hasil search
:set hlsearch

" Matikan highlight
:nohlsearch   " atau :noh

Replace (Substitute)

:s/lama/baru/         " Ganti pertama di baris ini
:s/lama/baru/g        " Ganti semua di baris ini
:%s/lama/baru/g       " Ganti semua di seluruh file
:%s/lama/baru/gc      " Ganti semua, konfirmasi tiap item
:5,10s/lama/baru/g    " Ganti di baris 5 sampai 10

Flag yang berguna:

Flag Arti
g Global (semua di baris)
c Confirm (tanya dulu)
i Case insensitive
I Case sensitive

Search dengan Regex

" Cari baris yang diawali dengan "Error"
/^Error

" Cari baris yang diakhiri dengan titik koma
/;$

" Cari kata yang berdiri sendiri (whole word)
/\bkata\b

" Case insensitive search
/\cKata

" Ganti angka apapun dengan [NUM]
:%s/\d\+/[NUM]/g

7. Visual Mode

Visual Mode — Seleksi Teks

Tombol Mode
v Visual character (per karakter)
V Visual line (per baris)
Ctrl+v Visual block (kolom/blok)
gv Ulangi seleksi terakhir
o Pindah ke ujung seleksi lain

Aksi di Visual Mode

Setelah seleksi:
  d         →  hapus seleksi
  y         →  copy seleksi
  c         →  ganti seleksi
  >         →  indent ke kanan
  <         →  indent ke kiri
  ~         →  toggle case
  u         →  lowercase
  U         →  uppercase
  :         →  jalankan command di seleksi

Visual Block — Edit Multi-Baris

Tambah teks di awal banyak baris sekaligus:

1. Tekan Ctrl+v
2. Pilih baris-baris yang diinginkan dengan j/k
3. Tekan I (Insert di awal)
4. Ketik teks
5. Tekan Esc → teks ditambahkan ke semua baris!

Contoh: tambah "# " ke awal 5 baris
  Ctrl+v → 5j → I → "# " → Esc

8. Registers & Macros

Registers — Clipboard Vim

Vim punya banyak clipboard!

""        →  default register (unnamed)
"a - "z   →  named registers (a sampai z)
"0        →  yank register (hasil y terakhir)
"+        →  system clipboard
"*        →  selection clipboard (X11)
"_        →  black hole register (hapus tanpa simpan)
"ayy      →  copy baris ke register a
"ap       →  paste dari register a
"+y       →  copy ke system clipboard
"+p       →  paste dari system clipboard
:reg      →  lihat semua register

Macros — Rekam & Putar Ulang

Rekam serangkaian perintah dan putar ulang!

qa          →  mulai rekam ke register 'a'
  (lakukan editing...)
q           →  stop rekam

@a          →  jalankan macro 'a'
@@          →  ulangi macro terakhir
10@a        →  jalankan macro 'a' 10 kali
Contoh: tambah semicolon di akhir setiap baris
  qa → A; → Esc → j → q
  Jalankan: @a atau 100@a untuk 100 baris!

9. Buffers, Windows & Tabs

Buffers

File yang terbuka di memori

:e namafile.txt      " Buka file baru
:ls                  " Lihat semua buffer
:b2                  " Pindah ke buffer 2
:bn                  " Buffer berikutnya
:bp                  " Buffer sebelumnya
:bd                  " Tutup buffer saat ini

vim file1 file2      " Buka beberapa file sekaligus
:args                " Lihat daftar file argumen

Windows (Split)

Bagi layar untuk lihat banyak file

:sp namafile.txt     " Split horizontal
:vsp namafile.txt    " Split vertikal
Ctrl+w s             " Split horizontal (tanpa buka file baru)
Ctrl+w v             " Split vertikal
Ctrl+w q             " Tutup window saat ini

Navigasi antar window:

Ctrl+w h/j/k/l   →  pindah ke window kiri/bawah/atas/kanan
Ctrl+w w         →  window berikutnya
Ctrl+w =         →  samakan ukuran semua window

Tabs

Seperti tab di browser, untuk workspace terpisah

:tabnew              " Tab baru (kosong)
:tabnew file.txt     " Tab baru dengan file
gt                   " Tab berikutnya
gT                   " Tab sebelumnya
3gt                  " Pergi ke tab 3
:tabclose            " Tutup tab
:tabs                " Lihat semua tab

10. Konfigurasi (.vimrc)

File Konfigurasi Vim

# Lokasi file konfigurasi
~/.vimrc             # Vim
~/.config/nvim/init.vim  # Neovim (lama)
~/.config/nvim/init.lua  # Neovim (modern)
" Buka .vimrc langsung dari Vim
:e ~/.vimrc

.vimrc — Konfigurasi Dasar

" === Basic Settings ===
set number            " Tampilkan nomor baris
set relativenumber    " Nomor baris relatif
set tabstop=4         " Lebar tab = 4 spasi
set shiftwidth=4      " Lebar indentasi = 4 spasi
set expandtab         " Tab menjadi spasi
set autoindent        " Auto indentasi
set smartindent       " Indentasi cerdas

" === Tampilan ===
syntax on             " Aktifkan syntax highlighting
set cursorline        " Highlight baris cursor
set showcmd           " Tampilkan command di status bar
set showmatch         " Highlight bracket pasangan
set colorcolumn=80    " Garis di kolom 80

.vimrc — Search & Performa

" === Search ===
set hlsearch          " Highlight hasil search
set incsearch         " Search saat mengetik
set ignorecase        " Case insensitive search
set smartcase         " Case sensitive jika ada huruf besar

" === Performa & UX ===
set noswapfile        " Tidak buat file .swp
set nobackup          " Tidak buat file backup
set undofile          " Simpan undo history
set clipboard=unnamedplus  " Gunakan system clipboard
set mouse=a           " Aktifkan mouse

" === Leader Key ===
let mapleader = " "   " Spasi sebagai leader key

.vimrc — Custom Mappings

" === Key Mappings ===
" Simpan dengan Ctrl+S
nnoremap <C-s> :w<CR>
inoremap <C-s> <Esc>:w<CR>a

" Keluar dengan Leader+q
nnoremap <leader>q :q<CR>

" Pindah antar window lebih mudah
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" Clear search highlight
nnoremap <leader>/ :nohlsearch<CR>

11. Plugin Management

Plugin Manager

vim-plug — Plugin manager paling populer

# Install vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
" Di .vimrc
call plug#begin('~/.vim/plugged')

Plug 'tpope/vim-fugitive'           " Git integration
Plug 'preservim/nerdtree'           " File explorer
Plug 'vim-airline/vim-airline'      " Status bar keren
Plug 'junegunn/fzf.vim'            " Fuzzy finder

call plug#end()
:PlugInstall    " Install plugins
:PlugUpdate     " Update plugins
:PlugClean      " Hapus plugin yang tidak terpakai

Plugin Esensial

Plugin Fungsi
vim-fugitive Git commands dalam Vim
NERDTree File explorer sidebar
fzf.vim Fuzzy file/text search
vim-airline Status bar informatif
vim-surround Edit surrounding chars (tanda kutip, dll)
vim-commentary Toggle komentar dengan gcc
coc.nvim LSP & autocompletion
vim-gitgutter Tanda perubahan git di gutter

Neovim — Lazy.nvim (Modern)

-- ~/.config/nvim/init.lua
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
require("lazy").setup({
  { "nvim-treesitter/nvim-treesitter" },   -- Better syntax
  { "neovim/nvim-lspconfig" },             -- LSP
  { "nvim-telescope/telescope.nvim" },     -- Fuzzy finder
  { "catppuccin/nvim", name = "catppuccin" }, -- Tema cantik
  { "lewis6991/gitsigns.nvim" },           -- Git signs
})

12. Tips & Tricks

Perintah Berguna Lainnya

:sort            " Urutkan baris
:sort!           " Urutkan terbalik
:sort u          " Urutkan & hapus duplikat

:%!column -t     " Format teks sebagai tabel
:%!python3 -m json.tool  " Format JSON

:r !date         " Insert output command shell
:r namafile.txt  " Insert isi file lain

ga               " Lihat info karakter di cursor
g?               " Enkripsi ROT13 (visual mode)

Marks — Bookmark Posisi

ma              " Buat mark 'a' di posisi saat ini
'a              " Pergi ke baris mark 'a'
`a              " Pergi ke posisi exact mark 'a'
:marks          " Lihat semua marks

" Marks spesial:
'.              " Posisi perubahan terakhir
''              " Posisi sebelum lompat jauh
'^              " Posisi insert terakhir

Fold — Lipat Kode

" Manual folding
zf{motion}      " Buat fold
zd              " Hapus fold di cursor
za              " Toggle fold
zo              " Buka fold
zc              " Tutup fold
zR              " Buka semua fold
zM              " Tutup semua fold

" Set fold method
:set foldmethod=indent    " Fold berdasarkan indentasi
:set foldmethod=syntax    " Fold berdasarkan syntax

Command Line Tricks

Ctrl+p / Ctrl+n   " Navigasi history command
Tab               " Auto-complete command
Ctrl+r Ctrl+w     " Insert kata di cursor ke command line

q:                " Buka command history window
q/                " Buka search history window

" Jalankan command shell
:!ls              " Jalankan ls
:!python3 %       " Jalankan file Python saat ini
:%!sort           " Filter seluruh file lewat sort

13. Best Practices

Mindset Vim yang Benar

  • Pikirkan dalam bahasa Vim: d2w = "delete 2 words"
  • Minimal waktu di Insert Mode — masuk, edit, keluar ke Normal
  • Gunakan . (dot) untuk ulangi perubahan terakhir
  • Gunakan text objects (ciw, di") bukan navigasi manual
  • Pelajari satu fitur per hari — jangan coba semua sekaligus
❌ Cara lama:  hhhhhhhhhhhhxxxxxxxxxxx
✅ Cara Vim:   b3dw

Editing Best Practices

" Gunakan text object, bukan karakter satu-satu
ciw     " ganti kata — bukan: bbbxxxxi
di"     " hapus dalam kutip — bukan: f"ldt"
ya(     " copy termasuk kurung

" Gunakan count
3dd     " hapus 3 baris — bukan: dddd
5>>     " indent 5 baris

" Gunakan marks untuk lompat
ma ... 'a    " tandai dan kembali ke sini

Konfigurasi Best Practices

" ✅ Selalu set leader key di awal
let mapleader = " "

" ✅ Simpan undo history antar session
set undofile
set undodir=~/.vim/undodir

" ✅ Ignore file yang tidak perlu di netrw/wildmenu
set wildignore+=*.pyc,node_modules/**,.git/**

" ✅ Gunakan :help untuk semua
:help motion
:help text-objects
:help usr_01.txt    " Tutorial resmi Vim

Quick Reference

Kategori Command
Mode i insert, v visual, : command, Esc normal
Navigasi hjkl, w/b/e, 0/$, gg/G
Edit d/y/c + motion, x, p/P, u/Ctrl+r
Search /, ?, n/N, */#
Replace :%s/lama/baru/g
File :w, :q, :wq, :e namafile
Window :sp, :vsp, Ctrl+w hjkl
Buffer :ls, :bn, :bp, :bd
Macro qa...q, @a, @@
Repeat . (dot), @: (last command)

Terima Kasih

Modal editing changes everything!

vimtutor       # Mulai dari sini
:help          # Dokumentasi lengkap ada di dalam Vim