Vim

Vim là một text editor có tiếng là khó học, cơ bản vì Vim hoạt động khác với hầu hết các text editor khác thường đươc dùng như Notepad++ hay Sublime, Textmate. Chẳng phải tự nhiên mà có hàng đống Vim cheat sheet trên mạng như ở đây, hay đây, hoặc cái mà mình dùng lúc mới học: cheat sheet của viemu; tất cả những trang trên chỉ nhằm một mục đích: giúp người mới bắt đầu nhớ được các phím chức năng, các motion cũng như text object của Vim, vì thực sự là chúng rất nhiều.

Cấu hình mặc định của Vim tương thích vơi Vi, nên thực tế hầu như ai dùng Vim cũng phải cấu hình lại cả. Trong bài viết này, mình sẽ giới thiệu config của mình cùng một vài plugin mình sử dụng hàng ngày.

Plugin Manager: vim-plug

Có rất nhiều plugin manager cho vim như Vundle, Pathogen, hay Neobundle, tuy nhiên, lựa chọn của mình là vim-plug. Vim-plug nhỏ gọn, hỗ trợ cài đặt và update các plugin song song (nếu Vim hỗ trợ +python, +python3 hay +ruby a.k.a hầu hết mọi trường hợp), cho phép lazy-load plugin cũng như post-update hooks...

vim-plug đặc biệt nhỏ gọn, chỉ có 1 file duy nhất nên dễ dàng bootstrap khi mới cài đặt Vim:

if empty(glob($HOME . "/.vim/autoload/plug.vim"))
  :silent !mkdir -p ~/.vim/autoload >/dev/null 2>&1
  :silent !curl -fLo ~/.vim/autoload/plug.vim https://raw.github.com/junegunn/vim-plug/master/plug.vim >/dev/null 2>&1
endif

vim-sensible: cấu hình Vim mà ai cũng nên dùng

Như đã nói, cấu hình mặc định của Vim rất là tệ, ai dùng vim cũng đều phải tùy chỉnh lại. vim-sensible là tập hợp các cấu hình cơ bản nên có cho vim.

tslime.vim

Đây là một plugin nên có với những ai sử dụng tmux. Plugin này giúp gửi một đoạn text bất kì tới một tmux session. Sử dụng tslime.vim giúp việc test những đoạn code Ruby hay Python dễ dàng hơn:

tslime.gif

Ngoài ra, kết hợp với vim-test giúp việc TDD dễ dàng hơn bao giờ hết.

ctrlp.vim: fuzzy file search

ctrlp.vim hỗ trợ fuzzy file search bằng tên file cho Vim, Giống như Ctrl-P của Sublime vậy.

Tích hợp với git: vim-fugitive

vim-fugitive giúp ta có thế tương tác với git mà không cần thoát ra shell hay chuyển sang panel tmux khác. Mình sử dụng plugin này chủ yếu vì :Gblame:Ggrep.

splitjoin.vim

splitjoin.vim giúp chuyển đổi giữa single-line statementmulti-line statement dễ dàng. Trăm nghe không bằng một thấy:

splitjoin.gif

Một số config khác

" Map leader to <space>
let mapleader = " "
set nowrap " don't wrap lines
set tabstop=2 " a tab is two spaces
set shiftwidth=2 " an autoindent (with <<) is two spaces
set expandtab " use spaces, not tabs
set list " show invisible characters
set hlsearch " highlight matches
set ignorecase " searches are case insensitive...
set smartcase " ... unless they contain at least one capital letter

set mouse=a " enable mouse support
set cc=+1 " color column textwidth + 1

" Natural split
set splitbelow
set splitright

Di chuyển giữa các window dùng <C-J>, <C-K>...:

nore <silent> <C-K> :wincmd k<CR>
nore <silent> <C-J> :wincmd j<CR>
nore <silent> <C-H> :wincmd h<CR>
nore <silent> <C-L> :wincmd l<CR>

Map ; thành :, và dùng \ khi cần đến ;. Đồng thời, để tránh phải vươn tay bấm <ESC>, map jkkj thành <ESC>

nore ; :
nore \ ;
inore jk <Esc>
inore kj <Esc>

Copy từ http://stackoverflow.com/a/9528322 - tự động tạo folder backup, temp cũng như undo:

" Save your backups to a less annoying place than the current directory.
" If you have .vim-backup in the current directory, it'll use that.
" Otherwise it saves it to ~/.vim/_backup or . if all else fails.
if isdirectory($HOME . '/.vim/_backup') == 0
  :silent !mkdir -p ~/.vim/_backup >/dev/null 2>&1
endif
set backupdir-=.
set backupdir+=.
set backupdir-=~/
set backupdir^=~/.vim/_backup/
set backupdir^=./.vim-backup/
set backup

" Save your swp files to a less annoying place than the current directory.
" If you have .vim-swap in the current directory, it'll use that.
" Otherwise it saves it to ~/.vim/_temp, ~/tmp or .
if isdirectory($HOME . '/.vim/_temp') == 0
  :silent !mkdir -p ~/.vim/_temp >/dev/null 2>&1
endif
set directory=./.vim-swap//
set directory+=~/.vim/_temp//
set directory+=~/tmp//
set directory+=.

" viminfo stores the the state of your previous editing session
set viminfo+=n~/.vim/viminfo

if exists("+undofile")
  " undofile - This allows you to use undos after exiting and restarting
  " This, like swap and backups, uses .vim-undo first, then ~/.vim/_undo
  " :help undo-persistence
  " This is only present in 7.3+
  if isdirectory($HOME . '/.vim/_undo') == 0
    :silent !mkdir -p ~/.vim/_undo > /dev/null 2>&1
  endif
  set undodir=./.vim-undo//
  set undodir+=~/.vim/_undo//
  set undofile
endif

.vimrc của tôi

Tất cả config này đều có trên repo dot-file của mình.

All Rights Reserved