免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1268 | 回复: 0
打印 上一主题 下一主题

VIM编程(1)(2)(3) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-16 22:12 |只看该作者 |倒序浏览
VIM编程(1)
进行基本设置
1)先创立三个个人基本配置路径
~/.vim/plugin~/.vim/doc~/.vim/syntax$ mkdir ./.vim/{plugin,doc,syntax} –p
$touch ~/.vimrc
2) 中文帮助手册的安装
http://vimcdoc.sf.net       (English)http://vcd.gro.clinux.org    (中文)下载的文件包应该是类似这样的: vimcdoc-1.5.0.tar.gz
$tar xvf vimcdoc-1.6.0.tar.tar
$ cd vimcdoc-1.6.0/
$ ./vimcdoc.sh –i
$ echo "set helplang=cn" >> ./.vimrc
3)修改~/.vimrc
"基本配置
set wildmenu
"增强模式中的命令行自动完成操作
set foldmethod=manual
"设定折叠方式为手动
set helplang=cn
"设置帮助的语言为中文
set cin   
"实现C程序的缩进
set sw=4   
"设计(自动) 缩进使用4个空格
set sta   
"插入时使用'shiftwidth'
set backspace=2
"指明在插入模式下可以使用删除光标前面的字符
syntax enable
"设置高亮关键字显示
set nocompatible
"去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set number
""显示行号
filetype on
"检测文件的类型
map  :q
set history=1000
""记录历史的行数
set background=dark
"背景使用黑色
syntax on
""语法高亮度显示
set autoindent
set smartindent
"上面两行在进行编写代码时,在格式对起上很有用;
""第一行,vim使用自动对起,也就是把当前行的对起格式应用到下一行;
"第二行,依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用
""第一行设置tab键为4个空格,第二行设置当行之间交错时使用4个空格
set tabstop=4
set shiftwidth=4
set showmatch
"设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set ruler
""在编辑过程中,在右下角显示光标位置的状态行
set incsearch
"查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一
""个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依
"次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
""时,别忘记回车。
"设置全选快捷键
map  ggVG
"设置tab的快捷键
map  :tabnew .
map  :tabnext
"F11为新建一个标签,Shirt+F11为跳转标签
"F12是注释掉改行,S-F12是去掉改行的注释
map  :A
map  I//
map!  I//i
map  02x
map!  02x
"设置格式化源代码快捷键
map  :call FormartSrc()
"设置编译快捷键
map  :make
map  :make clean
map  :cw
map  :ccl
map  :cn
map  :cp
map  :call CompileRun()
map  :call Debug()
"F5为make,Crtl+F5为make clean
"F6为quickfix,查看详细信息, Ctrl+F6关闭详细信息
"F7为下一个结果,Ctrl+F7为上一个结果
"F8为编译和运行单个C程序、Shift+F8为调试
map  o
"设置建立新行但是不插入
""""""""""""""""""""""""""""""
" Tag list (ctags)
""""""""""""""""""""""""""""""
set tags=./tags
let g:winManagerWindowLayout='FileExplorerTagList'
map  :WMToggle:q
map  :WMToggle
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
    set csprg=/usr/local/bin/cscope
"设置cscope程序的位置
    set csto=1
"选项决定是先查找tag文件还是先查找cscope数据库。设置为0则先查找cscope数据库,设置为1先查找tag文件。我通常设置为1,因为在tag文
"件中查找到的结果,会把最佳匹配列在第一位。
    set cst
"如果你想VIM同时搜索tag文件以及cscope数据库,设置cscopetag选项
    set nocsverb
    set cscopequickfix=s-,c-,d-,i-,t-,e-
"这个是设定是否使用 quickfix 窗口来显示 cscope 结果。
" add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
    endif
    set csverb
