Di cư từ Sublime Text sang VIM
vim
22
Sublime Text
4
White

Triet Pham viết ngày 14/09/2017

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.

Vì sao phải dùng VIM?

  1. Hầu hết thời gian mình đều làm việc trong terminal nên chuyển editor sang VIM luôn cho tiện.
  2. Việc di chuyển trong VIM nhanh và thuận tiện hơn so với các editor/IDE khác (dĩ nhiên nếu không dùng VIM mode).
  3. Hạn chế sử dụng chuột để tăng tốc độ thao tác.
  4. Nhiều thứ để custom phù hợp với nhu cầu, khả năng tùy biến cao.
  5. Làm màu, trông có vẻ giống hắc cơ.
  6. Động lực để chuyển sang bàn phím 60% để mang đi mang về cho tiện ._.

Cài đặ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é.

Link download & hướng dẫn cài đặt bên dưới nhé:

Sử dụng Vim

Mở terminal lên và gõ vim để bắt đầu nào (Windows thì bạn click vào cái icon sau khi cài đặt của nó nhé).

Các vấn đề cơ bản

Mode

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 đó.

Một vài phím và lệnh cơ bản

  • [...]
  • Sau khi viết một đoạn và thấy quá lười nên thôi mấy bạn xem bài của @huytd ở đây nha, hình ảnh đẹp và rõ ràng dễ hiểu Làm quen VIM trong 5 phút

Học VIM nhanh hơn, vui hơn, thông minh hơn

  1. Đầ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.
  2. 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)
  3. 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.
  4. Learn Vimscripts the Hard Way một ebook hướng dẫn các bạn nâng trình độ dùng VIM lên một tầm cao mới

Di cư từ Sublime Text sang VIM

Lần đầu tiên với VIM luôn là trải nghiệm chán phèo, một màn hình đen thui trống huơ trống hoác, chả biết làm gì với nó.
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)
alt text

Plugin management

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ài đặt: https://github.com/junegunn/vim-plug#installation
  • Cách dùng: https://github.com/junegunn/vim-plug#usage
    • Thêm các plugins cần dùng trong file .vimrc
    • Lưu lại và reload file .vimrc (có thể reload nhanh bằng command :source % mà không cần khởi động lại VIM)
    • :PlugInstall để cài đặt plugins
    • Ngoài ra :PlugUpdate để update toàn bộ plugins, hoặc :PlugClean để clean các plugins nào không còn nằm trong .vimrc, có thể xem thêm ở đây alt text

Dot file, .vimrc, config cho vim

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 vấn đề thường gặp khi bắt đầu dùng VIM

Theme

Cách nhanh nhất để có được màu sắc trên VIM là sử dụng theme.
Có rất nhiều theme được public trên github cho các bạn sử dụng hoặc tùy biến, ví dụ một vài cái như:

Bạn có thể search trên Github hoặc Google, có rất nhiều theme, cơ bản là cộng đồng developer rất nhiều người thích làm màu :trollface:.

Cài đặt

Bên dưới mình sẽ sử dụng vim-plug, và sử dụng theme Gruvbox

  • Edit ~/.vimrc (nếu chưa có thì bạn cứ tạo nhé) . Trong terminal gõ lệnh:
$ vim ~/.vimrc
call plug#begin('~/.vim/plugged')

Plug 'morhetz/gruvbox'

" Initialize plugin system
call plug#end()

" Set colorscheme
colorscheme gruvbox

" Set dark background
set background=dark
  • Save lại :w sau đó thoát Vim ra vào lại hoặc có thể reload luôn trong Vim bằng lệnh :source %, sau đó dùng lệnh :PlugInstall để cài đặt.

  • Mở vim thử một file và trải nghiệm nào. So sánh trước và sau:
    Do mình dùng iTerm2 nên có vẻ mặc định nó có màu sẳn, nhưng sau khi gắn theme vào thì trông vẫn sexy hơn nhiều :sparkling_heart:
    alt text
    Thử với theme Dracula Plugin 'dracula/vim'
    colorscheme gruvbox
    alt text

