一、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 w :w!

nmap f :find



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

" 设置当文件被改动时自动载入
"
" set autoread
"
" " quickfix模式
"
" autocmd FileType c,cpp map   :w:make
"
" "代码补全 
"
 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 ( ()i
"
 :inoremap ) =ClosePair(')')
"
 :inoremap { {}O
"
 :inoremap } =ClosePair('}')
"
 :inoremap [ []i
"
 :inoremap ] =ClosePair(']')

 :inoremap " ""i
"
 :inoremap ' ''i
"
 function! ClosePair(char)
     if getline('.')[col('.') - 1] == a:char
"
             return "\"
"
                 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--

"
"
"
" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
" "默认打开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

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

Linux(centos)下vim、ctags的配置及基本用法详解_第1张图片

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


二、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

(4) tar zxvf ctags-5.6.tar.gz
  cd ctags-5.6
  ./configure && make && make install


(5)完成后 ls

Linux(centos)下vim、ctags的配置及基本用法详解_第2张图片

在其中有个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是隐藏文件  所以在“查看”中勾选“显示隐藏文件”就可以看见隐藏文件

Linux(centos)下vim、ctags的配置及基本用法详解_第3张图片

在其中加入以下代码

"    "--ctags setting--
"    "" 按下F5重新生成tag文件,并更新taglist
map  :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . :TlistUpdate
imap  :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . :TlistUpdate

   " 按下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  返回

Linux(centos)下vim、ctags的配置及基本用法详解_第4张图片

三、对于ctags而言:

"-R"表示递归创建,也就包括源代码根目录下的所有子目录下的源程序。"tags"文件中包括这些对象的列表:
l 用#define定义的宏
l 枚举型变量的值
l 函数的定义、原型和声明
l 名字空间(namespace)
l 类型定义(typedefs)
l 变量(包括定义和声明)
l 类(class)、结构(struct)、枚举类型(enum)和联合(union)
l 类、结构和联合中成员变量或函数