c_joewang的专栏 (转)
vsvim安装到vs2010后可以使用绝大部分原生vim的编辑功能,包括宏录制,也可以通过配置设置键盘映射,关于支持的编辑功能等可以参考上面链接去查看相关文档。
Vim通过使用前置键来扩展键盘映射,vsvim也支持前置键来做vim键盘命令扩展。Vsvim的好处是跟vs2010的功能结合起来,通过键盘映射可以直接通过命令来调用vs的功能。
最简单的比如保存文件,在vsvim的配置文件中加上:
nmap <Leader>w :w<CR>
当用vim模式编辑好代码文件时,(我使用分号做为Leader键盘)在normal模式下直接键入 ;w 就可以保存文件,非常方便和快速,这个比使用ctrl+s要优雅得多。
还有例如关闭文件等:
nmap <Leader>q :q<CR>
以上列出的功能原生vim本身也同样支持。在vs中这个功能得到扩展,例如我还可以通过命令启动编译,启动调试这样的功能。
在vsvim的配置文件中添加:
nmap <Leader>vb :vsc Build.BuildOnlyProject<CR>
nmap <Leader>vc :vsc Build.Compile<CR>
以上命令是在normal下直接键入 ;vb(分号+vb字母)就可以调用编译生成命令,
直接键入 ;vc 可以启动编译
在上面的配置中以 :vsc 开头的命令可以调用vs键盘方案中设置的功能,在vs的tool->environment->KeyBoard中:
Vs这个选项也是非常强大的,几乎把所以在vs上可视化操作都列在表里,包括vs和其插件的各种功能,并且可以自定义各种键盘快捷键。这个功能被vsvim插件应用到,并且可以很自由的通过上面那种:vsc 的格式通过vsvim的键盘命令来调用。
例如我们常用的va插件的功能,在键盘快捷键列表中也能找到:
这个是va插件常用的在导航栏列出(搜索)函数的功能,正常情况操作一般是用鼠标去点导航栏的下拉列表或用鼠标激活列表编辑窗口再输入关键来过滤函数列表,使用以下添加到配置文件中的命令:
nmap <Leader>l :vsc VAssistX.ListMethodsInCurrentFile<CR>
即在 normal下直接键入 ;l 就可以直接列出函数列表并激活函数列表过江编辑框,这个比使用鼠标操作就要流畅得多。
从以上演示看出,只要在vs键盘列表中能找到的各种操作的键盘方案,都可以映射成vsvim的命令,对于在windows上使用vim插件如虎添翼。
以下是我常用的一些vsvim配置(_vsvimrc):vimrcpaths="C:UsersAdministrator;C:UsersAdministratorvimfiles;C:UsersAdministrator"
"定义转义符 let mapleader = ";" "显示行号 set number "高亮搜索的关键字 set hlsearch "搜索忽略大小写 set ignorecase " 随着键入即时搜索 set incsearch " 有一个或以上大写字母时仍大小写敏感 set smartcase " 定义快捷键到行首和行尾 nmap <Leader>v <C-Q> " 定义快捷键保存当前窗口内容 nmap <Leader>w :w<CR> imap <Leader>w<ESC>:w<CR> nmap <Leader>q :q<CR> imap <Leader>d <ESC> vmap <Leader>d <ESC> nmap <Leader>d <ESC> nmap <Leader>s zz vmap <Leader>s zz imap <Leader>s<ESC>zz<Insert><Right> set vsvim_useeditordefaults "backspace有几种工作方式,默认是vi兼容的。对新手来说很不习惯。对老vi 不那么熟悉的人也都挺困扰的。可以用 "set backspace=indent,eol,start来解决。 " indent: 如果用了:set indent,:set ai 等自动缩进,想用退格键将字段缩进的删掉,必须设置这个选项。否则不响应。 "eol:如果插入模式下在行开头,想通过退格键合并两行,需要设置eol。start:要想删除此次插入前的输入,需设置这个。 set backspace=indent,eol,start nmap <C-O> :vsc View.NavigateBackward<CR> nmap <C-I> :vsc View.NavigateForward<CR> "nmap <C-]> :vsc Edit.GoToDefinition<CR> nmap <C-]> :vsc VAssistX.GotoImplementation<CR> imap <C-]> :vsc VAssistX.GotoImplementation<CR> nmap <Leader>t :vsc VAssistX.GotoImplementation<CR> imap <Leader>t :vsc VAssistX.GotoImplementation<CR> nmap <Leader>t :vsc VAssistX.GotoImplementation<CR> imap <Leader>t :vsc VAssistX.GotoImplementation<CR> map<Space> 5j "map<S-Space> 5k map<S-Enter> - map<Leader><Enter> ^ nmap<Leader>y yiw nmap<Leader>p diw<ESC>"0P set so=3 set hi set hls nmap<Leader>xh :noh<CR> nmap <Leader>vb :vsc Build.BuildOnlyProject<CR> "调试运行F5 nmap <Leader>mb :vsc Debug.Start<CR> "编译CTRL+F7 nmap <Leader>ma :vsc Build.Compile<CR> "编译运行CTRL+F5 nmap <Leader>mr :vsc Debug.StartWithoutDebugging<CR> nmap <Leader>vf :vsc Edit.FindinFiles<CR> nmap <Leader>vr :vsc Edit.ReplaceinFiles<CR> nmap <Leader>vp :vsc File.OpenContainingFolder<CR> nmap <Leader>vws :vsc Window.NewVerticalTabGroup<CR> nmap <Leader>vwh :vsc Window.NewHorizontalTabGroup<CR> nmap <Leader>l :vsc VAssistX.ListMethodsInCurrentFile<CR> nmap <Leader>o :vsc VAssistX.OpenFileInSolutionDialog<CR> imap <Leader>l <ESC>:vsc VAssistX.ListMethodsInCurrentFile<CR> imap <Leader>o <ESC>:vsc VAssistX.OpenFileInSolutionDialog<CR> "头文件切换 nmap <Leader>a :vsc VAssistX.OpenCorrespondingFile<CR> imap <Leader>a :vsc VAssistX.OpenCorrespondingFile<CR> " 使用 va 查找符号 nmap <Leader>vs :vsc VAssistX.FindSymbolDialog<CR> " ve 查找所有引用位置 nmap <Leader>ve :vsc VAssistX.FindReferences<CR>