vim使用技巧

 

Vim使用有一段时间了,现整理和总结一下其中的一些使用心得,本文中使用的vim配制文件来源于https://github.com/easwy/share/tree/master/vim/vimrc/其中做了一些修改如下:

 

增加了c.vim插件

安装c.vim插件后,发现用Ctrl+j键进行窗口跳转出现问题,问题出现在.vim\ftplugin\c.vim中最后几行

将下面的语名

if !exists("g:C_Ctrl_j") || ( exists("g:C_Ctrl_j") && g:C_Ctrl_j != 'off' )

  nmap    <buffer>  <silent>  <C-j>   i<C-R>=C_JumpCtrlJ()<CR>

  imap    <buffer>  <silent>  <C-j>    <C-R>=C_JumpCtrlJ()<CR>

endif

修改下如下:

if !exists("g:C_Ctrl_j") || ( exists("g:C_Ctrl_j") && g:C_Ctrl_j != 'off' )

  nmap    <buffer>  <silent>  <C-o>   i<C-R>=C_JumpCtrlJ()<CR>

  imap    <buffer>  <silent>  <C-o>    <C-R>=C_JumpCtrlJ()<CR>

endif

"

增加了辅助vim使用globalgtags.vim插件(global是用来产生tags文件)global的使用说明参见http://www.gnu.org/software/global/globaldoc_toc.html

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

"Cheney modifyed V0.1

" Gtags configuration

nmap <C-\>j :Gtags <C-R>=expand("<cword>")<CR><CR>

nmap <C-\>k :Gtags -r <C-R>=expand("<cword>")<CR><CR>

nmap <C-\>l :Gtags -s <C-R>=expand("<cword>")<CR><CR>

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

设置标签,按键映射如下:

   """"""""""""""""""""""""""""""

   " mark setting

   """"""""""""""""""""""""""""""

   nmap <silent> <leader>hl <Plug>MarkSet

   vmap <silent> <leader>hl <Plug>MarkSet

   nmap <silent> <leader>hh <Plug>MarkClear

   vmap <silent> <leader>hh <Plug>MarkClear

   nmap <silent> <leader>hr <Plug>MarkRegex

   vmap <silent> <leader>hr <Plug>MarkRegex

 

改了NERD_commenter.vim 代码注释的插件与Quickfix按键映射重复的问题,具体见Quickfix

if g:NERDCreateDefaultMappings

    call s:CreateMaps('<plug>NERDCommenterComment',    '<leader>cc')(代码注释)

    call s:CreateMaps('<plug>NERDCommenterToggle',     '<leader>c<space>')

    call s:CreateMaps('<plug>NERDCommenterMinimal',    '<leader>cm')

    call s:CreateMaps('<plug>NERDCommenter***y',       '<leader>cs')(代码注释)

    call s:CreateMaps('<plug>NERDCommenterInvert',     '<leader>ci')

    call s:CreateMaps('<plug>NERDCommenterYank',       '<leader>cy')

    call s:CreateMaps('<plug>NERDCommenterAlignLeft',  '<leader>cl')

    call s:CreateMaps('<plug>NERDCommenterAlignBoth',  '<leader>cb')

    call s:CreateMaps('<plug>NERDCommenterNest',       '<leader>cn')(代码注释)

    call s:CreateMaps('<plug>NERDCommenterUncomment',  '<leader>cu')(取消注释)

    call s:CreateMaps('<plug>NERDCommenterToEOL',      '<leader>c$')

    call s:CreateMaps('<plug>NERDCommenterAppend',     '<leader>cA')

 

    if !hasmapto('<plug>NERDCommenterAltDelims', 'n')

        nmap <leader>ca <plug>NERDCommenterAltDelims

    endif

endif

   "Quickfix

   "Cheney modifyed V0.1

   nmap <leader>fn :cn<cr>

   nmap <leader>fp :cp<cr>

   nmap <leader>fw :cw 10<cr>

   "nmap <leader>cc :botright lw 10<cr>

   "map <c-u> <c-l><c-j>:q<cr>:botright cw 10<cr>

 

在当前文件中快速查找光标下的单词,按键映射如下:

   " Fast grep

   nmap <silent> <leader>lv :lv /<c-r>=expand("<cword>")<cr>/ %<cr>:lw<cr>

   vmap <silent> <leader>lv :lv /<c-r>=<sid>GetVisualSelection()<cr>/ %<cr>:lw<cr>

常用功能如下:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" Version:     0.1

" Cheney created V0.1

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

cscope -Rbq

 

ctags -R

genfiletags_lookupfile

 

Ctrl+^ 可以在文件缓冲区中切换文件

 

输入 u 撤销最后一次输入的命令

在输入一个大写的 U ,恢复到该行的原始状态

输入 CTRL-R (先按下 CTRL 键不放开,接着输入 R ) ,这样就可以执行恢复命令,

 

" 删除命令 d 的格式如下∶

[number]   d object           或者     d     [number]   object

其意如下∶

    number - 代表执行命令的次数(可选项,缺省设置为 1 )

    d - 代表删除。

    object - 代表命令所要操作的对象(下面有相关介绍)

 

  一个简短的对象列表∶

    w - 从当前光标当前位置直到单字/单词末尾,包括空格。

    e - 从当前光标当前位置直到单字/单词末尾,但是 ** 包括空格。

    $ - 从当前光标当前位置直到当前行末。

 

x 键来删除光标所在位置的字符

dd 删除一行

dw 删除一个单词

d$ 从当前光标删除到行末

 

输入 p 将最后一次删除的内容置入光标之后

输入 r 和一个字符替换光标所在位置的字符

输入大写的 R 将进入替换模式

 

要改变一个单字/单词的部分或者全部,请输入 cw **

更改类指令的工作方式跟删除类命令是一致的。操作格式是∶

[number]   c   object     或者      c       [number]   object

 

行号+ SHIFT-G 则直接跳转到文件中的某一指定行

SHIFT-G 则直接跳转到最后一行

gg 则直接跳转到文件第一行

CTRL-g 显示当前编辑文件中当前光标所在行位置以及文件状态信息

 

输入 / 以及尾随的字符串可以用以在当前文件中查找该字符串,如果您想逆向查找字符串,请使用 ? 代替 / 进行

要查找同上一次的字符串,只需要按 n 键。要向相反方向查找同上一次的字符串,请输入 Shift-N 即可

设置 ic 选项(ic就是英文忽略大小写Ignore Case的首字母缩写词),即输入∶

:set ic

 

% 可以查找配对的括号

 

输入 :s/old/new/g 可以将全行中old替换为new

输入 :s/thee/the <回车> 。请注意该命令只改变光标所在行的第一个匹配串。

输入 :%s/old/new/g 则是替换整个文件中的每个匹配串。

要替换两行之间出现的每个匹配串,请输入 :#,#s/old/new/g (#,#代表的是两行的行号)

进行全文替换时询问用户确认每个替换需添加 c 选项,请输入 :%s/old/new/gc

 

输入 :! 然后紧随著输入一个外部命令可以执行该外部命令。

 

要将对文件的改动保存到文件中,请输入 :w FILENAME

 

输入 o 将在光标的下方打开新的一行并进入插入模式。

为了在光标上方打开新的一行,只需要输入大写的 O

 

shell命令行下输入vimtutor可以打开30分钟的基础教程

输入 a 将可在光标之后插入文本

输入大写的 A 可以在光标所在行的行末之后插入文本。

输入 i 将可在光标之前插入文本

输入大写的 I 可以在光标所在行的行首插入文本。

请在正常模式下通过输入 $ 将光标移动到行的末尾。

 

vim12个粘贴板,分别是012、…、9a、“、+;用 :reg 命令可以查看各个粘贴板里的内容。在vim中用 y只是将内容复制到” (双引号)粘贴板里,

同样用 p 粘贴的也是这个粘贴板里的内容;要将vim的内容复制到某个粘贴板,需要退出编辑模式,

进入正常模式后,选择要复制的内容,然后按“Ny(注意带引号)完成复制,其中 N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按 y)

例如要把内容复制到粘贴板 a,选中内容后按“ay就可以了,有两点需要说明一下:

“号粘贴板(临时粘贴板)比较特殊,直接按 y 就复制到这个粘贴板中了,直接按p就粘贴这个粘贴板中的内容;

+ 号粘贴板是系统粘贴板,用“+y (依次按“   +    y这三个键)将内容复制到该粘贴板后可以使用CtrlV将其粘贴到其他文档(如firefoxgedit)中,

同理,要把在其他地方用 CtrlC 或右键复制的内容复制到vim中,需要在正常模式下按“+p

让复制粘贴支持CTRL-CCTRL-V(由于windows系统里使用mswin.vim所以不需要下面的映射语句)

" CTRL-C

vnoremap <C-C> "+y

 

" Use CTRL-Q to do what CTRL-V used to do

noremap <C-Q>                 <C-V>

 

" CTRL-V

map <C-V>                 "+gP

 

现在你已经通过 CTRL-] 或双击鼠标跳转到这里了,CTRL-TCTRL-Og<RightMouse>

<C-RightMouse> 可以用来跳回到你原来的地方。

 

注意标签包含在两个 | 字符之间,但打开高亮时这些字符被隐藏,这样更易于命令的阅

读。

 

不过,你可以在任何单词上按 CTRL-],即使该单词不出现在 | 之间也无妨。Vim 会试图

寻找该单词的相关帮助,尤其是单引号之间的选项名,如 'compatible'

 

输入         :help <回车>帮助系统

输入         :help  u<回车>查看指定主题的帮助

help user-manual <回车>

输入 :q <回车> 可以关闭帮助窗口。

 

分隔窗口:

     1) 新建一个窗口(split 或者split 文件名)

     2) 命令模式ctrl+w 切换窗口

     3) 关闭一个窗口(close)

     4) 只显示一个窗口(only)

     5) 新建一个窗口 (new 或者 new 文件名)

     6) 垂直新建或分隔(vsplit 或者vsplit 文件名或者用vnew命令,也可用vertical new)

     7) 对所有窗品的操作  退出(qall)  (wall) 写并退出(wqall) 强制退出(qall!)

     8) 对已经打开的多个文件,可以用all命令为每个文件各开一个水平的窗口,用vertical all开垂直的窗口

 

" 回到正常模式

imap <F1> <ESC>

imap <F2> <ESC>

imap <F3> <ESC>

imap <F4> <ESC>

 

"快速保存

nmap <silent> <leader>ww :w<cr>

nmap <silent> <leader>wf :w!<cr>

 

"快速离开

nmap <silent> <leader>qw :wq<cr>

nmap <silent> <leader>qf :q!<cr>

nmap <silent> <leader>qq :q<cr>

nmap <silent> <leader>qa :qa<cr>

 

"颜色设置

nmap <silent> <leader>cev :colorscheme evening<cr>

nmap <silent> <leader>cdb :colorscheme darkblue_my<cr>

nmap <silent> <leader>cdt :colorscheme desert_my<cr>

 

"窗口切换

"上下左右切换

nmap <C-j> <C-W>j

nmap <C-k> <C-W>k

nmap <C-h> <C-W>h

nmap <C-l> <C-W>l

"Cheney modifyed V0.1

"来回切换窗口

nmap <C-u> <C-W>w

 

"窗口新建

map <leader>vn :vnew

map <leader>vs :vsplit<cr>

map <leader>ne :new

map <leader>st :split<cr>

map <leader>ed :edit

 

vimrc设置成(",lk"打开lookupfile with tags)

(",ll",就会在当前已打开发缓冲区中去查找文件名)

(",lw",就会在指定的目录下去查找文件名)

(",lk",就会在tag文件中查找指定的文件名)

 

         用法         :cs find {querytype} {name}

         {querytype} 对应 cscope 控制台接口编号和 nvi 的缺省命令:

        

nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>

nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>

nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>

nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>

nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>

nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>

nmap <C-\>i :cs find i <C-R>=expand("<cfile>")<CR><CR>

nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>

           

                   0 s: 查找本 C 符号

                   1 g: 查找本定义

                   2 d: 查找本函数调用的函数

                   3 c: 查找调用本函数的函数

                   4 t: 查找对其的赋值

                   6 e: 查找本 egrep 模式

                   7 f: 查找本文件

                   8 i: 查找包含本文件的文件

                  

            c: Find functions calling this function

       d: Find functions called by this function

       e: Find this egrep pattern

       f: Find this file

       g: Find this definition

       i: Find files #including this file

       s: Find this C symbol

       t: Find assignments to

 

 

 

nmap <silent> <leader>tl :Tlist<cr>

",tl"打开taglist

 

",bv"可以打开文件缓冲区

 

"页设置

map <leader>tne :tabnew

map <leader>tn :tabnext<cr>

map <leader>te :tabedit

map <leader>tc :tabclose<cr>

map <leader>tm :tabmove

 

   nmap <silent> <leader>tl :Tlist<cr>

   nmap <silent> <leader>wm :WMToggle<cr>

   nmap <silent> <leader>fe :***plore!<cr>

   nmap <silent> <leader>ft :NERDTree<cr>

 

winmanager插件可以控制各插件在vim窗口中的布局显示,我的vimrc中这样设置成

左边有两个窗口,上面的是BufExplorer窗口,下面是taglist窗口。FileExplorer窗口和BufExplorer共用一个窗口,

BufExplorer窗口中使用”CTRL-N“可以切换到FileExplorer窗口,再使用一次则又切换回BufExplorer窗口。

也就是说,在变量g:winManagerWindowLayout中,使用”,”分隔的插件,在同一个窗口中显示,

使用”CTRL-N“在不同插件间切换;使用”|”分隔的插件,则在另外一个窗口中显示。

Vim中文帮助文档:

1.        http://www.vim.org/docs.php

2.        http://sourceforge.net/projects/vimcdoc/

 

 

你可能感兴趣的:(vim使用技巧)