• VIM学习一: VIM命令学习及插件介绍


    一、光标移动及编辑命令(含查找替换) 

    【打开关闭窗口】
    :e file或:open file       打开新文档
    :q或者ctrl+w+q         关闭当前视图的窗口
    :tab split将在新标签页中,打开当前缓冲区中的文件(相当于把当前文件放大)
     

    vim -b datafile vim打开二进制文件
    :%!xxd 转换为十六进制
    :%!xxd -r 转换回二进制

     
    【保存文件】
    :w filename 当前文件另存为filename文件

    :w! filename  强制写文件

    :e!  放弃修改,重新读文件

     
    【移动光标】
    h     方向键左←
    j     方向键下↓
    k     方向键上↑
    l     方向键右→
    3j 或者 3↓         把游标下移3行
    3→                 把游标右移3个字符
    0(数字) 将光标移到当前行首(就是行首,不是第一个字符)
    ^        将光标移到当前行的第一个非空字符
    输入$, 将光标移到当前行尾
    数字n + 空格         向右移动n个字符的位置
    数字n + Enter键     向下移n行
    :n           跳到第n行 
     

    【#ifdef宏之类的跳转】
    % 光标处在#ifXX #else #endif上时,按%可以在这个队列中循环
    [# 光标处在#ifdef和#endif之间的行时,(不能在#XXX上,只能在中间行),按[#可以跳到#ifdef之类的开始处。若没有,这不跳转。
    ]# 光标处在#ifdef和#endif之间的行时,(不能在#XXX上,只能在中间行),按]#可以跳到#else 或#endif相应处。若没有,这不跳转。

    【函数段级别的跳转】
    % 光标指向{或},可以查找该段落的匹配处
    [[ 向上找函数的入口{处,即光标处在代码段的中间行时(比如函数的中间行),按[[跳转到函数的入口{处。(若在函数外,或者函数的{处,则跳转到上一个函数的{处)
    ][ 向下找函数的出口}处,即光标处在代码段的中间行时(比如函数的中间行),按][跳转到函数的结尾}处。(若在函数外,或者函数的}处,则跳转到下一个函数的}处)

    【代码段级别的跳转】
    % 光标指向{或},可以查找该段落的匹配处
    [{ 向上找代码段的入口{处
    ]} 向下找代码段的出口}处
    参考: http://www.cnblogs.com/CGDeveloper/articles/1941085.html

    【翻屏命令】
    ctrl + f 向下移一页
    ctrl + b 向上移一页
    ctrl + d 向下移半页
    ctrl + u 向上移半页
     
    【跳转命令】
    :n  跳到第n行
    H 移动到当前屏幕的第一行第一列
    M 移动到当前屏幕的最中间那一行的第一列
    L 移动到当前屏幕的最后一行第一列
    gg 移动到整个文档的第一行,相当于1G
    G 移动到整个文档的最后一行第一列
    20g 移动到整个文档的第20行
     
    【基础编辑命令】
    . 重复上一次的那个动作(如复制黏贴删除等,撤销除外)
    普通模式下输入q:            显示命令行命令历史的窗口
      
    【删除】
    x 小写x,删除光标后面的一个字符
    X 大写X,删除光标前面的一个字符
    数字n + x 删除光标后的n个字符,n可以大于改行后面字符的总个数,删除不会影响到下一行
    数字n + X 同小x,只是往前删
    d$ 删除这行光标之后的所有内容
    d0 这个数字0表示,从改行的开始,一直删到光标的位置
    dd 删除该行
    数字n + dd 删除n行,如:2dd删除两行,即光标所在行及其下一行
    d1G 从整个文档的第一行开始删,删到光标当前位置
    dG 从光标开始删除,一直删到整个文档的最后一行
     
    【复制与黏贴】
    yy     复制游标所在的那一行
    nyy     复制游标所在那行开始的n行
    p 小写p    在游标所在行的下方,黏贴复制的内容
    P 大写P    在游标所在行的上方,黏贴复制的内容
     
    【撤销与回退】
    u 撤销前一个动作
    ctrl + r 重做刚撤销的那个动作
     
    【搜索、查找】
    :vim /pattern/ % 在当前打开文件中查找,按cw可以打开搜索到的结果列表
    /word     向后查找字符串word
    ?word     向上查找字符串word
    n     重复前一个按键的动作(如果是向后查找,则n表示往后找;如果是向前查找,则n表示往前看)
    N     重复前一个按键动作的相反动作(如果是向后查找,则N表示往前找;如果是向前查找,则N表示往后看)
    *        向下搜索光标所在词(全字匹配) 
    g*        同上,但部分符合即可。 
    #        向上搜索光标所在词(全字匹配) 
    g#        同上,但部分符合即可。
    /<the>     ">" 是一个特殊的记号,表示只匹配单词末尾。类似地,"<" 只匹配单词的开头。
     
    【替换】
    示例1:
    :9,19s/_kitkat//
    说明:从第9行到第19行,将字符串“_kitkat”替换为空,每行只替换第一次匹配项
    示例2:
    :%s/abc/def/g 将当前文本中的所有abc替换成def
    示例3:
    :100,200s/vbird/VBIRD/g 将第100行至200行之间的vbird替换为VBIRD
    变种:
    :1,$s/word1/word2/g
    :1,$s/word1/word2/gc 在替换的基础上,增加确认操作【常用】
     

    二、多窗口命令

     【多文档命令】
    :ls 查看buffer list,即打开了多少个文件(带文件路径)
    :files    查看vim一共打开了几个文档
    :bn 下一个文件 
    :bp 上一个文件 
    :b num 切换文件(其中num为buffer list中的编号)
    如果需要在编辑的同时,打开新文档,可以用命令:e file或:open file
    :tab split将在新标签页中,打开当前缓冲区中的文件(相当于把当前文件放大)
    :res+20 当前窗口多显示20行
     
    【多窗口命令】
    :sp可以水平分割(水平分割成上下两个窗口)当前窗格  :split
    :vs可以垂直分割(垂直分割成左右两个窗口)当前窗格   :vsplit 
                   ---按住ctrl-w键,松开,马上按一次方向键,则光标会切换到当前窗口的 左|下|上|右 侧的窗口
     
    :qa 关闭所有窗口
    :tab sp将在新标签页中,打开当前缓冲区中的文件(相当于把当前文件放大)(:tab vsp也可以)
    按住ctrl-w键,松开,马上按一次方向键,则光标会切换到当前窗口的 左|下|上|右 侧的窗口
    :ts core_init 找到这个函数的实现(:tag core_init)
    :sp filename 在当前vi视图上打开一个分窗口显示filename,如果filename不填,则是打开当前文件
     

    三、普通命令及VIM配置命令

     【括号匹配】
    % 跳到配对的括号
    [[ 跳到上一个函数的{括号处
    ]] 跳到下一个函数的{括号处
     
    【折叠命令】
    za 打开/关闭在光标下的折叠
    zM 打开所有折叠
    zR 关闭所有折叠
     
     【剪切板】
    :reg 查看剪贴板
    0寄存器存放刚复制的内容,1~9寄存器存放刚删除的内容
    即yy命令将内容复制到0寄存器,dd命令不会修改该寄存器,故后面如果想复制该内容,直接用"0P即可
     
    【查看历史纪录】
    普通模式下输入q: 显示命令行命令历史的窗口

    【任务切换快捷键】

    ctrl+z 将当前任务(如vim窗口)隐藏到后台
    jobs 查看所有的后台任务
    fg <任务号> 把任务切换回前台(如果只有一个任务,fg就可以了,不用接任务号)
     
     【vim配置命令】
    :set nu 显示行号
    :set nonu 取消显示行号
    ctrl+g  显示文本名字,和文件的总行数
    :pwd 查看当前文件的路径
    :! command 在不退出vi的情况下,执行命令command
    :scriptnames 找出vim脚本,并显示路径
    :version 查看版本号,及支持的插件
     
    【vim映射】
    :map 列出所有映射命令
    下面是vim的使用map的示例:
    :map p i(<Esc>ea)<Esc>     以光标未开始,至该word结束,加括号(组合键p,需要快速按,中间不能间隔太长时间)(先p再也可以)(i进插入模式,esc退出插入模式,e移动到词尾,a在词尾后插入)
    :map c i{<Esc>ea}<Esc>     以光标未开始,至该word结束,加花括号
    :map <F2> GoDate: <Esc>:read !date<CR>kJ     定义F2快捷键,在文本末尾插入Date信息(G到文本的末尾,o在文本末尾的下一行插入,<Esc>退出插入模式,:read !date执行读取date的命令并完成插入,<CR>执行刚的命令,kJ将光标上移并将两行连接起来)

    map <F2> :cw<CR>                                     为了快速打开/关闭搜索窗口
    map <F3> :ccl<CR>
    map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

     
    【vim颜色选择】
    (系统自带的在/usr/share/vim/vim73/colors/路径)
    亮色调推荐default/delek。就是用久了眼累。
    暗色调里面koehler,molokai,inkpot,wombat,neon。从左到右对比度依次降低。我最近一直用neon,看起来非常舒服。至于molokai用这个写过html/CSS后彻底无爱。
    字体我一直用droid sans mono,搭配neon配色效果最佳。
    用了三年的desert+monaco字体

    四、插件及其特有命令

     【ctags帮助命令】
    :help ctags vim中运行这个命令,查看ctags的帮助文档
    man ctags 执行linux命令,查看ctags帮助文档(与上面那个不是同一个文档)
    map <F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> vimrc中配置F12用于生成ctags
    vi -t tags 打开 vi,并且将光标停留在 tag 定义的地方
    :ts tag 同上,找到这个函数的实现,列出所有匹配到 tag 的结果
    set tags=tags;/     这是告诉vim在当前目录找不到tags文件时请到上层目录查找。
    1.安装ctags
    yum install ctags
    2.设置ctags的快捷键,打开vim,运行下面命令,则在当前目录下会生成tags文件
    :map <F2> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
    ctags的快捷键
    ctrl-]
    ctrl-o
    把文件加入帮助列表的命令
    .vim]$ vi doc/ 用vim打开doc目录,输入如下命令
    :helptags. 命令没有空格
    ctags帮助
    linux命令 man ctags
    vim命令 :help ctags 或:h ctags
     
    【taglist】
    :TlistToggle vim中运行这个命令,打开/关闭taglist窗口
    :help taglist.txt vim中运行这个命令,查看taglist帮助文档
    Ctrl-w 在两个窗口之间切换
    切到targlist窗口后,可以使用快捷键:
    - 折叠单个tag
    + 打卡单个折叠
    x 将taglist放大或还原成侧边
    u 更新taglist
    空格 在下方显示tag原型定义
    3.安装使用Taglist
    2.打开配置文件~/.vimrc,加入以下两行:
    let Tlist_Show_One_File=1  
    let Tlist_Exit_OnlyWindow=1  
    3.taglist快捷键
     在Vim命令行下运行TlistToggle命令就可以打开Taglist窗口,再次运行TlistToggle则关闭;
    我们可以通过Ctrl-w快捷键或鼠标点击在Taglist窗口和编辑区之间切换焦点
     
    【buffer管理器MiniBufferExplorer】
    按下Ctrl+h/j/k/l,可以切换到当前窗口的上下左右窗口
     
    【其他插件:原型自动补全】
     
    【cscope】
    1.软件安装
    yum install cscope
    2,插件拷贝,并放入对应目录
    确定Vim已支持Cscope后,将文件http://cscope.sourceforge.net/cscope_maps.vim下载到~/.vim/plugin目录。
    3.生成cscope
    cscope -Rbq -f cscope.out
    4.快捷键
               Ctrl- s 查找所有当前光标所在符号出现过位置。
               Ctrl- c 查找所有调用当前光标所在函数的函数。
    cw命令,就能在编辑区下面quickfix窗口看到所有查找结果的列表
    :help cscope vim中运行这个命令,查看cscope的帮助文档
    man cscope 执行linux命令,查看cscope帮助文档(与上面那个不是同一个文档)
    set cscopequickfix=s-,c-,d-,i-,t-,e- 在~/.vimrc中增加这条命令后,用ctrl-]等快捷键会自动跳到第一个索引到的位置
    :cw 通过该命令,可以打开“Quickfix List”窗口,通过ctrl-w可以;退出那个窗口,需要指到那个窗口。
     
    通过先生成cscope.file,再用cscope建立索引,可以更灵活的使用scope: 

    find . -type f ! -path "*/.git/*" ! -path "./*cscope*" ! -path "*/tags" > cscope.files
    cscope -bkq -i cscope.files

    :cs show可以查看当前加载的cscope   
    如果vim中已经加入cscope.out的话,会与cscope.vim中的配置冲突,比如:/etc/vimrc中已经有
     
    则.vim/plugin/cscope_maps.vim中的配置就会重复,结果报重复加载out文件的错误,解决方法是把.vim/plugin/cscope_maps.vim中加载out文件的代码删除。
     
    cs find s/c/t/g/e/f/i/d tag
    s(查找符号,不含注释及打印)
    c(查找调用,不含定义和实现)
    t(这个目录查找字符串)
    g(查找定义,相当于ctags的ctrl-o)
    e(当前文件查找字符串)
    f(查找文件)
    i(查找include该文件的文件)
    d(查找该函数调用的所有子函数)
     
    【配置1】其中的这句:
    nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
    在我的vim中无法工作, 但是我改成:
    nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
    就可以正常工作了
     
    【配置2】alias cscope='find . -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name "*.define" -o -name "*.inc" -o -name "*.S" -o -name "*.s" -o -name "*.mk" -o -name "*.cfg" -o -name "*.xml" -o -name "Makefile" > cscope.files && cscope -bkq -i cscope.files'
     
    ~/.bashrc

    五、FAQ

     (1)vim黏贴缩进的问题:

    解:在.vimrc中加一句:
    set pastetoggle=<F9>
    在黏贴代码之前,进入insert模式,按F9,就可以关闭自动缩进
     (2)vim的默认配置
    答: /usr/share/vim/vim74/vimrc_example.vim 可以把他默认的配置拿到我们用户的配置下
     
     (3)ubuntu中vim不识别方向键:
    ubuntu预装的是vim tiny版本,而需要的是vim full版本。执行下面的语句安装vim full版本:
       $sudo apt-get remove vim-common
       $sudo apt-get install vim
     
     (4)SecureCRT快捷键
    Shift + Insert      粘帖
     
     (5)【待解决的问题】
    窗口中鼠标操作

    参考文档: 

     
    vim寄存器:
     
    IBM的VIM帮助文档:
     
     SecureCRT配置显示彩色:
     
    windows vim IDE环境打造:http://www.itboth.com/d/QbEJry/vim
    http://www.cnitblog.com/hustwei/archive/2008/05/21/44034.aspx
     

    经典vim插件功能说明-安装方法和使用方法介绍
    http://www.picb.ac.cn/~xiaohang/vimwiki/tools/vim/classic_vim_plugins.pdf


    http://blog.csdn.net/devil_2009/article/details/7006113

  • 相关阅读:
    [NOI2001]炮兵阵地
    POJ 2411 Mondriaan's Dream
    【模板】割点(割顶)
    [Noip2007]Core树网的核
    2018.09.09模拟总结
    2018.09.08模拟总结
    [USACO11JAN]Roads and Planes
    最优贸易
    [USACO08JAN]Telephone Lines
    Calabash(葫芦娃)
  • 原文地址:https://www.cnblogs.com/caixu/p/6337926.html
Copyright © 2020-2023  润新知