2015-6-2-提高你的Vim效率
2015-06-02 10:55
387 查看
译自http://sheerun.net/2014/03/21/how-to-boost-your-vim-productivity/
转载请注明出处
注:以下操作均在 _vimrc文件中
我用了很长时间的
这让我用Vim的体验天翻地覆。现在我可以用两只大拇指按
输入
输入
复制/粘贴 ,通过
进入可视化模式
我建议你们也找到你们最常用的行为,并映射它们。
这让我可以:
按
再按
再按
…
按
似乎
这种方式让
它让我可以这样使用查找替换:
我用
我输入
我输入
P.S. 一种替代方案是使用
输入
按 Enter 到达文件结尾.
按Backspace 到达文件开头.
nnoremap G
nnoremap gg
由于
而且由于测试是在tmux分屏中进行的,所以我可以在运行测试的时候同时查看代码和进行下一步开发。
这个
如果你把它粘贴到你的
poor system clipboard handling
difficult navigation between Vim and Tmux windows
difficult execution of tmux commands (C-b)
hard to use copy mode in tmux
我花了很长时间将它调整正确,这是结果:
将
有些人用
绑定
想想看.
Use
为了复制到系统剪贴板上,你需要提前
我也推荐使用以下的绑定来划分tmux窗口:
查看我的tmux.conf 获取更多.
我建议使用 vim-scripts/gitignore.
你不需要手动管理git子模块(pathogen)
它可以并行地安装和更新插件
它可以像YouCompleteMe一样build插件:
或者从本地获取,比如 pry 插件:
YouCompleteMe
ack.vim (ag.vim is also good)
tpope/vim-commentary
tpope/vim-rsi
tpope/vim-endwise
tpope/vim-fugitive mainly for
tpope/vim-repeat
tpope/vim-sleuth
mmozuras/vim-github-comment
vim-airline,使用以下配置:
我是一个Ruby开发者,所以我用一些Ruby插件:
tpope/vim-rails
vim-textobj-rubyblock (
ruby_pry
AndrewRadev/splitjoin.vim ,使用以下快捷键映射:
你可以用vim-sensible来做,但这对我来说不够。我开发了[vimrc][]https://github.com/sheerun/vimrc]插件,用了一些真正好用的默认配置(特别是对Ruby开发者来说) 使得
这意味着我不用去乱改
我也开发了我的 dotfiles 这样我的开发环境就可以在几秒钟内配置好。
响应可以是很快地在
提升你Vim效率的,又是什么呢?
转载请注明出处
注:以下操作均在 _vimrc文件中
1. 将Space 设置为 Leader
Leader是一个很棒的概念。它将按键组合转变为按键时序。因为当我用了这个之后,我就很少按Ctrl-组合键来做事了。
我用了很长时间的
Leader键之后意识到,我可以把
Leader键映射到我键盘上最好按的键上,比如空格键Space.
[code]let mapleader = "\<Space>"
这让我用Vim的体验天翻地覆。现在我可以用两只大拇指按
Leader键,而我的手指一直保持在键盘主行上。
Leader是那么好用,以至于我都开始把它滥用在我诸多的快捷键绑定上了。
2. 把你最常用的行为映射到Leader上
我找出了我使用Vim时最耗时的行为。我将它们映射到我的Leader键上,像这样做:
输入
<Space>o打开新文件:
[code]nnoremap <Leader>o :CtrlP<CR>
输入
<Space>w保存文件 (比
:w<Enter>快得多):
[code]nnoremap <Leader>w :w<CR>
复制/粘贴 ,通过
<Space>p和
<Space>y:
[code]vmap <Leader>y "+y vmap <Leader>d "+d nmap <Leader>p "+p nmap <Leader>P "+P vmap <Leader>p "+p vmap <Leader>P "+P
进入可视化模式
<Space><Space>:
[code]nmap <Leader><Leader> V
我建议你们也找到你们最常用的行为,并映射它们。
3. 使用”区域扩张”功能
我用terryma/vim-expand-region这个插件,并有以下映射:
[code]vmap v <Plug>(expand_region_expand) vmap <C-v> <Plug>(expand_region_shrink)
这让我可以:
按
v选择一个字符
再按
v把选择区域扩张到一个单词
再按
v扩张到一个段落
…
按
<C-v>回到上一次选择的区域,如果我按
v按多了的话
似乎
vvv比
vp要慢,但实际上我不需要提前想要选择什么,要用什么组合键。
这种方式让
v代替了
viw,
vaw,
vi",
va",
vi(,
va(,
vi[,
va[,
vi{,
va{,
vip,
vap,
vit,
vat, … 你懂的.
4. 重新发现文本查找
我从未满意于Vim的查找替换,直到我在Vim wiki上发现了以下段落:[code]vnoremap <silent> s //e<C-r>=&selection=='exclusive'?'+1':''<CR><CR> :<C-u>call histdel('search',-1)<Bar>let @/=histget('search',-1)<CR>gv omap s :normal vs<CR>
它让我可以这样使用查找替换:
我用
/something来查找something
我输入
cs, 替换第一个匹配, 然后输入
<Esc>
我输入
n.n.n.n.n. 查看和替换所有的匹配
P.S. 一种替代方案是使用
cgn(从Vim 7.4起).
5. 发明更酷的按键映射
我日常使用下面这些快捷键,它们为我节省了数以月计的时间。自动跳到你所粘贴文本的最后
我可以粘贴多行文本任意多次,只要输入ppppp.
[code]vnoremap <silent> y y`] vnoremap <silent> p p`] nnoremap <silent> p p`]
避免剪贴板缓存替换:
我可以选择和剪切某些文本,不用担心我的剪贴板缓存被我刚刚删除的文本替换掉(将命令放在~/vimrc的结尾).
[code]" vp doesn't replace paste buffer function! RestoreRegister() let @" = s:restore_reg return '' endfunction function! s:Repl() let s:restore_reg = @" return "p@=RestoreRegister()\<cr>" endfunction vmap <silent> <expr> p <sid>Repl()
输入
12<Enter>跳到12行 (
12G会累断我的手的 )
按 Enter 到达文件结尾.
按Backspace 到达文件开头.
nnoremap G
nnoremap gg
快速选择你所粘贴的文本:
[code]noremap gV `[v`]
阻止窗口弹出:
[code]map q: :q
6. 让你的单元测试体验更加无缝(Seamless)
我使用 vim-vroom 并且适当配置tmux来做我的测试.
由于
vim-room用
<Leader>r来执行测试, 而我用
<Space>作为我的Leader键,所以我按
<Space>r, 测试就马上执行了.
而且由于测试是在tmux分屏中进行的,所以我可以在运行测试的时候同时查看代码和进行下一步开发。
7. 使用Ctrl-Z切换回Vim
我经常需要在shell里执行一些命令。为了这样做,我得按Ctrl-z暂停Vim,输入命令,然后按
fg<Enter>切换回来。
这个
fg部分太伤人了。我想要再按
Ctrl-z就能切换回Vim。我找不到一个解决方案,所以我自己开发了一个,它在ZSH下工作完美:
[code]fancy-ctrl-z () { if [[ $#BUFFER -eq 0 ]]; then BUFFER="fg" zle accept-line else zle push-input zle clear-screen fi } zle -N fancy-ctrl-z bindkey '^Z' fancy-ctrl-z
如果你把它粘贴到你的
~/.zshrc中,你也能在你的shell和Vim之间快速切换了。试试。
8. 正确设置Tmux
Tmux + OS X + Vim的组合相当艰辛:poor system clipboard handling
difficult navigation between Vim and Tmux windows
difficult execution of tmux commands (C-b)
hard to use copy mode in tmux
我花了很长时间将它调整正确,这是结果:
将 <C-Space>
作为你tmux的新前缀(prefix).
有些人用 <C-a>, 但是我用这个快捷键来回到行首, 所以它就不行了. 再加上
<C-Space>跟我后面提到的快捷绑定配合起来更好。
[code]unbind C-b set -g prefix C-Space bind Space send-prefix
绑定 <Space>
来进入复制模式(copy mode).
想想看. <C-Space><Space>让你在tmux中直接进入复制模式.
[code]bind Space copy-mode bind C-Space copy-mode
Use y
and reattach-to-user-namespace
(on OSX)
为了复制到系统剪贴板上,你需要提前 brew install reattach-to-user-namespace.
[code]bind-key -t vi-copy y \ copy-pipe "reattach-to-user-namespace pbcopy"
Use vim-tmux-navigator
那样你就可以在vim和tmux的任何组合间无缝切换,只要使用<C-h>,
<C-j>,
<C-k>,
<C-l>.
我也推荐使用以下的绑定来划分tmux窗口:
<C-Space>land
<C-Space>j。这比按
<C-Space>%和
<C-Space>|要快得多.
[code]bind j split-window -v bind C-j split-window -v bind l split-window -h bind C-l split-window -h
查看我的tmux.conf 获取更多.
9. 为Git项目使用Ctrl-P
将下面的内容放入你的.vimrc(它配置了Ctrl-P来使用git或者silver搜索器用于自动填充):
[code]let g:ctrlp_use_caching = 0 if executable('ag') set grepprg=ag\ --nogroup\ --nocolor let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' else let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard', 'find %s -type f'] let g:ctrlp_prompt_mappings = { \ 'AcceptSelection("e")': ['<space>', '<cr>', '<2-LeftMouse>'], \ } endif
我建议使用 vim-scripts/gitignore.
10. 使用包管理器
neobundle.vim 用来管理我的Vim插件效果拔群:你不需要手动管理git子模块(pathogen)
它可以并行地安装和更新插件
它可以像YouCompleteMe一样build插件:
[code]NeoBundle 'Valloric/YouCompleteMe', { \ 'build' : { \ 'mac' : './install.sh', \ }, \ }
或者从本地获取,比如 pry 插件:
NeoBundle 'rking/pry-de', {'rtp': 'vim/'}
11. 使用Vim 插件
这里是一些我用来提升效率的一部分通用插件:YouCompleteMe
ack.vim (ag.vim is also good)
tpope/vim-commentary
tpope/vim-rsi
tpope/vim-endwise
tpope/vim-fugitive mainly for
:Gblame
tpope/vim-repeat
tpope/vim-sleuth
mmozuras/vim-github-comment
vim-airline,使用以下配置:
[code]NeoBundle 'bling/vim-airline' let g:airline_theme='powerlineish' let g:airline_left_sep='' let g:airline_right_sep='' let g:airline_section_z=''
我是一个Ruby开发者,所以我用一些Ruby插件:
tpope/vim-rails
vim-textobj-rubyblock (
var,
virfor selecting ruby blocks)
ruby_pry
AndrewRadev/splitjoin.vim ,使用以下快捷键映射:
nmap sj :SplitjoinSplit<cr> nmap sk :SplitjoinJoin<cr>
12. 在你服务器上加速Vim的配置
我常常需要在服务器上用Vim来配置他们。不幸的是Vim没有提供自适应的默认配置。你可以用vim-sensible来做,但这对我来说不够。我开发了[vimrc][]https://github.com/sheerun/vimrc]插件,用了一些真正好用的默认配置(特别是对Ruby开发者来说) 使得
~/.vimrc成为单一的Vim配置的源。它也包括了一个更好的默认scheme, 包管理器(package manger), 以及多语言语法支持.
这意味着我不用去乱改
~/.vim文件夹来配置Vim。在我的服务器上安装Vim简单至极:
[code]git clone --recursive https://github.com/sheerun/vimrc.git ~/.vim
我也开发了我的 dotfiles 这样我的开发环境就可以在几秒钟内配置好。
Introspect!
一个好的Vim配置的关键是,在你的开发过程中,你持续不断地识别出你遇到的问题并对他们做出响应。响应可以是很快地在
.vimrc中设置一个映射, 一次google, 在 IRC上问一个问题, 不管什么.
提升你Vim效率的,又是什么呢?
相关文章推荐
- Pool of Argument Topics 11-20
- sz与rz命令
- Oracle表分区(经典)
- Apache FileUpload详细介绍
- Javascript中正则表达式详解(转载)
- 多余预留清除方法
- ARM GCC中内联汇编语法
- visaul studio 2013部分快捷键
- NoSQL的价值到底在哪里?
- 54. C# -- 泛型(Generic)
- Node.js事件发射器
- C/C++中qsort()以及sort()的用法
- 适配器模式(Adapter)
- 动物怎么叫(2)
- VC开发中HEAP CORRUPTION DETECTED错误
- 黑马程序员-java之可变参数
- qt release打包发布
- kettle使用log4j管理输出日志
- php 操作数组 (合并,拆分,追加,查找,删除等)
- oracle 的rowid和rownum