Vim Hacks 林佑安 (Cornelius) [email protected] http://c9s.blogspot.com / c9s@(plurk|twitter).com OSSF 自由軟體鑄造廠
Jan 15, 2015
Demo
To get Vim installed
• on Debian/Ubuntu: $ sudo apt-get install vim vim-gnome
• on MacOS: $ sudo port install vim vim-app
To compile your Vim
• some ./configure options:
• --with-features=tiny,normal,big,huge
• --enable-perlinterp
• --enable-rubyinterp
• --enable-pythoninterp
• --enable-multibyte
• --enable-gui , --enable-cscope etc ...
To compile your Vim
$ ./configure --prefix=/opt/local \ --enable-rubyinterp \ --enable-perlinterp \ --with-features=huge \ --enable-multibyte \ --enable-cscope \ --enable-mzschemeinterp
$ make $ make install
Basic Editing
Command Mode (start with ‘:’)Insert Mode (i,o,a)
Visual Mode (v,V,c-v)
ESC
Normal Mode
Basic Editing
1. $ vim file2. type h,j,k,l to move around.3. type i to insert some text4. <ESC> to go back normal mode5. :w to save file.6. repeat 3-5 step7. :wq
Edit your .vimrc file
$ vim ~/.vimrc
“iset nu<ESC>”
“:wq”
$ vim ~/.vimrc
Basic Options
set nocompatiblesyntax onfiletype onfiletype plugin onfiletype indent onset nuset wrapset shiftwidth=4set tabstop=4
Basic GUI Options (.gvimrc)
set langmenu=en_US.utf-8language mes en_US.UTF-8
if has('gui_mac') && has(‘gui_running’) set gfn=Monaco:h12else "set gfn=Dejavu\ Sans\ Mono\ 9 "set gfn=Andale\ Mono:h14 set gfn=Bitstream\ Vera\ Sans\ Mono\ 10 endifset guioptions+=c “use console dialog insteadset guioptions-=e “no gui tabset guioptions-=T “no Toolbarset guioptions-=m “no menuset guioptions-=r “no right-hand scrollbar
" downlaod a colorscheme you like to ~/.vim/colors/" colors billw
Insert Mode
• i I
• a A
• o O
Visual Mode
• v
• V
• Ctrl-v
Basic MotionC-d (half-page down)C-u (half-page up)C-f (full-page down)C-b (full-page up)gg (goto the first line)G (goto the last line)30gg:10 10%
Basic Motionb,w,eB,W,E
f[x] F[x] ; ,
( ) sentence{ } paragraph[ ] section
Buffer
$ vim file1 file2 file3
:bufdo tab split
:bufdo %s!pattern!string!g
:bufdo mkview
:[n]buffer:bn:bp:sb
:buffers:buffers!
Window
Ctrl-W vCtrl-W sCtrl-W hCtrl-W jCtrl-W kCtrl-W lCtrl-W xCtrl-W w
Ctrl-W _Ctrl-W |Ctrl-W q
:wincmd w:wincmd v:wincmd s
nmap <silent> <D--> :resize -5<CR> nmap <silent> <D-=> :resize +5<CR> nmap <silent> <D-]> :vertical resize +5<CR> nmap <silent> <D-[> :vertical resize -5<CR>
For MacOS
For Unix-like set winaltkeys=yes
nmap <silent> <M--> :resize -5<CR> nmap <silent> <M-=> :resize +5<CR> nmap <silent> <M-]> :vertical resize +5<CR> nmap <silent> <M-[> :vertical resize -5<CR>
Tabpage
:[n]tabdo:tabn:tabp:sb:tabs:tabs!
:tabnew:tabclose:tabfirst:tabfind:tablast
nmap tn :tabnew<CR>nmap tl gtnmap th gTnmap te :tabedit
“ split current buffer to tabpagennoremap <silent> ty :tab split<CR>nnoremap <silent> td :exec 'tabedit '.expand('%')<CR>
“ close tab ( equal to <C-w>q )nnoremap <silent> tq :tabclose<CR>
“ open new tabnnoremap <silent> tn :tabnew<CR>
“ open help in new pagennoremap <silent> th :tab help<CR>
“ move tab nnoremap <silent> tmh \ :exec ':tabmove ' . ( tabpagenr()-2 )<CR>nnoremap <silent> tml \ :exec ':tabmove ' . tabpagenr()<CR>
Syntaxsyntax.txt
Macro*macro*
Mappingmap.txt
Autocommandautocmd.txt
Cases
Case 1: Copy & Paste
• copy text between terminal vim and gui
• Solution: fakeclip plugin
Case 2: Browsing File
• Solution: nerd tree plugin
• \e to open nerd tree window
Case 3: Switching Buffer
• Solution: bufexplorer.zip
• \be to open buffer explorer
Case 4: reformating code
• Problem: Coding Style Problem
• Solution: ‘equalprg’ option
• setlocal equalprg=/path/to/your/format_prg
Case 5: code snippets
• Problem: 重複的程式碼片段
• Solution: snipmate.vim
Case 6: completion
• Problem: 懶得呼叫 C-x C-n 做 completion
• Solution: autocomplpop.vim
VimL
• variable
• function
• condition
• looping
• vim built-in functions
• command
• vim runtime path
• $VIM/
• $VIMRUNTIME/
See Also
• Vim.org
• Vim Tips wiki
• :tab help
Utilities
• Vimana
• VIM::Packager
Selected Help Section
• ‘C-editing’
• ‘completion’
• ‘tips.txt’
• ‘autocmd’
• ‘eval.txt’
vim script authorson github.com
• http://github.com/c9s
• http://github.com/kana
• http://github.com/mattn
• http://github.com/tpope
• etc...