Các config quen thuộc

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

Map key

Để 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.

Nhưng vẫn chưa giống SublimeText?

Q: VIM cùi bắp, không có auto complete này.
A: Vim có nhiều Plugin support auto-complete như YouCompleteMe, neocomplete alt text
Q: Làm thế nào để Split Screen đây?
A: Dùng command :split & vsplit để chia màn hình ngang và dọc. Xem thêm để làm việc nuột hơn nà.

Q: Làm sao để di chuyển giữa các panes (màn hình)?
A: Dùng chuột click cũng được, hoặc tốt nhất dùng tổ hợp phím <C-W>j, <C-W>k, <C-W>l, <C-W>h. <C> ở đây là phím Ctrl.

Q: VIM có SideBar folders không?
A: Có plugin support nhé NERDTree
alt text

Q: Thêm/xóa file/thư mực như thế nào nhỉ, phải switch ra Terminal à?
A: 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
alt text

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:alt text
Tagbar:alt text
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é:

  1. 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.

  2. 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
    alt text

  3. 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
alt text

Q: Mấy cái hình mũi tên tab trong các ảnh demo là gì thế, sao của mình không có?
A: Airline nhé, vừa giúp bạn thể hiện tab ở trên đẹp hơn còn giúp hiển thị một số thứ khác như mode, file changed
alt text

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
alt text
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?
A: VIM bạn có thể search bằng built-in của VIM là :grep, :lgrep, :vimgrep, :lvimgrep http://vim.wikia.com/wiki/Find_in_files_within_Vim, cá nhân mình dùng ack.vim kết hợp cùng the_silver_searcher
alt text

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 arrowpageUp/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é.

alt text

Rất nhanh và tiện, hoàn toàn thao tác bằng phím, không rờ tới chuột.

Tiếp theo thì làm gì?

  • Tùy theo ngôn ngữ mà bạn đang dùng mà bạn có thể cài thêm cái plugin hổ trợ để viết code nhanh hơn, tốt hơn, ít bug hơn.
  • Nếu chức năng nào đó mà bạn quen dùng nhưng không có hãy mạnh dạn tùy biến vimrc hoặc Google thử, hầu hết sẽ có thứ bạn cần.
  • Sao khi đã thao tác nhanh rồi thì việc tiếp theo là đi... khè mấy đứa khác thôi :trollface:

Chúc các bạn may mắn.

Triet 19-02-2017

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Triet Pham

7 bài viết.
92 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
35 7
(Ảnh) Data system Ngày nay do sự phát triển rất nhanh về phần cứng nên hầu hết các ứng dụng không còn phát triển theo hướng tối ưu hóa về tốc đ...
Triet Pham viết 1 năm trước
35 7
White
23 0
(Ảnh) Slow query là gì? Khi các câu query chậm hơn một thời gian nhất định tùy theo bạn định nghĩa, ví dụ chậm hơn 50ms, thì các câu query đó đư...
Triet Pham viết hơn 1 năm trước
23 0
White
23 3
Các thuật toán sắp xếp newsfeed Một trong những tính năng thường gặp của những trang tin tức/mạng xã hội là newsfeed. Thông thường các trang nà...
Triet Pham viết 8 tháng trước
23 3
Bài viết liên quan
White
2 5
Thường xuyên làm việc với các mã màu (CSS), trí nhớ không tốt và cũng như nhìn vào đám chữ chằng chịch chịch xxx hơn 8h mỗi ngày. Khiến cho bạn cũn...
tuds viết 2 năm trước
2 5
White
14 12
Một vài thủ thuật vim mới biết, ghi lại cho khỏi quên Căn lề các cột dữ liệu Để căn lề ấn phím esc (để sang command mode) :%column t Chọn th...
studybot viết hơn 3 năm trước
14 12
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
7 bài viết.
92 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!