vim命令备忘

Vim
    一般模式:
        1.移动与跳转
            0                       光标移到行首
            $                       光标移到行尾
            G                       光标跳到最后一行
            1G                      光标跳到第一行
            gg = 1G
            nG                      光标跳到第n行
            n+Enter                 光标向下移动n行
        2.查找与替换
            /word                   向下查找word
            ?word                   向上查找word
            n                       英文小写字母n,用在在查找时,表示重复上一个查找的操作,光标跳到下一个匹配到的目标上
            N                       英文大写字幕N,同上,跳到上一个匹配到的目标上
            :n1,n2s/word1/word2/g   n1,n2是数字,在n1到n2行之间查找word1,并且替换为word2
                                    :n1,n2 -> search  word1 -> word2  go
            :1,$s/word1/word2/g     从第一行到最后一行查找word1,并且用word2替换
            :1,$s/word1/word2/gc    从第一行到最后一行查找word1,并且用word2依次替换,并且在替换前确认
                                    :1,$ -> search word1 -> word2 go confirm
        3.删除,复制和粘贴
            x                       向后删除一个字符,我理解的是删除光标包裹的那个字符
            X                       向前删除一个字符,光标包裹的前一个字符
            nx                      n为数字,向后删除n个字符,即删除从光标包裹开始的n个字符
            dd                      删除光标所在的那一行
            ndd                     删除,从光标开始向下的n行
            d1G                     删除光标所在到第一行的所有数据
            dG                      删除光标所在到最后一行的所有数据
            d0                      删除光标点到光标这一行第一个字符的所有数据
            d$                      删除光标点到光标这一行最后一个字符的所有数据
                                    注意:
                                    光标一般指的是,被光标包裹的字符,前面的那个缝隙
                                    所以,d0 删除的时候不会删除光标包裹的字符,而 d$ 删除时会删除光标包裹的那个字符
                                    字符在跳转,选择,删除,粘贴时候都遵循这个,del 和 backspace 亦是
            yy                      复制光标所在那一行
            nyy                     复制从光标所在那一行开始的向下n行
            y1G                     复制光标所在行到第一行所有数据
            yG                      复制光标所在行到最后一行的所有数据
            y0                      复制光标所在位置到该行行首的所有数据(不包括光标包裹的字符)
            y$                      复制光标所在位置到该行行尾的所有数据(包括光标包裹的字符)
            p                       粘贴数据
                                        若是按照行复制的(yy,nyy),则在光标的下一行粘贴
                                        若是按照字符个数复制(y0,y$),则是从光标所在的位置开始粘贴
            P                       粘贴,向上或者向前粘贴,规则同上
            c                       删除多行数据
            u                       撤销上一个操作
            Ctrl+r                  重复上一个操作
    二.一般模式:
            i                       insert,光标所在处插入
            I                       光标所在行的第一个非空格出开始插入,即在光标移动到第一个可见字符前面
            o                       insert,在光标所在下一行新开一行,开始插入
            O                       向上新开一行,开始插入
            a                       add,在光标所在的下一个字符开始添加
            A                       在行尾开始添加
            r                       replace,从光标处开始替换,只会替换一次
            R                       一直替换
    三.命令模式:
            :set nu                 显示行号
            :set nonu               关闭显示行号
            :w [filename]           另存为
            :r [filename]           读入文件,添加到光标所在行的后面
            :n1,n2 w [filename]     将n1行到n2行的内容保存到filename里面
            :!command               临时切换到外面执行命令
            :ZZ                     两个大写的Z,若文件没有更动则退出,有更动则保存后退出