endif
"设置快捷键:
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("")
filetype plugin indent on
:inoremap ( ()i
:inoremap ) =ClosePair(')')
:inoremap { {}i
:inoremap } =ClosePair('}')
:inoremap [ []i
:inoremap ] =ClosePair(']')
autocmd BufNewFile * normal G
"新建文件后,自动定位到文件末尾
autocmd BufNewFile *.cpp,*.sh,*.java exec ":call SetTitle()"
"新建.cpp,.java,.sh,
"定义函数SetTitle,自动插入文件头
func SetTitle()
"如果文件类型为.sh文件
if &filetype == 'sh'
call setline(1, "\#########################################################################")
call append(line("."), "\# Author: Futuredaemon")
call append(line(".")+1, "\# Created Time: ".strftime("%c"))
call append(line(".")+2, "\# File Name: ".expand("%"))
call append(line(".")+3, "\# Description: ")
call append(line(".")+4, "\#########################################################################")
call append(line(".")+5, "\#!/bin/bash")
call append(line(".")+6, "")
else
call setline(1, "/*************************************************************************")
call append(line("."), " Author: Futuredaemon")
call append(line(".")+1, " Created Time: ".strftime("%c"))
call append(line(".")+2, " File Name: ".expand("%"))
call append(line(".")+3, " Description: ")
call append(line(".")+4, " ************************************************************************/")
call append(line(".")+5, "")
endif
endfunc
"定义CompileRun函数,用来调用进行编译和运行
func CompileRun()
exec "w"
"C程序
if &filetype == 'c'
exec "!gcc % -g -o % cscope.files
$cscope –bq
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本
符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。在缺省情况下
cscope在生成数据库后就会进入它自己的查询界面,我们一般不用这个界面,所以使用
“-b”选项。
9)c/h文件间相互切换 -- 插件: A
下载:http://www.vim.org/scripts/script.php?script_id=31
将a.vim 放到 ~/.vim/plugin 文件夹中
10)自动补全
~/.vimrc文件中增加下面两句:
请确定你的Ctags 5.6已经安装好, 并且生成的tags文件已经可以用了,用vim打开一个
程主源文件后任意变量、宏、函数、API等都可以自动补全(用Tab键)
11)astyle代码格式整理软件
$sudo apt-get install astyle
               
               
               
               
               
               
               
