Larry’s Blog

Some Useful Vim Tips

| Comments

很久以前挖坑说介绍我常用的一些 vim 插件,回头看看那篇文章的日期发现已经是快一年前了,我的 dotfiles 也已经更新过无数次了。

今天不写插件,写写一些简单又能提高效率的 vim tips 吧。

Persistent undo

也就是将 undo 操作持久化,在你重新打开已被关闭/切换的文件时,依然可以通过 u 进行 undo 操作。

1
2
3
4
set undodir=~/.vim/.undo
set undofile
set undolevels=1000
set undoreload=10000

Save with root permission

很多时候打开了一个文件进行修改之后保存发现没有权限来进行次修改,这个时候就需要 :w !sudo tee %,可以映射个快捷键来做此事以避免每次输入那么长的命令。

1
cmap w!! %!sudo tee > /dev/null %

Highlight & Delete trailing whitespace

对于像我一样无法忍受行尾空格的,这是一个非常有用的配置。

1
2
3
4
5
6
7
8
9
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()

" Use F4 to delete all trailing whitespaces
nnoremap <silent> <F4> :let _s=@/<Bar>:%s/\s\+$//e<Bar>:let @/=_s<Bar>:nohl<CR>

Indent under insert mode

最初在 insert mode 时如果想要缩进当前行代码,不得不退出到 normal mode 然后 >>。其实 vim 在输入模式时也可以进行缩进操作,那就是 Ctrl-T (向右缩进), Ctrl-D (向左缩进)。

Last place of insert mode

gi: gi puts you into insert mode at the last place that you were in insert mode the last time.

Reselct last visual region

gv: reselect last visual region

DO NOT auto-indent lines when pasting

1
2
nnoremap <F3> :set invpaste paste?<CR>
set pastetoggle=<F3>

当然,想要更高效的使用 vim 进行工作,就应该配合那些优秀的插件进行使用,然后用 vundle 进行管理,一切都会变得很美好。

附上我选用的插件列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
" non GitHub repos
Bundle 'git://git.wincent.com/command-t.git'

" vim-scripts repos
Bundle 'a.vim'
Bundle 'bufexplorer.zip'
Bundle 'genutils'
Bundle 'matchit.zip'
Bundle 'scratch.vim'
Bundle 'scrollfix'
Bundle 'sudo.vim'
Bundle 'taglist.vim'
Bundle 'tComment'

" original repos on GitHub
Bundle 'larrylv/ShowMarks'
Bundle 'larrylv/vim-snippets'
Bundle 'tpope/vim-ragtag'
Bundle 'tpope/vim-rails'
Bundle 'tpope/vim-markdown'
Bundle 'tpope/vim-surround'
Bundle 'tpope/vim-fugitive'
Bundle 'tpope/vim-haml'
Bundle 'tpope/vim-repeat'
Bundle 'tpope/vim-speeddating'
Bundle 'tpope/vim-abolish'
Bundle 'tpope/vim-dispatch'
Bundle 'Shougo/neocomplcache'
Bundle 'Shougo/neosnippet'
Bundle 'scrooloose/nerdtree'
Bundle 'scrooloose/syntastic'
Bundle 'mileszs/ack.vim'
Bundle 'Lokaltog/vim-powerline'
Bundle 'flazz/vim-colorschemes'
Bundle 'vim-ruby/vim-ruby'
Bundle 'depuracao/vim-rdoc'
Bundle 'pangloss/vim-javascript'
Bundle 'docunext/closetag.vim'
Bundle 'godlygeek/tabular'
Bundle 'Townk/vim-autoclose'
Bundle 'tudorprodan/html_annoyance.vim'
Bundle 'majutsushi/tagbar'
Bundle 'hail2u/vim-css3-syntax'
Bundle 'airblade/vim-gitgutter'
Bundle 'ervandew/supertab'
Bundle 'michaeljsmith/vim-indent-object'

Comments