vim 编辑神器

简介:
  1. 使用空格键做为Leader(热键)

Leader是个非常有创意的设计,通过不同按键的顺序操作可以执行各种命令,而不需要通过组合键的方式,自从使用Leader之后我就很少使用ctrl-xxx的这种组合键。

长久以来我都是使用 , 做为Leader,直到我意识到我可以使用键盘上更加好用的捷按键:空格键()。

let mapleader = "<Space>"

这个完全颠覆了我的 Vim 操作效率,我现在可以使用双手任何一个大拇指进行操作,同时其它手指可以保持在键盘的主键区。因为 Leader 相当容易使用,所以我就将各种常用的操作进行了 Leader 映射。

  1. 将最常用的操作映射到 Leader 操作

我首先识别出最经常使用的操作,并将它们映射到 Leader 操作,我经常是这么使用的:

使用 o 创建一个新文件:

nnoremap o :CtrlP

使用 w 保存文件(比 :w 明显快得多):

nnoremap w :w

使用 p 与 y 进行剪切板拷贝、粘贴:

vmap y "+y

vmap d "+d

nmap p "+p

nmap P "+P

vmap p "+p

vmap P "+P

使用 进入 Vim 编辑模式:

nmap V

我强烈建议你找到最常用的操作并将其映射到 Leader 。

  1. 使用区域扩展功能

为插件 terryma/vim-expand-region 做按键映射:

vmap v (expand_region_expand)

vmap (expand_region_shrink)

这样我就可以:

按一次 v 选择一个字符。

再按一次 v 自动扩展选择一个单词。

再按一次 v 自动扩展选择一段代码。

以此类推…

按 回退上一次的选择操作。

虽然 vvv 貌似比 vp 的操作更慢,但使用这种方式时,我压根就不需要考虑当前要选择哪些以及应该使用哪个组合键进行操作。

