IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Centos下vim、ctags的配置及基本用法

    summer发表于 2016-06-01 07:05:39
    love 0

       一、vi/vim 基本使用方法 

         vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的配置和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

        下载安装 vim:yum -y install vim*

     查看:

    wKioL1dCiMSQ_sRkAAAKBjJXmCI470.png

           vi有三种模式:

    (1)一般模式:进入vi的默认模式,能够进行复制、黏贴、删除等操作;

    (2)编辑模式:从一般模式按下‘i’即可进入;

    (3)命令行模式:从一般模式按下“:”、'?'、'/'即可进入;

       

     “一般模式”的常用按键

      h  向左   G 光标移到最后一行
      J  向下    nG 光标移动到第n行
      K  向上  gg或1G 光标移动到第一行
      l

     向右

     /hello 向下查找hello
     10h 向左10个字符  ?hello 向上查找hello

     10j

    向下10行

      u  撤销

     10k

    向上10行

      x 向后删除一个字符
     10l 向右10个字符         X 向前删除一个字符
     n[空格] 光标向右移动n个字符   3x 向后删除3个字符

     N[Enter]

    跳到第n行    

      

    一、vim的配置

    1.在~/.vimrc中添入以下代码

    (在此我是在#/home/usr/下添加的)

    "winpos 5 5          " 设定窗口位置  
    "
    ""set lines=40 columns=155    " 设定窗口大小  

    "set nu              " 显示行号  
    "
    "set go=             " 不要图形按钮  
    "
    ""color asmanian2     " 设置背景主题  

    set guifont=Courier_New:h10:cANSI   " 设置字体  

    "syntax on           " 语法高亮  
    "
    "autocmd InsertLeave * se nocul  " 用浅色高亮当前行  
    "
    "autocmd InsertEnter * se cul    " 用浅色高亮当前行  
    "
    ""set ruler           " 显示标尺  

    set showcmd         " 输入的命令显示出来,看的清楚些  

    "set cmdheight=1     " 命令行(在状态行下)的高度,设置为1  
    "
    ""set whichwrap+=<,>,h,l   " 允许backspace和光标键跨越行边界(不建议)  

    "set scrolloff=3     " 光标移动到buffer的顶部和底部时保持3行距离  
    "
    "set novisualbell    " 不要闪烁(不明白)  
    "
    "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\
    "%{strftime(\"%d/%m/%y\ -\ %H:%M\")}   "状态行显示的内容  
    "
    "set laststatus=1    " 启动显示状态行(1),总是显示状态行(2)  
    "
    "set foldenable      " 允许折叠  
    "
    "set foldmethod=manual   " 手动折叠  
    "
    ""set background=dark "背景使用黑色 

    set nocompatible  "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限  

    " 显示中文帮助
    "
    " if version >= 603
    "
    "     set helplang=cn
    "
    "         set encoding=utf-8
    "
    "         endif
    "
    "         " 设置配色方案
    "
    "         "colorscheme murphy
    "
    "         "字体 
    "
    "         "if (has("gui_running")) 
    "
    "         "   set guifont=Bitstream\ Vera\ Sans\ Mono\ 10 
    "
    "         "endif 
    "
    "
    "          
    "          set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
    "
    "          set termencoding=utf-8
    "
    "          set encoding=utf-8
    "
    "          set fileencodings=ucs-bom,utf-8,cp936
    "
    "          set fileencoding=utf-8
    "
    "
    "

    nmap <leader>w :w!<cr>

    nmap <leader>f :find<cr>

    " 映射全选+复制 ctrl+a
    "
    " map <C-A> ggVGY
    "
    " map! <C-A> <Esc>ggVGY
    "
    " map <F12> gg=G
    "
    " " 选中状态下 Ctrl+c 复制
    "
    " vmap <C-c> "+y
    "
    " "去空行  
    "
     nnoremap <F2> :g/^\s*/d<CR> 
    "
    " "比较文件  
    "
    " nnoremap <C-F2> :vert diffsplit 
    "
    " "新建标签  
    "
    " map <M-F2> :tabnew<CR>  
    "
    " "列出当前目录文件  
    "
    " map <F3> :tabnew .<CR>  
    "
    " "打开树状文件目录  
    "
    " map <C-F3> \be  
    "
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    " 设置当文件被改动时自动载入
    "
    " set autoread
    "
    " " quickfix模式
    "
    " autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
    "
    " "代码补全 
    "
     set completeopt=preview,menu 
    "
    " "允许插件  
    "
    " filetype plugin on
    "
    " "共享剪贴板  
    "
    " set clipboard+=unnamed 
    "
    " "从不备份  
    "
    " set nobackup
    "
    " "make 运行
    "
     :set makeprg=g++\ -Wall\ \ %
    "
    " "自动保存
    "
    " set autowrite
    "
    " set ruler                   " 打开状态栏标尺
    "
    " set cursorline              " 突出显示当前行
    "
    " set magic                   " 设置魔术
    "
    " set guioptions-=T           " 隐藏工具栏
    "
    " set guioptions-=m           " 隐藏菜单栏
    "
    " "set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\
    " %{&encoding}\ %c:%l/%L%)\
    "
    " " 设置在状态行显示的信息
    "
    " set foldcolumn=0
    "
    " set foldmethod=indent 
    "
    " set foldlevel=3 
    "
    " set foldenable              " 开始折叠
    "
    " " 不要使用vi的键盘模式,而是vim自己的
    "
    " set nocompatible
    "
    " " 语法高亮
    "
     set syntax=on
    "
    " " 去掉输入错误的提示声音
    "
    " set noeb
    "
    " " 在处理未保存或只读文件的时候,弹出确认
    "
    " set confirm
    "
    " " 自动缩进
    "
    " set autoindent
    "
    " set cindent
    "
    " " Tab键的宽度
    "
     set tabstop=4
    "
    " " 统一缩进为4
    "
    " set softtabstop=4
    "
    " set shiftwidth=4
    "
    " " 不要用空格代替制表符
    "
    " set noexpandtab
    "
    " " 在行和段开始处使用制表符
    "
    " set smarttab
    "
    " " 显示行号
    "
     set number
    "
    " " 历史记录数
    "
     set history=1000
    "
    " "禁止生成临时文件
    "
    " set nobackup
    "
    " set noswapfile
    "
    " "搜索忽略大小写
    "
     set ignorecase
    "
    " "搜索逐字符高亮
    "
     set hlsearch
    "
     set incsearch
    "
    " "行内替换
    "
    " set gdefault
    "
    " "编码设置
    "
     set enc=utf-8
    "
     set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
    "
    " "语言设置
    "
     set langmenu=zh_CN.UTF-8
    "
     set helplang=cn
    "
    " " 我的状态行显示的内容(包括文件类型和解码)
    "
    " "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\
    " %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
    "
    " "set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]
    "
    " " 总是显示状态行
    "
     set laststatus=2
    "
    " " 命令行(在状态行下)的高度,默认为1,这里是2
    "
    " set cmdheight=2
    "
    " " 侦测文件类型
    "
    " filetype on
    "
    " " 载入文件类型插件
    "
    " filetype plugin on
    "
    " " 为特定文件类型载入相关缩进文件
    "
    " filetype indent on
    "
    " " 保存全局变量
    "
    " set viminfo+=!
    "
    " " 带有如下符号的单词不要被换行分割
    "
    " set iskeyword+=_,,@,%,#,-
    "
    " " 字符间插入的像素行数目
    "
    " set linespace=0
    "
    " " 增强模式中的命令行自动完成操作
    "
    " set wildmenu
    "
    " " 使回格键(backspace)正常处理indent, eol, start等
    "
    " set backspace=2
    "
    " " 允许backspace和光标键跨越行边界
    "
    " set whichwrap+=<,>,h,l
    "
    " " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
    "
     set mouse=a
    "
     set selection=exclusive
    "
     set selectmode=mouse,key
    "
    " " 通过使用: commands命令,告诉我们文件的哪一行被改变过
    "
     set report=0
    "
    " " 在被分割的窗口间显示空白,便于阅读
    "
    " set fillchars=vert:\ ,stl:\ ,stlnc:\
    "
    " " 高亮显示匹配的括号
    "
     set showmatch
    "
    " " 匹配括号高亮的时间(单位是十分之一秒)
    "
     set matchtime=1
    "
    " " 光标移动到buffer的顶部和底部时保持3行距离
    "
    " set scrolloff=3
    "
    " " 为C程序提供自动缩进
    "
    " set smartindent
    "
    " " 高亮显示普通txt文件(需要txt.vim脚本)
    "
     au BufRead,BufNewFile *  setfiletype txt
    "
    " "自动补全
    "
     :inoremap ( ()<ESC>i
    "
     :inoremap ) <c-r>=ClosePair(')')<CR>
    "
     :inoremap { {<CR>}<ESC>O
    "
     :inoremap } <c-r>=ClosePair('}')<CR>
    "
     :inoremap [ []<ESC>i
    "
     :inoremap ] <c-r>=ClosePair(']')<CR>

     :inoremap " ""<ESC>i
    "
     :inoremap ' ''<ESC>i
    "
     function! ClosePair(char)
         if getline('.')[col('.') - 1] == a:char
    "
                 return "\<Right>"
    "
                     else
    "
                             return a:char
    "
                                 endif

                                 endfunction
    "
                                 filetype plugin indent on 
    "
    "                             "打开文件类型检测, 加了这句才可以用智能补全
    "
                                 set completeopt=longest,menu
    "
    "                             """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    " CTags的设定  
    "
    " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "
     let Tlist_Sort_Type = "name"    " 按照名称排序  
    "
    let Tlist_Use_Right_Window = 1  " 在右侧显示窗口  
    "
     let Tlist_Compart_Format = 1    " 压缩方式  
    "
     let Tlist_Exist_OnlyWindow = 1  "
    " 如果只有一个buffer,kill窗口也kill掉buffer  
    "
    " let Tlist_File_Fold_Auto_Close = 0  " 不要关闭其他文件的tags  
    "
    " let Tlist_Enable_Fold_Column = 0    " 不要显示折叠树  
    "
    " autocmd FileType java set tags+=D:\tools\java\tags  
    "
    " "autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags  
    "
    " "let Tlist_Show_One_File=1
    " "不同时显示多个文件的tag,只显示当前文件的
    "
    " "设置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/local/bin/ctags "add new tags file(刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
    set tags+=./tags "tags表示在当前工作目录下搜索tags文件
    set tags+=/usr/local/bin/ctags "表示在搜寻tags文件的时候,也要搜寻~/usr/文件夹下的tags文件. 
    " set tags=tags;  
    "set autochdir
    "
    "
    "
    " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "
    " "默认打开Taglist 
    "
    let Tlist_Auto_Open=1 
    "
    " """""""""""""""""""""""""""""" 
    "
    " " Tag list (ctags) 
    "
    " """""""""""""""""""""""""""""""" 
    "
     let Tlist_Ctags_Cmd = '/usr/bin/ctags' 
    "
     let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的 
    "
     let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim 
    "
     let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
    "
    " " minibufexpl插件的一般设置

     let g:miniBufExplMapWindowNavVim = 1

     let g:miniBufExplMapWindowNavArrows = 1

     let g:miniBufExplMapCTabSwitchBufs = 1
     let g:miniBufExplModSelTarget = 1

    对于上面的代码自己可以根据自己的需求设定(在上述代码中前面有引号的是注释掉的,如果你需设定哪个,就把前面的注释去掉)

    2.添加完成后::wq保存退出

    3.输入下面命令:

    cd /

    ls -al

    就可以查看此时 .vimrc存在;

    wKiom1dOZ6PCHf4RAAAMAyIAakI149.png

    wKiom1dOZ8-z-WQXAAAPegt_HIQ449.png

    4.然后用vim自己编辑一个程序:

    wKiom1dOaOPjXArbAAAsnozUYys138.png

    此时就可以看见有效果了,“行数”,“语法高亮”“括号自动补全”等。


    二、vim插件 ctags 的安装

    1.ctags

    (1)到
    http://ctags.sourceforge.net/下
    载ctags源码ctags-5.6.tar.gz

    (2)在自己的linux中浏览器粘贴以下地址

    http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz

    然后下载到“下载”目录中
    (3)解压并安装

      在控制台输入 #cd "下载"

    wKioL1dOcjeRHnnvAAAQIWNfQAk386.png

    wKiom1dOcTrg3STfAAANn-xZJLQ938.png

    (4) tar zxvf ctags-5.6.tar.gz

      cd ctags-5.6

      ./configure && make && make install


    wKioL1dObC-SnhZCAAAhLMZPmow508.png

    (5)完成后 ls

    wKioL1dObI2zJVMDAAEBnvUzOz4659.png

    在其中有个ctags 

    (6)将其分别拷贝一份到 #/usr/src 和# /home/hero 下(在此hero 是自己在home下的用户名) 

    cp ctags /usr/src   拷贝

    cp ctags /home/hero

    (7)然后进入cd /usr/src 目录下输入命令ctags -R:

    此时该目录下生成一个tags文件

    wKioL1dObhrBJT5TAAAYzPnva_Y260.png

    (8)同样 再进入cd /home/hero 目录下输入命令ctags -R:

    命令:ls 在此目录下也生成个 tags

    wKioL1dObzqRSjSTAAA30wdl0dk798.png

    (9)完成上述步骤后

    打开开始创建的 .vimrc文件(ps如果命令不好找就直接在桌面”计算机“中找)

    因为.vimrc是隐藏文件  所以在“查看”中勾选“显示隐藏文件”就可以看见隐藏文件

    wKioL1dOcOuABpK2AAElJAgq4VM027.png

    在其中加入以下代码

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

       " 按下F5重新生成tag文件,并更新taglist
                    set tags=tags
                     "   set tags+=./tags "add current directory's generated tags file
                            set tags+=~/home/hero/tags "add new tags   file(刚刚生成tags的路径,在ctags -R
                           " 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
                              set tags+=/usr/src/tags

    在上面 只要将第二个用户名一改就可以了

    然后自己vim一个程序 将鼠标移到printf上  按ctrl+w+] 就可以看见printf定义  ctrl+o  返回

    wKioL1dOc7yDYpf4AACxEabY4UU636.png

     



沪ICP备19023445号-2号
友情链接