插件的使用:
    一、安装vim和vim的基本插件
        命令:sudo apt-get install vim vim-scripts vim-doc
        vim-scripts是vim的基本插件,语法高亮,缩进等等
        vim-doc是vim帮助文档
    二、基本配置
        1.在个人目录下新建一个.vimrc的vim配置文件,并粘贴以下内容保存,如果用vim复制粘贴不方便,可以用gedit
            配置文件如下:
                " This line should not be removed as it ensures that various options are
                " properly set to work with the Vim-related packages available in Debian. 下面这句如果在ubuntu下要注释掉
                " debian.vim
                " Uncomment the next line to make Vim more Vi-compatible
                " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
                " options, so any other options should be set AFTER setting 'compatible'.
                set nocompatible
                " Vim5 and later versions support syntax highlighting. Uncommenting the
                " following enables syntax highlighting by default.
                if has("syntax")
                  syntax on            " 语法高亮
                endif
                colorscheme ron        " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下
                " detect file type
                filetype on
                filetype plugin on
                " If using a dark background within the editing area and syntax highlighting
                " turn on this option as well
                set background=dark
                " Uncomment the following to have Vim jump to the last position when
                " reopening a file
                if has("autocmd")
                  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
                  "have Vim load indentation rules and plugins according to the detected filetype
                  filetype plugin indent on
                endif
                " The following are commented out as they cause vim to behave a lot
                " differently from regular Vi. They are highly recommended though.
                "set ignorecase        " 搜索模式里忽略大小写
                "set smartcase        " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
                set autowrite        " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
                set autoindent        " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
                "set smartindent        " 智能对齐方式
                set tabstop=4        " 设置制表符(tab键)的宽度
                set softtabstop=4     " 设置软制表符的宽度
                set shiftwidth=4    " (自动) 缩进使用的4个空格
                set cindent            " 使用 C/C++ 语言的自动缩进方式
                set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s     "设置C/C++语言的具体缩进方式
                "set backspace=2    " 设置退格键可用
                set showmatch        " 设置匹配模式,显示匹配的括号
                set linebreak        " 整词换行
                set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
                "set hidden " Hide buffers when they are abandoned
                set mouse=a            " Enable mouse usage (all modes)    "使用鼠标
                set number            " Enable line number    "显示行号
                "set previewwindow    " 标识预览窗口
                set history=50        " set command history to 50    "历史记录50条
                "--状态行设置--
                set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
                set ruler            " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
                "--命令行设置--
                set showcmd            " 命令行显示输入的命令
                set showmode        " 命令行显示vim当前模式
                "--find setting--
                set incsearch        " 输入字符串就显示匹配点
                set hlsearch
                set clipboard=unnamed   " 允许vim与系统剪切板交互,当在系统复制了一段代码,允许直接在vim用p命令粘贴
            注意英语的双引号加空格表示后面的是注释
        2、管理vim插件工具 vim-addon-manager
            一般在安装了vim、vim-scripts和vim-doc之后就会安装好,如果没安装,可以用
            命令:sudo apt-get install vim-addon-manager
            进行安装
            如果要查看vim各个插件的状态,可以用
            命令:vim-addons status
            查看
            此外,我们可以利用vim-addon-manager安装官方插件,这里我们先要确定在个人目录下是否有~/.vim/plugin和~/.vim/doc两个目录,如果没有,自己分别新建好,当我们要安装xxx插件时,我们可以用
            命令:vim-addons install xxx
            进行安装
            对于vim-addons的详细用法,可以用
            命令:man vim-addons
            查看帮助文档
        3、安装ctags
            ctags用于建立源代码树的标签索引,用于快速定位函数,宏定义,变量等
            新安装的ubuntu没有ctags,可以用
            命令:sudo apt-get install ctags
            并在.vimrc文件中添加配置,实现按下F5更新工程中的tags文件
            配置文件:
                " *********************** ctags setting  ***********************************
                "
                " 按下F5重新生成tag文件,并更新taglist
                map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
                imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
                set tags=tags
                set tags+=./tags "add current directory's generated tags file
                " set tags+=/usr/include/systags "add new tags file(增加其他路径下的tags,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
            要实现其他路径的代码索引,必须生成代码的tags的文件,例如要生成标准库的tags文件,步骤为cd到目录/usr/include,然后用
            命令:sudo ctags -R --c++-kinds=+p --fields=+iaS --extra=+q *
            建立该目录以及子目录的索引,其中 * 表示建立该目录及其子目录的索引
            然后我们会发现该目录下多了一个tags文件,并重命名为systags
            为了省去每次建立工程时添加tags文件,可以在.vimrc文件中添加配置命令(上述配置中已经添加)
            set tags+=/usr/include/systags
            这样每次建立工程的时候就会自动添加该路径下的tags文件
            要注意的是,这个tags文件不能随便移动,我试过将这个文件移动到其他地方,发现/usr/include子目录下的文件会找不到
            当我们要查看某个函数的原型时,将光标停留在函数名上,用快捷键ctrl+w+],就能在vim中增加一个新窗口,并定位到函数的原型上,如果用快捷键ctrl+],则会在原来的窗口上进行定位,用快捷键ctrl+o,则会返回到原来的代码编辑位置
        4、vim自动补全——OmniCppComplete
            用vim-addons安装该插件
            命令:vim-addons install omnicppcomplete
            然后在.vimrc中添加如下配置,设置插件的补全功能
            配置文件:
                " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
                imap <F3> <C-X><C-O>
                " 按下F2根据头文件内关键字补全
                imap <F2> <C-X><C-I>
                set completeopt=menu,menuone " 关掉智能补全时的预览窗口
                let OmniCpp_MayCompleteDot = 1 " autocomplete with .
                let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
                let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
                let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
                let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
                let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
                let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
                let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
                "let OmniCpp_DefaultNamespaces=["std"]
                let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
                let OmniCpp_ShowAccess=1
            由于该插件的补全功能基于ctags的数据,所以用ctags生成索引的时候要添加额外的参数
            命令:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
            其中,--c++-kinds=+p : 为C++文件增加函数原型的标签
            --fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
            --extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
            在编写代码时,假如我们要敲printf,此时只要敲prin,然后用快捷键ctrl+x ctrl+o,就能呼出候选函数
            此外,还有常用的快捷键
            当自动补全下拉窗口弹出后,一些可用的快捷键:
            Ctrl+P 向前切换成员
            Ctrl+N 向后切换成员
            Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
            Ctrl+Y 表示退出下拉窗口, 并接受当前选项
            其他补全方式:
            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 拼写建议
            帮助文档
            :help omnicppcomplete
        5、提示函数原型echofunc
            echofunc可以在命令行中提示当前输入函数的原型。
            echofunc下载地址:http://www.vim.org/scripts/script.PHP?script_id=1735
            下载完成后,把echofunc.vim文件放到 ~/.vim/plugin文件夹中
            当你在vim插入(insert)模式下紧接着函数名后输入一个"("的时候, 这个函数的声明就会自动显示在命令行中。如果这个函数有多个声明, 则可以通过按键"Alt+-"和"Alt+="向前和向后翻页, 这个两个键可以通过设置g:EchoFuncKeyNext和g:EchoFuncKeyPrev参数来修改。这个插件需要tags文件的支持, 并且在创建tags文件的时候要加选项"--fields=+lS"(OmniCppComplete创建的tag文件也能用),
             整个创建tags文件的命令如下:
            命令:ctags -R --fields=+lS
        7、标签浏览器Taglist
            Taglist用于列出了当前文件中的所有标签(宏, 全局变量, 函数名等)
            正常来说,按照上述步骤操作,Taglist已经安装到vim中了,如果还没安装,可以用
            命令:vim-addons install taglist
            进行安装
            如果出现:Info: ignoring 'taglist' which is neither removed nor broken 的错误,有可能是因为taglist已经安装好了,打开vim,在命令模式下输入
            命令:Tlist
            如果出现标签栏说明已经安装好了,此外还可以使用
            此外,还要在.vimrc里对Taglist进行配置
            配置文件:
                let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
                let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边
                let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表
                let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
                let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim
                "是否一直处理tags.1:处理;0:不处理
                let Tlist_Process_File_Always=1 "实时更新tags
                let Tlist_Inc_Winwidth=0
            命令::help taglist.txt  查看帮助文档
        7、文件浏览器和缓冲区管理器WinManager
            WinManager用于管理文件浏览器和缓冲区(buffer)。2.0以上版本的WinManager还可以管理其他IDE类型插件,不过要用户在插件中增加一些辅助变量和hook来支持WinManager(帮助文档有相关说明)。
            Taglist插件本身就提供了对WinManager的支持,不需要我们去修改它。这里,我们就用WinManager来管理文件浏览器netrw和标签浏览器Taglist。netrw是标准的vim插件, 已经随vim一起安装进系统里了, 不需要我们自行下载安装。
            安装WinManager,可以用
            命令:vim-addons install winmanager
            配置winmanager可以在.vimrc里面添加配置
            配置文件:
                "-- WinManager setting --
                let g:winManagerWindowLayout='FileExplorer|TagList' " 设置我们要管理的插件
                "let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim
                nmap wm :WMToggle<cr>
            常用命令
            :WMToggle 打开/关闭WinManage,不过我们在配置文件.vimrc中做了快捷键映射,所以直接按wm就可以打开/关闭WinManage
            文件浏览器命令(在文件浏览器窗口中使用)
            <enter>或双击 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
            <tab> 如果光标下是目录, 则进入该目录; 如果光标下文件, 则在新窗口打开该文件
            <F5> 刷新列表
            - 返回上一层目录
            c 使浏览目录成为vim当前工作目录
            d 创建目录
            D 删除当前光标下的目录或文件
            i 切换显示方式
            R 文件或目录重命名
            s 选择排序方式
            r 反向排序列表
            x 定制浏览方式, 使用你指定的程序打开该文件
            winmanager帮助文档
            :help winmanager
            netrw帮助文档
            :help netrw
        8、buffer管理器MiniBufferExplorer
            MiniBufferExplorer用于浏览和管理buffer,如果只打开一个文件,是不会显示在屏幕上的,而打开多个文件之后,会自动出现在屏幕上。vim也有自带的buffer管理工具,不过只有:ls, :bnext, :bdelete 等的命令, 既不好用, 又不直观.
            关于vim缓冲区(buffer)和窗口的概念(详见:help windows)
            "缓冲区" 是一块内存区域,里面存储着正在编辑的文件。如果没有把缓冲区里的文件存盘,那么原始文件不会被更改。
            "窗口" 被用来查看缓冲区里的内容。你可以用多个窗口观察同一个缓冲区,也可以用多个窗口观察不同的缓冲区。
            "屏幕" Vim 所用的整个工作区域,可以是一个终端模拟窗口,也被叫做 "Vim 窗口"。一个屏幕包含一个或多个窗口,被状态行和屏幕底部的命令行分割。
            安装该插件可以用(按照上面的步骤下来应该已经装好了,或者vim已经自带了)
            命令:vim-addons install minibufexplorer
            并在.vimrc中添加配置
            配置文件:
                " -- MiniBufferExplorer --
                let g:miniBufExplMapWindowNavVim = 1 " 按下Ctrl+h/j/k/l,可以切换到当前窗口的上下左右窗口
                let g:miniBufExplMapWindowNavArrows = 1 " 按下Ctrl+箭头,可以切换到当前窗口的上下左右窗口
                let g:miniBufExplMapCTabSwitchBufs = 1 " 启用以下两个功能:Ctrl+tab移到下一个buffer并在当前窗口打开;Ctrl+Shift+tab移到上一个buffer并在当前窗口打开;ubuntu好像不支持
                "let g:miniBufExplMapCTabSwitchWindows = 1 " 启用以下两个功能:Ctrl+tab移到下一个窗口;Ctrl+Shift+tab移到上一个窗口;ubuntu好像不支持
                let g:miniBufExplModSelTarget = 1    " 不要在不可编辑内容的窗口(如TagList窗口)中打开选中的buffer
            常用命令
            <Tab> 移到上一个buffer
            <Shift-Tab> 移到下一个buffer
            <Enter> 打开光标所在的buffer
            d 删除光标所在的buffer
        9、代码折叠fold
            折叠用于把缓冲区内某一范围内的文本行显示为屏幕上的一行。就像一张纸,要它缩短
            些,可以把它折叠起来。
            那些文本仍然在缓冲区内而没有改变。受到折叠影响的只是文本行显示的方式。
            折叠的好处是,通过把多行的一节折叠成带有折叠提示的一行,会使你更好地了解对文本
            的宏观结构。
            折叠方式foldmethod
            vim提供以下6种方法来选定折叠方式:
            manual 手工定义折叠
            indent 更多的缩进表示更高级别的折叠
            expr 用表达式来定义折叠
            syntax 用语法高亮来定义折叠
            diff 对没有更改的文本进行折叠
            marker 对文中的标志折叠
            折叠级别foldlevel
            'foldlevel' 是个数值选项:数字越大则打开的折叠更多。
            当 'foldlevel' 为 0 时,所有的折叠关闭。
            当 'foldlevel' 为正数时,一些折叠关闭。
            当 'foldlevel' 很大时,所有的折叠打开。
            折叠栏foldcolumn
            'foldcolumn' 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为0时,没有折叠栏。最大是12。
            一个打开的折叠由一栏来表示,顶端是 '-',其下方是 '|'。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。
            一个关闭的折叠由 '+' 表示。
            当折叠栏太窄而不能显示所有折叠时,显示一数字来表示嵌套的级别。
            在折叠栏点击鼠标,可以打开和关闭折叠:
            - 点击 '+' 打开在这行的关闭折叠
            - 在任何其他非空字符上点击,关闭这行上的打开折叠
            在vim配置文件/home/user/.vimrc中加入如下的配置:
                set foldmethod=syntax " 用语法高亮来定义折叠
                set foldlevel=100 " 启动vim时不要自动折叠代码
                set foldcolumn=5 " 设置折叠栏宽度
            常用命令
            za 打开/关闭在光标下的折叠
            zA 循环地打开/关闭光标下的折叠
            zo 打开 (open) 在光标下的折叠
            zO 循环打开 (Open) 光标下的折叠
            zc 关闭 (close) 在光标下的折叠
            zC 循环关闭 (Close) 在光标下的所有折叠
            zM 关闭所有折叠
            zR 打开所有的折叠
            帮助文档
            :help usr_28.txt
            :help fold.txt
        10、项目数据管理器Project
            (其实我还不知道这东西拿来干嘛的,应该是我还没搞过大的工程,所以用不到) Project插件是用来显示项目的目录树的,这个目录树是默认保存在~/.vimprojects文件中。
            安装Project
                命令:vim-addons install project
            Project目录树可以通过下面的步骤生成:
            1) 打开vim在命令模式下输入 :Project,在屏幕的最左边就会出现一个project框。不过因为没有初始化暂时是空的
            2)在命令模式下(不是插入模式)输入\C (大写的C),会出现下面这些信息:
            Enter the Name of the Entry: xxxx (输入项目名称)
            Enter the Absolute Directory to Load: /xxx/xxx/xxx (输入项目根目录的绝对路径)
            Enter the CD parameter: . (“.”为当前目录)或者和项目根目录一致
            Enter the File Filter: *.* (符合条件的源文件,可以是*.cpp/*.h等)
            PS:项目目录可以嵌套。而且更改之后在~/.vimprojects文件中就能看到内容,你可以手动进行更改。
            Project目录树可以通过下面的步骤生成:
            1) 打开vim在命令模式下输入 :Project,在屏幕的最左边就会出现一个project框。不过因为没有初始化暂时是空的
            2)在命令模式下(不是插入模式)输入\C (大写的C),会出现下面这些信息:
            Enter the Name of the Entry: xxxx (输入项目名称)
            Enter the Absolute Directory to Load: /xxx/xxx/xxx (输入项目根目录的绝对路径)
            Enter the CD parameter: . (“.”为当前目录)或者和项目根目录一致
            Enter the File Filter: *.* (符合条件的源文件,可以是*.cpp/*.h等)
            PS:项目目录可以嵌套。而且更改之后在~/.vimprojects文件中就能看到内容,你可以手动进行更改。
        11、quickfix命令集
            通过quickfix命令集,你可在 Vim 内编译程序并直接跳转到出错位置进行修正。你可以接着重新编译并做修正,直到不再出错为止。
            在vim配置文件/home/user/.vimrc中加入如下的配置:
                " 按下F6,执行make clean
                map <F6> :make clean<CR><CR><CR>
                " 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息
                map <F7> :make<CR><CR><CR> :copen<CR><CR>
                " 按下F8,光标移到上一个错误所在的行
                map <F8> :cp<CR>
                " 按下F9,光标移到下一个错误所在的行
                map <F9> :cn<CR>
                " 以上的映射是使上面的快捷键在插入模式下也能用
                imap <F6> <ESC>:make clean<CR><CR><CR>
                imap <F7> <ESC>:make<CR><CR><CR> :copen<CR><CR>
                imap <F8> <ESC>:cp<CR>
                imap <F9> <ESC>:cn<CR>
            帮助文档
            :help usr_30
            :help quickfix
            下面的命令运行 "make" (包括你所给出的参数) 程序并捕捉其运行结果: >
            :make {arguments}
            如果编译时出现错误,按 <Enter>,回到vim界面,看不到出错信息了!这时,可以运行以下命令
            :cw[indow]
            打开quickfix窗口来查看出错信息,它会自动跳到第一处出错的地方。然后,你可以双击出错某一条出错信息,vim就会自动跳转到相应的出错位置
            :cn[ext] 光标移到下一个错误所在的行
            :cp[revious] 光标移到上一个错误所在的行
            :cfirst 到第一处错误
            :clast 到最后一处错误
            :cc 空间不够时,Vim 会缩短出错信息。如果你想查看详细信息,可以使用此命令
            :cl[ist] 列出所有出错信息的概览(只有那些含有文件名或行数的错误信息会被显示,需要查看那些并不含文件名或行数的信息可用“:cl[ist]!”命令)
        12、cscope
            Cscope是一个类似于ctags的工具,不过其功能比ctags强大很多。
            安装Cscope
            命令:sudo apt-get install cscope
            在vim配置文件/home/user/.vimrc中加入如下的配置:
                    if has("cscope")
                        set csprg=/usr/bin/cscope        " 指定用来执行cscope的命令
                        set csto=0                        " 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
                        set cst                            " 同时搜索cscope数据库和标签文件
                        set cscopequickfix=s-,c-,d-,i-,t-,e-    " 使用QuickFix窗口来显示cscope查找结果
                        set nocsverb
                        if filereadable("cscope.out")    " 若当前目录下存在cscope数据库,添加该数据库到vim
                            cs add cscope.out
                        elseif $CSCOPE_DB != ""            " 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
                            cs add $CSCOPE_DB
                        endif
                        set csverb
                    endif
                    map <F4> :cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
                    imap <F4> <ESC>:cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
                    " 将:cs find c等Cscope查找命令映射为<C-_>c等快捷键(按法是先按Ctrl+Shift+-, 然后很快再按下c)
                    nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
                    nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
                    nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
                    nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
                    nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
                    nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<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> :copen<CR><CR>
            cscope的主要功能是通过其"find"子命令来实现的
            "cscope find"的用法:
            cs find c|d|e|f|g|i|s|t name
            0 或 s 查找这个 C 符号(可以跳过注释)
            1 或 g 查找这个定义
            2 或 d 查找这个函数调用的函数
            3 或 c 查找调用过这个函数的函数
            4 或 t 查找这个字符串
            6 或 e 查找这个 egrep 模式
            7 或 f 查找这个文件
            8 或 i 查找包含这个文件的文件
            用法:
            <1>、为源码建立一个cscope数据库
            lingd@ubuntu:~/arm/Linux-2.6.28.7$ cscope -Rbq
            lingd@ubuntu:~/arm/linux-2.6.28.7$ ls cscope.*
            cscope.in.out cscope.out cscope.po.out
            <2>、用vim打开某个源码文件,末行模式下,输入“:cs add cscope.out"(该命令已被我们映射为快捷键F4),添加cscope数据库到vim。因为我们已将vim配置为启动时,自动添加当前目录下的cscope数据库,所以你再添加该cscope数据库时,vim会提示“重复cscope数据库 未被加入“
            <3>、完成前两步后,现在就可以用“cs find c”等Cscope查找命令查找关键字了。我们已在.vimrc中将“cs find c”等Cscope查找命令映射为<C-_>c等快捷键(按法是先按Ctrl+Shift+-, 然后很快按下c)
            帮助文档
            :help if_cscop
            注意:帮助文档if_cscop中,快捷键映射nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>是有误的!
            比如光标“header.h”上按下<C-_>i,也就是查找包含“header.h“的文件。但是按照这个映射规则,则是将<C-_>i映射为cs find i ^header.h$,也就是查找包含“^header.h$“的文件,这显然不是我们想要的结果。该映射规则应该改成nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
        13、快捷键汇总
            根据上面的配置 F2-F9 按键的功能为:
            F2:根据头文件内关键字进行补全
            F3:自动补全代码
            F4:添加cscope数据库到vim
            F5:更新当前目录下的tags文件
            F6:执行make clean命令
            F7:执行make命令
            F8:编译错误时移动到上一个错误
            F9:编译错误时移动到下一个错误
            vim常用快捷键(一般模式下)
            shift+v:视图模式
            gg:光标移动到文档开头
            G:光标移动到最后一行开头
            shift+$:移动到该行的末尾
            i:进入插入模式(光标前位置进行插入)
            a:进入插入模式(光标后位置进行插入)
            o:在光标下新建一行并进入插入模式
            O:在光标上新建一行并进入插入模式
            I:在该行行尾进入插入模式
            A:在该行行首进入插入模式
            y:复制到vim剪切板
            p:从vim剪切板拷贝
            "+y:复制到系统剪切板
            "+p:从系统剪切板进行复制
            u:撤销上一步操作
            ctrl+r:恢复上一步撤销
            j/k/h/l:光标上/下/左/右移动
            dd:删除整行

猜你喜欢

转载自www.cnblogs.com/zeroisbug/p/8983791.html