Vim
Bài đăng này đã không được cập nhật trong 3 năm
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:
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
và :Ggrep
.
splitjoin.vim
splitjoin.vim giúp chuyển đổi giữa single-line statement và multi-line statement dễ dàng. Trăm nghe không bằng một thấy:
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 jk
và kj
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