VIM编程(2)
1.移动光标
在当前行里面有效的移动光标,注意这些字母都可以配合删除、移动等操作。
    fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。
    tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)
    Fx:和 fx 类似,不过是往回找。
    w:光标往前移动一个词。
    b:光标往后移动一个词。
    0:移动光标到当前行首。
    ^:移动光标到当前行的第一个字母位置。
    $:移动光标到行尾。
    ):移动光标到下一个句子。
    ( :移动光标到上一个句子。
在整个文件里面有效移动光标
    :向下移动一屏。
    :向上移动一屏。
    G:到文件尾
    numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
gg:到文件首
    H:移动光标到屏幕上面
    M:移动光标到屏幕中间
    L:移动光标到屏幕下面
    *:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。
j 向下
k 向上        k
l 向右     h      l
h 向左        j
      
      
2.查找
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/源串/目标串/g                                   替换当前行中所有符合条件的字符串
:行号1,行号2s/源串/目标串/g                  在指定行中进行替换
:%s/源串/目标串/g                                 全文替换
ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
:marks       查看标记列表
vim中常用的找出行数的命令:
    Ctrl+g         在最后一行中显示光标所在位置的行数及文章的总行数
    nG         将光标移至n行
    r           修改光标所在字符
    R          修改光标所在位置的字符,可以一直替换字符,知道按下ESC键
u            表示复原功能
U                  取消对行所作的所有改变
重复执行上一命令
    Z+Z           连续按下两次Z,文件将保存并退出vim
        重做
3.复制粘贴剪切
有效的移动大段的文本
v:按字符选择。
V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。
:按块选择。
在选择模式的时候使用上面所述的方向键和命令(motion)。比如,vwww,会高亮光标前面的三个词。Vjj 将会高亮当前行以及下面两行。
一旦你高亮了选区,你或许想进行一些操作:
    d:剪贴选择的内容到剪贴板。
    y:拷贝选择的内容到剪贴板。
    c:剪贴选择的内容到剪贴板并且进入插入模式。
如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间:
    d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。
    y{motion}:和上面类似,不过是拷贝。
    c{motion}:和 d{motion} 类似,不过最后进入插入模式。
    dd:剪切当前行。
    yy:拷贝当前行。
    cc:剪切当前行并且进入插入模式。
    D:剪切从光标位置到行尾到剪贴板。
    C:和 D 类似,最后进入插入模式。
    x:剪切当前字符到剪贴板。
    :和x类似,不过最后进入插入模式。
    y+w    复制光标所在的位置到整个单词所在的位置
使用多重剪贴板

多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM
里面被称为寄存器(Registers)。你可以列出当前定义的所有寄存器名和它们的内容,命令为":reg"。最好使用小写字母来作为寄存器的名称,因
为大写的有些被 VIM 占用了。使用寄存器的命令为双引号 "。
比如:我们要拷贝当前行到寄存器 k。你应该按 "kyy。(你也可以使用 V"ky。为什么这样也可以呢?)现在当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。现在你可以使用命令 "kp 来粘贴寄存器 k 里面的内容到你想要的位置。
"ayy    将当前行复制到寄存器 a 中
"ap     将寄存器 a 中的内容粘贴到光标之后
l          :registers 查看所有寄存器的内容
l          通常情况下,寄存器 + ( " + Shift+= )对应X下的剪贴板。您在其它程序中复制的内容,可以使用 "+p 粘贴到Vim中;您在Vim中,可以使用 "+y 将内容复制到剪贴板,再粘贴到其它程序中
l          没有指定寄存器时,Vim使用“无名寄存器”存储内容
4.删除
vim中常用的删除文本命令:
    d+d              连按两次d,可将光标所在的行删除,若连续删除,可以按住d不放
    d+w            删除光标所在的单词,若是光标在两字之间,则删光标后的一个词
    D              将光标所在行后面所有的单词删除
    x                将光标所在位置后一个字符删除
    X              将光标所在位置前一个字符删除
5.插入
vim中命令行模式切换到输入模式,进行插入:
    * i:在当前字符的左边插入
    * I:在当前行首插入
    * a:在当前字符的右边插入
    * A:在当前行尾插入
    * o:在当前行下面插入一个新行
    * O:在当前行上面插入一个新行
*
c{motion}:删除 motion
命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包
括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
例如:cw:删除光标所在处的词并插入。(c —— change)
    * d{motion}:和上面差不多,但是不进入插入模式。
6.文件操作
vim最后行模式主要的操作命令:
    e       创建新的文件
    n       加载新的文件
    w     写文件,它是保存到临时文件中,直接退出,并没有保存到文件中的
    w!     如果想写只读文件,使用它强制写入文件
    q!     不问你是否保存文件,强制退出
set   可以设置vim的某些特性。取消设置,使用 set none
7.宏
您可以将一系列的操作录制为一个宏,然后执行它
q    开始录制宏。宏名称为一个字符
q             录制中按下“q”键,结束录制
@   执行宏
可以使用 :registers(寄存器列表) 命令查看已记录的宏
               
               
               
VIM编程(3)
准备标签
$ctags -R
生成一个cscope的数据库, 在项目的根目录运行下面的命令:
$ find . –type f > cscope.files
$cscope –bq
Winmanager文件操作技巧:
Winmannager:
      打开关闭
   显示帮助
      如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
-          返回上级目录
c          切换vim 当前工作目录正在浏览的目录
d         创建目录
D         删除目录或文件
i          切换显示方式
R         文件或目录重命名
s          选择排序方式
x         定制浏览方式, 使用你指定的程序打开该文件
Cscope帮助阅读代码
进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来, 用下面的命令:
:cs add /XXX/cscope.out /XXX
以调用“F1+字母”命令进行查找了。VIM支持8种cscope的查询功能,如下:
s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文件
如果自动跳转的位置你不满意, 想看其他的结果, 可以用F6打开QuickFix窗口:
Shift+F6关闭QuickFix窗口,Crtl+o返回上一级。
Taglist的基本操作
按下F3就会打开taglist窗口了,在其中可以使用下面的快捷键:
          跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o             在一个新打开的窗口中显示光标下tag
       显示光标下tag的原型定义
u             更新taglist窗口中的tag
s             更改排序方式,在按名字排序和按出现顺序排序间切换
x             taglist窗口放大和缩小,方便查看较长的tag
+             打开一个折叠,同zo
-             将tag折叠起来,同zc
*             打开所有的折叠,同zR
=             将所有tag折叠起来,同zM
[[            跳到前一个文件
]]            跳到后一个文件
q             关闭taglist窗口
          显示帮助
编程常用技巧:
Tab                自动补全
Ctrl+A           全选
Shift+o          建立新行但是不插入
%              跳转到配对的括号去
[[                跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
>>               缩进所有选择的代码
            光标会自动跳到XXXX()函数的定义处。
,           跳回到函数被调用的地方了, 变量, 结构, 宏, 等等, 都可以的。
Shift+qq         快速不保存退出vi(所有的标签都会关闭)
F10                快速打开同文件夹下的源文件,查找文件名可以用/
编译:
F5                        Make
Shift+F5               Make clean
F6                        列出所有编译信息
Shift+F6               关闭调试信息
F7                        切换到下一个结果
Shift+F7               切换到上一个结果
F8                        编译并运行单个文件
Shift+F8               调试源代码
      \rc                    保存并且编译            
      \rl                    链接                       
      \rr                           运行                        
      \ra                   输入运行时的参数      
      \rm                  make                    
      \rg                   输入make时的参数      
      \rp                   代码检查  splint            
      \ri                   输入代码检查splint的参数
      \rd或者Ctrl+F5         源代码
      \rs                   查看这个Csupport的设置
自动补全:
Ctrl+X Ctrl+L
整行补全
Ctrl+X Ctrl+N
根据当前文件里关键字补全
Ctrl+X Ctrl+K
根据字典补全
Ctrl+X Ctrl+T
根据同义词字典补全
Ctrl+X Ctrl+I
根据头文件内关键字补全
Ctrl+X Ctrl+]
根据标签补全
Ctrl+X Ctrl+F
补全文件名
Ctrl+X Ctrl+D
补全宏定义
Ctrl+X Ctrl+V
补全vim命令
Ctrl+X Ctrl+U
用户自定义补全方式
Ctrl+X Ctrl+S
拼写建议
Csupport(c.vim)的常用结构补全操作:
  -- 常用结构 ---------------------------------------------------------
  \sd       do { } while                       
  \sf       for      
  \sfo      for { }                           
  \sif      if { }     
  \sife     if { } else { }
  \swh      while { }                           (n,v,i)
  \ss       switch                              (n,v,i)
  \sc       case                                (n,i)
  \s{       { }                                 (n,v,i)
  -- 预处理命令 -------------------------------------------------------
  \p                         (n,i)
  \p"       #include ""                         (n,i)
  \pd       #define                             (n,i)
  \pu       #undef                              (n,i)
  \pie      #if  #else #endif                   (n,v,i)
  \pid      #ifdef #else #endif                 (n,v,i)
  \pin      #ifndef #else #endif                (n,v,i)
  \pind     #ifndef #def #endif                 (n,v,i)
  \pi0      #if 0 #endif                        (n,v,i)
  \pr0      remove #if 0 #endif                 (n,i)
  \pe       #error                              (n,i)
  \pl       #line                               (n,i)
  \pp       #pragma                             (n,i)
  -- 常用短语 -------------------------------------------------------------
  \im       main()                              (n,v,i)
  \i0       for( x=0; x
  \in       for( x=n-1; x>=0; x-=1 )            (n,v,i)
  \ie       enum   + typedef                    (n,i)
  \is       struct + typedef                    (n,i)
  \iu       union  + typedef                    (n,i)
  \ip       printf()                            (n,i)
  \isc      scanf()                             (n,i)
  \ica      p=calloc()                          (n,i)
  \ima      p=malloc()                          (n,i)
  \isi      sizeof()                            (n,v,i)
  \ias      assert()                            (n,v)
  -- C++ ----------------------------------------------------------------
  \+c       class                               (n,i)
  \+cn      class (using new)                   (n,i)
  \+ci      class implementation                (n,i)
  \+cni     class (using new) implementation    (n,i)
  \+mi      method implementation               (n,i)
  \+ai      accessor implementation             (n,i)
  \+tc      template class                      (n,i)
  \+tcn     template class (using new)          (n,i)
  \+tci     template class implementation       (n,i)
  \+tcni    template class (using new) impl.    (n,i)
  \+tmi     template method implementation      (n,i)
  \+tai     template accessor implementation    (n,i)
  \+tf      template function                   (n,i)
  \+ec      error class                         (n,i)
  \+tr      try ... catch                       (n,v,i)
  \+ca      catch                               (n,v,i)
  \+c.      catch(...)                          (n,v,i)
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19742/showart_1724351.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP