Chinaunix首页 | 论坛 | 博客
  • 博客访问: 513951
  • 博文数量: 56
  • 博客积分: 1136
  • 博客等级: 少尉
  • 技术积分: 1378
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-28 14:02
文章存档

2014年(1)

2013年(7)

2012年(45)

2011年(3)

分类: 嵌入式

2012-05-08 18:07:03

Vim使用技巧

 

Vim使用有一段时间了,现整理和总结一下其中的一些使用心得,本文中使用的vim配制文件来源于其中做了一些修改如下:

 

增加了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           i=C_JumpCtrlJ()

  imap            =C_JumpCtrlJ()

endif

修改下如下:

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

  nmap           i=C_JumpCtrlJ()

  imap            =C_JumpCtrlJ()

endif

"

增加了辅助vim使用globalgtags.vim插件(global是用来产生tags文件)global的使用说明参见

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

"Cheney modifyed V0.1

" Gtags configuration

nmap j :Gtags =expand("")

nmap k :Gtags -r =expand("")

nmap l :Gtags -s =expand("")

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

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

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

   " mark setting

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

   nmap hl MarkSet

   vmap hl MarkSet

   nmap hh MarkClear

   vmap hh MarkClear

   nmap hr MarkRegex

   vmap hr MarkRegex

 

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

if g:NERDCreateDefaultMappings

    call s:CreateMaps('NERDCommenterComment',    'cc')(代码注释)

    call s:CreateMaps('NERDCommenterToggle',     'c')

    call s:CreateMaps('NERDCommenterMinimal',    'cm')

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

    call s:CreateMaps('NERDCommenterInvert',     'ci')

    call s:CreateMaps('NERDCommenterYank',       'cy')

    call s:CreateMaps('NERDCommenterAlignLeft',  'cl')

    call s:CreateMaps('NERDCommenterAlignBoth',  'cb')

    call s:CreateMaps('NERDCommenterNest',       'cn')代码注释)

    call s:CreateMaps('NERDCommenterUncomment',  'cu')(取消注释)

    call s:CreateMaps('NERDCommenterToEOL',      'c$')

    call s:CreateMaps('NERDCommenterAppend',     'cA')

 

    if !hasmapto('NERDCommenterAltDelims', 'n')

        nmap ca NERDCommenterAltDelims

    endif

endif

   "

   "Cheney modifyed V0.1

   nmap fn :cn

   nmap fp :cp

   nmap fw :cw 10

   "nmap cc :botright lw 10

   "map :q:botright cw 10

 

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

   " Fast grep

   nmap lv :lv /=expand("")/ %:lw

   vmap lv :lv /=GetVisualSelection()/ %:lw

常用功能如下:

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

" 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 "+y

 

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

noremap                 

 

" CTRL-V

map                  "+gP

 

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

可以用来跳回到你原来的地方。

 

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

读。

 

不过,你可以在任何单词上按 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

imap

imap

imap

 

"快速保存

nmap ww :w

nmap wf :w!

 

"快速离开

nmap qw :wq

nmap qf :q!

nmap qq :q

nmap qa :qa

 

"颜色设置

nmap cev :colorscheme evening

nmap cdb :colorscheme darkblue_my

nmap cdt :colorscheme desert_my

 

"窗口切换

"上下左右切换

nmap j

nmap k

nmap h

nmap l

"Cheney modifyed V0.1

"来回切换窗口

nmap w

 

"窗口新建

map vn :vnew

map vs :vsplit

map ne :new

map st :split

map ed :edit

 

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

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

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

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

 

         用法         :cs find {querytype} {name}

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

        

nmap s :cs find s =expand("")

nmap g :cs find g =expand("")

nmap c :cs find c =expand("")

nmap t :cs find t =expand("")

nmap e :cs find e =expand("")

nmap f :cs find f =expand("")

nmap i :cs find i =expand("")

nmap d :cs find d =expand("")

           

                   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 tl :Tlist

",tl"打开taglist

 

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

 

"页设置

map tne :tabnew

map tn :tabnext

map te :tabedit

map tc :tabclose

map tm :tabmove

 

   nmap tl :Tlist

   nmap wm :WMToggle

   nmap fe :***plore!

   nmap ft :NERDTree

 

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

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

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

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

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

Vim中文帮助文档:

1.       

2.       

 

 

阅读(5055) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~