Bắt đầu chuyển sang dùng Vim làm editor chính một cách nghiêm túc sau nhiều lần thử, bỏ cuộc và quay trở về Sublime Text.
Còn về nguyên nhân bỏ cuộc là vì không quen với VIM được, do có nhiều thứ quá khác với Sublime Text, chính xác là trên Sublime Text có mà VIM lại không có, nên lần này mình sẽ setup toàn bộ những thứ bên Sublime Text qua VIM hết.
Tuỳ theo nhu cầu bạn có thể chọn Vim, NeoVim, hoặc MacVim tuỳ thích.
Thế mình chọn cái nào à? Mình chọn NeoVim nhé, vì một tính năng rất mạnh mà NeoVim đã support sẳn TrueColour, à ờ, tóm lại cũng là màu mè thôi, cho nó đẹp.
Nếu bạn là newbie thì mình khuyến khích dùng Vim nhé.
Vim có tổng cộng 6 modes hoạt động normal, insert, visual, select, command-line, Ex-mode.
Mặc định khi mở Vim lên sẽ là mode normal.
Trong đó 3 modes mình thường được sử dụng nhất là:
normal: Dùng để di chuyển và thao tác trong đoạn text, và sẽ là mode được back lại khi ấn ESC ở mode khác.
insert: Như tên gọi, để thêm text mới vào.
visual: tương tự như normal nhưng cho phép bôi đen (select) text để thực hiện các thao tác với đoạn bôi đen đó.
Đầu tiên phải kể đến của nhà trồng được: Tutor. Mặc định trong Vim có một hệ thống Tutorial khá xịn, tại mode normal bạn gõ :Tutor và làm theo Tutorial nhé, sau khoảng 30’ bạn có thể thoải mái thao tác trong Vim.
Vừa học vừa chơi: VIM Advantures Một game trên nền web giúp bạn vừa học vừa chơi, di chuyển thao tác bằng các phím trong VIM. Bạn có thể chơi thử Level 1 rồi quyết định có mua license hay không (không free đâu nhé T_T)
OpenVim một website giúp bạn tập thao tác VIM online qua từng bài học, thực hành thẳng trên website.
Vấn đề đầu tiên khi chuyển sang VIM là cảm thấy quá nhiều thứ khác lạ và thiếu thốn, có mỗi cái màn hình đen chán phèo.
Bình tĩnh nhé, hầu hết các tính năng ở Sublime Text đều có thực hiện giống hoặc tốt hơn trong VIM nhờ vào hệ thống plugin đồ sộ cùng hệ thống có sẳn cho phép bạn tinh chỉnh nhiều thứ theo ý mình.
Và đều được định nghĩa trong file .vimrc (thường nằm ở ~/.vimrc)
Có thể cài đặt Plugin trong VIM trực tiếp bằng cách pull code từ github về và chép vào thư mục ~/.vim/bundle. Tuy nhiên, cách tốt nhất vẫn là dùng hệ thống quản lý Plugin như Vundle, Pathegon, Vim-Plug, Neo-Bundle
Cá nhân mình dùng Vim-Plug (trước đó dùng Vundle) vì Vundle hiện tại đã không còn maintain, bên cạnh đó Vim-Plug cũng đơn giản, dễ dùng, load, update plugins cũng nhanh hơn hẳn.
Có rất nhiều người share config trong VIM trên github (và các dotfiles khác như tmux, zsh) mà các bạn có thể tham khảo để dùng cho bản thân, VD như vimrc, ThoughtBot, dotfiles
Bạn có thể lên đây cóp nhặt các thứ cần thiết cho mình và ném nó vào file .vimrc, phần sau mình sẽ giới thiệu một số thứ thông dụng.
Tuy nhiên:
Don’t put any lines in your vimrc that you don’t understand.
Các phần sau bạn có thể thử nhanh qua command : hoặc sửa trong .vimrc rồi reload lại VIM. Có thể check nhanh giá trị của biến bằng command :set <variable>?, vd :set nu?
Dùng chuột, hoàn toàn có thể:
if has('mouse')
set mouse=a
endif
Copy từ VIM ra ngoài Clipboard, mặc định VIM chỉ lưu trong Register (
xem thêm) lúc bạn yank:
set clipboard=unnamedplus
Hiện line number
set nu
Tự động cập nhật khi file thay đổi (bởi chương trình khác)
set autoread
set autowrite
Tự động indent
set autoindent
set si "smart indent
Bật syntax
syntax on
Tắt các thể loại files backup, swap, khá là annoy và không cần thiết vì mình đã dùng git rồi
set nobackup
set nowb
set noswapfile
set backupdir=~/tmp,/tmp
set backupcopy=yes
set backupskip=/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*
set directory=/tmp
Để có thể tận dụng hết tất cả sức mạnh của VIM cũng như thao tác một cách nhanh nhất thì không thể nào bỏ qua tính năng map - cho phép bạn sử dụng tổ hợp phím nhanh nhất, bạn có thể xem thêm ở đây
Ví dụ mình thường map một số phím như
" Map leader key
let mapleader = "," " map leader key to ,
let g:mapleader = ","
" Fast saving
nmap <leader>w :w!<cr>
" Map Esc to jj
:imap jj <Esc>
" Hide highlight
map <silent> <leader><cr> :noh<cr>
" Move between windows
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
Nói chung nếu những phím/tổ hợp phím/command nào thường xuyên sử dụng, bạn hoàn toàn có thể map lại thành phím khác để rút ngắn thời gian thao tác của mình.
Q: Thêm/xóa file/thư mực như thế nào nhỉ, phải switch ra Terminal à?
Không cần phải ra terminal đâu, ở NERDTree bạn chỉ việc ấn phím m tại node cần thao tác, một menu sẽ hiện ra cho bạn chọn lựa
Q: Vậy còn Mini map?
A: Yup, Minimap, nhưng cá nhân mình nghĩ dùng Tagbar sẽ tiện dụng hơn.
Minimap:Tagbar:
Q: Mình hay dùng Mutitple Selection.
A: Xem nào, Multiple Selection có nhiều thứ, ta đi qua từng cái nhé:
Thêm một hàng: Mặc định ở Windows là Ctrl+Alt+Up & Ctrl+Alt+Down (OS X: Ctrl+Shift+Up & Ctrl+Shift+Down).
A: Đối với VIM, khi ở mode Normal có thể ấn o để thêm một hàng phía dưới và O để thêm phía trên và sau đó sẽ switch sang mode Insert luôn để bạn có thể bắt đầu gõ. Ngoài ra bạn có thể gõ 5o<Esc> để thêm nhanh 5 hàng, tính năng repeat tiện lợi của VIM.
Chọn, sửa nhanh nhiều vị trí: Ctrl+d hoặc Command+d
A: VIM thì mình dùng Plugin vim-multiple-cursors nhé, ngoài chức năng như Sublime Text bạn còn có thể search được bằng cả Regex
Select all bằng Alt+F3 (Windows+Linux) hoặc Ctrl+Command+g trên OS X?
A: Vẫn dùng Plugin bên trên nha, bạn xem trong wiki để tìm hiểu thêm.
Q: Còn tab thì sao?
A: Hiển nhiên rồi, ngoài ra VIM còn có thể một khái niệm nữa là Buffer, xem thêm tab ở đây và buffer ở đây
Q: Navigation bằng Ctrl + P thì sao, siêu tiện luôn
A: VIM có nhiều Plugin phục vụ cho việc này, bạn có thể dùng hàng Việt Nam chất lượng cao CtrlP hoặc dùng Fzf
Q: Search một từ trong nhiều file? Ví dụ seach chữ function trong một project có nhiều thư mục, Sublime Text thì click phải vào Folder rồi search, còn VIM thì sao, đâu có click phải vào NERDTree được?
Q: Ops, không ấn Ctrl + / để comment code như các IDE khác à?
A: Để comment code bạn cần dùng Plugin NERD Commenter và sau đó có thể map phím Ctrl + / để execute lệnh comment
Q: Các tổ hợp phím tắt thì sao nhỉ? Ví dụ như mình muốn copy nhanh toàn bộ code trong một tag hoặc function?
A: Ở mode Normal gõ yip - copy bên trong tag hoặc yap copy cả tag, ngooài ra có rất nhiều phím tắt khác, để thao tác nhanh nhất bận nên tham khảo vim cheatsheet.
Những phần bên trên chỉ là phần nhỏ thôi, bạn có thể xem thêm trong :help hoặc tự map các tổ hợp phím tắt riêng cho mình giúp tăng tốc độ làm việc.
Shock văn hóa, quá nhiều thứ để nhớ, thôi nghỉ, không VIM nữa
#
Ban đầu mình cũng không thể chuyển sang VIM ngay được, không thể nào thao tác quen được. Nếu quyết định chuyển từ từ sang, vẫn dùng Sublime Text nhưng hạn chế không dùng đến các phím arrow và pageUp/pageDown thay vào đó là dùng các phím tắt trong VIM
Đầu tiên mình cài thêm Plugin vào trong Sublime Text để làm quen dần thao tác di chuyển Vintage(ST2) hoặc Vintagous(ST3)
Cài thêm Vimium vào Chrome luôn cho ngầu. Install xong thì ấn ? để xem danh sách phím tắt nhé.
Rất nhanh và tiện, hoàn toàn thao tác bằng phím, không rờ tới chuột.