这么一来 v 把诸如 viw, vaw, vi", va", vi(, va(, vi[, va[, vi{, va{, vip, vap, vit, vat, … 这些操作都给替代了,这下你懂了吧。

  1. 找到文本查找操作工具

我一直都不喜欢 Vim 中的查找和替换操作,直到我在 Vim wiki 找到了以下的配置:

vnoremap s //e=&selection=='exclusive'?'+1':''

:<C-u>call histdel('search',-1)<Bar>let @/=histget('search',-1)<CR>gv

omap s :normal vs

这个直接替代了我常用的操作序列:

使用 /something 查找

使用 cs 替换第一个,然后按 键

使用 n.n.n.n.n. 查找以及替换余下匹配项。

PS: 也可以考虑使用 Vim 7.4 提供的 cgn 命令。

  1. 尝试更多更棒的键盘映射

我每天都在使用这几个快捷操作键,估计这已经帮我省出了几个月时间。

自动跳转到粘贴文本的最后

使用 ppppp 进行多行多次粘贴操作

vnoremap y y`]

vnoremap p p`]

nnoremap p p`]

避免缓冲区的内容在粘贴后被覆盖

通过以下的配置可以避免缓冲区的内容被删除的文本内容所覆盖(放到~/.vimrc文件的最后)

" vp doesn't replace paste buffer

function! RestoreRegister()

let @" = s:restore_reg

return ''

endfunction

function! s:Repl()

let s:restore_reg = @"

return "p@=RestoreRegister()"

endfunction

vmap p Repl()

译注:这里没有Title,估计是作者漏了,加了个。

在文件中快速跳转

通过 12 跳转到第 12 行 (12G 我觉得不称手)

按 跳到行文件末尾。

按 回到文件开始。

nnoremap G

nnoremap gg

快速选择粘贴的文本

noremap gV [v]

关闭无聊的窗口提示

map q: :q

  1. 提高单元测试执行效率

我用 vim-vroom 插件以及相应的 tmux 配置来进行我的测试。

vim-room 缺省使用 r 执行测试,由于我已将 Leader 映射为 ,因此我通过 r 来运行测试工具。

由于测试在 tmux 的单独窗口运行,因此我可以边看测试进展共修订我的代码。

  1. 使用 Ctrl-Z 返回 Vim

我经常要在shell下执行一些命令,我通过 Ctrl-Z 挂起 Vim ,在完成 shell 命令执行之后,通过 重新回到 Vim 。

使用 fg 退回 Vim 让我觉得难受,我只想通过 Ctrl-Z 在 Vim 与 Shell 之间切换,不过我没有找到解决方法,因此我写了个在 ZSH 下完美运行的脚本:

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 之间快速切换,你真值得去试试看。

  1. 正确地配置 Tmux

在 OS X 下使用 Tmux 和 Vim 工具非常不方便,因为:

系统的剪切板处理功能很弱

Vim 与 Tmux 的窗口切换操作不同

Tmux 下执行命令的热键不同 ( 使用 C-b )

在 Tmux 中拷贝模式超难用

我花了非常多的时间去修正上述配置,具体可以见以下:

配置使用 作为 tmux 的热键

有些人习惯使用 作为热键,不过我是用这个热键回到行首,所以我这里就不细说了。使用 的方式会更好用,原因我一会再说:

unbind C-b

set -g prefix C-Space

bind Space send-prefix

使用 进入拷贝模式

设想一下,使用 就可以直接进入 Tmux 的拷贝模式有多方便。

bind Space copy-mode

bind C-Space copy-mode

使用 y 和 reattach-to-user-namespace (基于 OSX)

在使用系统的剪切板之前,你需要先执行 brew install reattach-to-user-namespace

bind-key -t vi-copy y

copy-pipe "reattach-to-user-namespace pbcopy"

使用 vim-tmux-navigator

你要使用 ,,, 这几个快捷键在 vim 和 tmux 的各种窗口内快速切换。

同时我建议使用 l 和 j 的映射配置来进行 Tmux 窗口分割操作,这个绝对比用 % 和 | 来得快:

bind j split-window -v

bind C-j split-window -v

bind l split-window -h

bind C-l split-window -h

参看我的 tmux.conf 文件,这里有更多的干货。

  1. 提高 Git 工程中 Ctrl-P 的执行效率

将下面的内容添加到你的 .vimrc 文件中(配置使用 来使用 git 或 silver 查找工具来自动补全):

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 插件。

  1. 使用包管理器

neobundle.vim 是一个强大的管理 Vim 插件的工具:

你不需要手工管理 git 的子库(submodules)

能够并行地安装以及更新插件

它支持 YouCompleteMe 这类需要 build 的插件

NeoBundle 'Valloric/YouCompleteMe', {

   'build' : {

       'mac' : './install.sh',

      },

   }

出同样支持 pry 这类支持打补丁的插件:

NeoBundle 'rking/pry-de', {'rtp': 'vim/'}

  1. 充分使用 Vim 的插件的优点

YouCompleteMe

ack.vim(ag.vim 也不错)

tpope/vim-commentary

tpope/vim-rsi

tpope/vim-endwise

tpope/vim-fugitive 主要使用 :Gblame

tpope/vim-repeat

tpope/vim-sleuth

mmozuras/vim-github-comment

vim-airline 并加上以下配置:

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,vir 查找 ruby 代码块)

ruby_pry

AndrewRadev/splitjoin.vim 配置以下映射 nmap sj :SplitjoinSplit nmap sk :SplitjoinJoin

  1. 在服务器上快速配置 Vim

我经常需要服务上使用 Vim 进行配置,不幸的是 Vim 的缺省配置相当不合理。

一种方案是使用 vim-sensible 插件来生成压缩包,不过这个对我来说不够好用。我写 vimrc 的插件来对 Vim 做合理的初始化(特别是对 Ruby 开发者),这个插件配置 Vim 只使用 ~/.vimrc 作为配置文件,同时它还包含了优化的配色、包管理工具以及多种开发语言的语法着色。

这意味着我不需要手工配置服务器上的 ~/.vim 目录,而是通过以下操作就可以方便地在服务器上配置 Vim 环境:

git clone --recursive https://github.com/sheerun/vimrc.git ~/.vim

我还写了个 dotfiles (https://github.com/sheerun/dotfiles),用于快速配置我的开发环境。

思考

用好 Vim 的关键在于,你要在软件开发过程中不断发现你所遇到的 Vim 问题,并积极处理它们。

处理方法可以是在 .vimrc 中添加键盘映射,或是在 google 上查找解决方案,要不就在 IRC 上提问,或者其他方法。

你用什么方法提高了 Vim 的使用效率?

参考文献

[2]H. Berenson, P. Bernstein, J. Gray, J.Melton, E. O’Neil,and P. O’Neil. A critique of ANSI SQL isolation levels. InProceedings of the SIGMOD International Conference on Management of Data, pages1–10, May 1995.

[3]Michael J. Cahill, Uwe Röhm, and Alan D.Fekete. 2008. Serializable isolation for snapshot databases. In SIGMOD ’08:Proceedings of the 2008 ACM SIGMOD international conference on Management of data, pages 729–738, New York, NY, USA. ACM.

[4]Michael James Cahill. 2009. Serializable Isolation for Snapshot Databases. Sydney Digital Theses. University of Sydney, School of Information Technologies

[5] A. Fekete, D. Liarokapis, E. O’Neil, P.O’Neil, andD. Shasha. Making snapshot isolation serializable. www.codexueyuan.com In ACM transactions on database systems, volume 39(2), pages 492–528, June 2005.

相关文章
|
6月前
|
NoSQL Linux Shell
Linux下的系统编程——vim/gcc编辑(二)
Linux下的系统编程——vim/gcc编辑(二)
66 0
Linux下的系统编程——vim/gcc编辑(二)
|
6月前
|
开发工具
3.vim(vi)模式之一:编辑模式
3.vim(vi)模式之一:编辑模式
52 0
|
12天前
|
开发工具
用 Vim 编辑 Markdown 时直接粘贴图片
介绍一款 Vim 插件,可以帮助提升编辑 Markdown 时的从剪贴板粘贴图片的效率和体验。
26 2
|
4月前
|
开发工具
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
|
3月前
|
Unix Linux 开发工具
但凡会点Vim编辑技巧,不至于被说成是很水的网工了。
但凡会点Vim编辑技巧,不至于被说成是很水的网工了。
|
5月前
|
程序员 开发工具
Vim命令大全:掌握编辑利器
Vim命令大全:掌握编辑利器
|
5月前
|
开发工具
Vim 编辑器:高效文本编辑的瑞士军刀
**Vim 概览:** Vim 是一个功能丰富的文本编辑器,以其高度可定制性著称。文章介绍了 Vim 的高效使用技巧,包括快捷打开文件、命令行模式下的常用命令、查找与替换、删除和复制文本。还讨论了配置 `.vimrc` 文件以自定义设置,如改变 leader 键、设置缩进和高亮,并展示了安装插件如 vim-airline 和 vim-snazzy 的方法。通过这些技巧,用户能提升 Vim 使用效率。
61 5
|
6月前
|
Linux 程序员 开发工具
编辑之道:掌握Linux中Vim与Vi的简单使用
编辑之道:掌握Linux中Vim与Vi的简单使用
48 1
|
6月前
|
程序员 开发工具
|
Shell Linux 开发工具
【异常解决】vim编辑文件时提示 Found a swap file by the name “.start.sh.swp“的解决方案
【异常解决】vim编辑文件时提示 Found a swap file by the name “.start.sh.swp“的解决方案
449 0