vim

头像
hatlonely
    阅读 18 分钟
    2

    VIM

    光标移动

    • 基本

      h j k l
      
    • b   向前移动,光标停在第一个字符 (backward)
      w   向后移动,光标停在第一个字符 (word)
      e   向后移动,光标停在最后一个字符 (end of word)
      
    • 行首或行尾

      $   移动到行尾
      ^   移动到行首,非空白字符
      0   移动到行首,第一个字符
      
    • 指定字符

      f   单行搜索下一个单个字符 (find)
      F   单行搜索上一个单个字符
      t   单行搜索下一个单个字符,光标停在前一个字符 (to)
      T   单行搜索上一个单个字符,光标停在前一个字符
      
    • 匹配括号

      %   移动到匹配的括号或移动到括号
      
    • 移动到指定行

      G    移动到最后一行
      33G  移动到第 33行
      gg   移动到第一行
      40%  移动到40%
      H    移动到屏幕内第一行 (home)
      M    移动到屏幕内中间 (middle)
      L    移动到屏幕内最后一行 (last)
      
    • 滚屏

      <c-u>  向上滚动半屏 (up)
      <c-d>  向下滚动半屏 (down)
      <c-f>  向下滚动一屏 (forward)
      <c-b>  向上滚动一屏 (backward)
      
    • 简单查找

      /string      向下查找包含 string的词
      ?string      向上查找包含 string的词
      /\<string\>  向下查找 string
      ?\<string\>  向上查找 string
      n            重复前一次查找
      N            重复前一次相反的查找
      /<up>        之前的查找
      *            向下查找光标所在处的词,全词匹配
      #            向上查找光标所在处的词,全词匹配
      g*           向下查找包含光标所在处的词
      g#           向上查找包含光标所在处的词
      
    • 标记:

      m{mark}  讲此处标记为 mark,mark 为一个字母
      `{mark}  跳到标记 mark处,` 是1左边那个键
      '{mark}  跳到标记 mark处所在行行首,'是单引号
       特殊的mark
          '  此次跳转之前的起跳点
          "  上次编辑该文件时光标最后停留的位置
          [  最后一次修改的起始位置
          ]  最后一次修改的结束位置
      
    • 其他命令

      :set number    显示行号,左边 (se nu)
      :set nonumber  不显示行号(se nonu)
      :set ruler     显示光标位置,右下角 (se ru)
      :set noruler   不显示光标位置 (se noru)
      
      :set ignorecase    查找忽略大小写
      :set noignorecase  查找不忽略大小写
      :set hlsearch      查找高亮 (se hls)
      :set nohlserch     关闭查找 (se nohls)
      :set incsearch     键入目标字符串时就开始查找
      :set nowrapscan    搜索过程在文件结束时就停止
      

    简单修改

    • 插入

      i  在当前光标处插入
      I  在当前行第一个非空白字符前插入
      a  在当前光标之后插入
      A  在当前行尾插入
      o  在当前行之下插入
      O  在当前行之上插入
      
    • 删除

      d   删除操作符 (delete)
      c   修改操作符,删除之后自动进入插入 (change)
      dd  删除一行
      cc  修改一行
      x   dl ,删除光标处字符
      X   dh ,删除光标左边的字符
      D   d$ ,删除到行尾
      C   c$ ,修改到行尾
      s   cl ,修改光标字符
      S   cc ,修改一整行
      r   替换(删除之后插入并回到 Normal)
      .   执行上一次所执行的更改命令
      
    • 复制

      y    复制操作符 (yanking)
      yy   复制一行
      yw   复制word,包含之后空白字符
      ye   复制word,不包含之后空白字符
      yaw  复制word,包含之后空白字符
      yiw  复制word,不包含之后空白字符
      yab  复制一个小括号里面的内容,包括括号本身
      yib  复制一个小括号里面的内容,不包括括号本身
      ya{  复制一个大括号里面的内容,包括括号本身
      yi{  复制一个大括号里面的内容,不包括括号本身
      p    粘贴(put)
      
    • 对齐

      =    对齐操作符
      ==   对齐一行
      n==  对齐n行
      =a{  对齐一个大括号里面的内容
      
    • 大小写替换

      ~     大小写替换
      g~    大小写替换操作
      g~iw  改变光标处单词大小写
      guiw  光标处单词变成小写
      gUiw  光标处单词变成大写
      
    • 命令计数器 n+命令

      一个命令重复执行
      如:4x删除 4个字符
      
    • 操作命令符 +位移命令符

      操作如:删除 d,复制y ;位移如:词语 w,$ 行尾
      d$    删除到句尾
      4yy   复制4行
      3dw   3次删除一个单词
      d3w   一次删除 3个单词
      3d2w  3次删除 2个单词
      
    • 常用删除命令

      x(dl), X(dh), D(d$), dw, db, diw, daw, dG, dgg
      
    • visual 模式(主要功能就是选择)

      v 进入visual模式,移动光标选择操作文本范围
      V 进入visual行模式,选择以行为单位
      <c-v> 进入visual块模式,选择块
      

    查找替换

    • 查找命令

      /, ?, n, N, #, *, g#, g*, gd, gD
      
    • 替换命令

      :[n,m]s/[src]/[dst]/[g][c]
      [n,m]  表示一个范围,从 n~m行中查找替换,[n,$]表示从第 n行之后
      %      表示整个文件
      [src]  要查找的词, [dst]要替换的词
      [g]    替换所有的匹配,若没有,只匹配第一个
      [c]    替换前询问
      /      为分隔符,也可以用 +或# 来分隔
      
      :s/src/dst/         替换当前行第一个 src为dst
      :s/src/dst/g        替换当前行所有 src为dst
      :n,ms/src/dst/      替换n~m行第一个 src为dst
      :n,$s/src/dst/g     替换第n行到最后一行中所有 src为dst
      :%s/src/dst/g       替换整个文件中所有 src为dst
      :%s/src/dst/gc      替换整个文件中所有 src为dst 并询问是否替换
      :%s/\<src\>/dst/gc  与:%s/src/dst/gc一样(全词匹配)
      
    • 正则匹配

      *   匹配0以上之前的字符
      \+  匹配1个以上之前字符
      \=  匹配0个或 1个之前字符
      \?  匹配0个或 1个之前字符
      .   匹配任何单个字符
      \<  匹配一个单词的开始
      \>  匹配一个单词的结束
      \s  匹配空白字符 <space>和<tab>
      \S  匹配非空白字符
      \d  数字[0-9]
      \D  非数字[^0-9]
      \x  十六进制数字 [0-9A-Fa-f]
      \X  费十六进制数字 [^0-9A-Fa-f]
      \l  小写字符 [a-z]
      \L  非小写字符 [^a-z]
      \u  大写字符 [A-Z]
      \U  非大写字符 [^A-Z]
      \a  字符[A-Za-z]
      \A  非字符[^A-Za-z]
      []  任何[]中的字符
      
    • 更多

      :help pattern
      

    折叠

    • 折叠方式

      manual  手工定义折叠
      indent  更多的缩进表示更高级的折叠
      expr    用表达式来定义折叠
      syntax  用语法高亮来定义折叠
      diff    对没有更改的文本进行折叠
      marker  对文中的标志折叠
      set foldmethod=****   设置折叠方式
      marker方式,需要用标记来标识代码的折叠,系统默认是 {{{和}}}
      
    • 折叠命令

      zc      折叠
      zC      对所在范围内所有嵌套的折叠点进行折叠
      zo      展开
      zO      对所在范围内所有嵌套的折叠点展开
      zr, zR  折叠所有
      zm, zM  展开所有
      za, zA  折叠/打开当前折叠
      zi      折叠/展开所有
      [z      到当前打开的折叠开始处
      ]z      到当前打开的折叠末尾处
      zj      向下移动到下一个折叠开始处
      zk      向上移动到前一折叠的结束处
      zf      创建折叠
      zf56G   创建从当前行起到 56行的代码折叠
      10zf    创建从当前行起后 10行的代码折叠
      10zf-   创建从当前行起到之前 10行的代码折叠
      zf%     创建从当前行起到对应匹配的括号
      zd      删除光标下的折叠,仅当 manual或marker 方式有效
      zD      嵌套地删除光标下的折叠,仅当 manual或marker 方式有效
      zE      除去窗口里的所有折叠,仅当 manual或marker 方式有效
      
    • foldlevel

      'foldlevel' 是个数值选项:数字越大则打开的折叠更多
      当 'foldlevel' 为 0 时,所有的折叠关闭
      当 'foldlevel' 为正数时,一些折叠关闭
      当 'foldlevel' 很大时,所有的折叠打开
      'foldlevel' 的改变后立即生效。之后,折叠可以被手动地打开和关闭
      

    文件

    • 文件操作

      :w    保存
      :w!   强制保存
      :w filename        将当前缓冲区的内容保存成文件 filename
      :n1, n2, filename  将n1到 n2的内容保存为文件filename
      :q    退出当前窗口,若改动,提示失败
      :q!   强制退出,放弃改动
      :wq   保存后退出
      :wa   保存所有
      :qa   退出所有
      :wqa  保存所有后退出
      ZZ    相当于:wq
      
    • 编辑另一个文件

      :edit file
      
    • 多文件编辑

      vim filename1 filename2 ...
      :bn  跳转至下一缓冲区 (文件)( 最后一个 ->第一个)
      :bN  跳转到上一缓冲区 (文件)( 第一个->最后一个 )
      :bd  关闭当前缓冲区 (文件)
      :n   跳转至下一文件 ,如当前文件为最后一个,提示错误
      :N   跳转至上一文件 ,如当前文件为第一个,提示错误
      :next, :previous    跳转至下 /上一文件
      :wnext, :wprevious  保存当前文件并跳转至下 /上一文件
      :last, :first       跳转至最后一个 /第一个文件
      :files   列出当前已打开文件
      :args    给出进入 vim时命令行参数;当前正在编辑文件名用 "[]"列出
      
    • 窗口分隔

      <c-w>s  水平分割窗口
      <c-w>v  垂直分割窗口
      <c-w>w  切换至另一窗口
      <c-w>h  切换至左侧窗口
      <c-w>j  切换至下方窗口
      <c-w>k  切换至上方窗口
      <c-w>l  切换至右侧窗口
      <c-w>H  移动当前窗口到左边
      <c-w>J  移动当前窗口到下面
      <c-w>K  移动当前窗口到上面
      <c-w>L  移动当前窗口到右边
      :split filename    水平分隔窗口打开 filename
      :vsplit filename   垂直分割窗口打开 filename
      
    • 标签式编辑

      :tabnew filename  在新标签中打开
      gt, :tabnext      切换至下一个标签
      gT, :tabprevious  切换至上一个标签
      :tabc             关闭当前标签
      :tabl             切换至最后一个标签
      :tabmove n        切换到第 n个标签,默认标签编号从 0开始
      
    • 目录

      netrw 插件

      netrw 插件是vim的标准插件,在 .vimrc中只要设置了
      set nocp " 不与vi兼容
      filetype plugin on " 允许插件
      就可以使用 netrw插件了 
      

      打开目录

      Ex[plore]   打开当前目录或指定目录
      Se[xplore]  水平分割并打开当前目录或指定目录
      Ve[xplore]  垂直分割并打开当前目录或指定目录
      Te[xplore]  新建标签并打开当前目录或指定目录
      

      目录操作

      <cr>   进入目录
      <del>  试图删除文件 /目录
      -      上一级目录
      a      在正常显示,隐藏和显示三种方式间切换
      c      使浏览中的目录成为当前目录
      d      建立目录
      D      试图删除目录
      i      在瘦、长、宽、和树形的各种列表中切换
      <c-l>  刷新目录列表
      o      打开新浏览窗口,进入光标所在目录,使用水平分割
      p      预览文件
      P      在前一次使用的窗口里预览
      r      反转排序顺序
      R      给指定文件 /目录换名
      s      选择排序方式:按名字、时间、文件大小排序
      S      指定按名字排序的后缀优先级
      t      在新标签页里打开光标所在文件 /目录
      v      打开新浏览窗口,进入光标所在目录,使用垂直分割
      

    • 创建宏

      q + <register> + [一系列命令] + q
      <register> 指用户自定义的 a-z中的一个寄存器
      如:qa...q
      
    • 运行宏

      @ + <register>    运行寄存器中的宏
      @@                重复运行上一次宏
      10@a              重复运行寄存器 a中的宏10 次
      
      

    MAP

    • 映射模式

      普通模式
      可视模式
      操作符等待模式
      插入模式
      命令行模式
      
    • 映射模式代号

      <space>  普通、可视和选择、操作符等待
      n        普通
      v        可视和选择
      s        选择
      x        可视
      o        操作符等待
      !        插入和命令行
      i        插入
      l        插入、命令行和 Lang-Arg模式的":lmap" 映射
      c        命令行
      
    • 命令

      map {lhs} {rhs} 把普通、可视和选择、操作符等待模式下的 lhs命令映射成rhs,如:map tn :tabnew
      noremap      noremap对rhs不会重新扫描映射
      unmap {lhs}  取消对lhs的映射
      mapclear     取消所有 map映射
      nmap         只作用于普通模式下的映射
      imap         只作用于插入模式下的映射
      nnoremap     只作用于普通模式下的 noremap
      nunmap       只作用于普通模式下的 unmap
      nmapclear    只作用于普通模式下的 mapclear
      
    • 特殊参数

      <buffer>, <slient>, <special>, <script>, <expr>, <unique>
      <silent> 是指执行键绑定时不在命令行上回显
      <unique> 如果该映射或者缩写已经存在,则该命令会失败
      
    • mapleader

      mapleader 变量对所有 map映射命令起效
      它的作用是将参数 <leader>替换成mapleader 变量的值
      
    • 键表

      <k0>-<k9>  小键盘0-9
      <s-c>      shift + c
      <c-c>      ctrl + c
      <m-c>      alt + c 或 meta + c
      <a-c>      同<m-c>
      <t_xx>     termcap 里的"xx"入口键
      <cr>       回车
      <space>    空格
      <tab>      tab 键
      <up>       方向键上
      <down>     方向键下
      <left>     方向键左
      <right>    方向键右
      

    DIFF

    • 基本用法

      VIM 的diff模式是依赖于 diff命令

      # vimdiff FILE_LEFT FILE_RIGHT
      # vim -d FILE_LEFT FILE_RIGHT
      
    • 分割窗口启动 diff

      :diffsplit FILE_TOP             水平分割窗口比较文件
      :vertical diffsplit FILE_RIGHT  垂直分割窗口比较文件
      
    • 命令

      ]c  跳转到下一差异点
      [c  跳转到上一差异点
      dp, :diffput  把当前文件内容复制到另一文件
      do, :diffget  把另一文件内容复制到当前文件
      :diffupdate   刷新比较结果
      

    会话

    • session 和viminfo

      session中保存了所有窗口的视图和全局设置

      viminfo中保存了命令行历史、搜索字符串历史、输入行历史、非空的寄存器内容、文件的位置标记、最近搜索 /替换的模式、缓冲区列表、全局变量等信息

    • session

      :mksession [filename]  创建一个 session文件,省略文件名会自动创建一个名为 Session.vim文件
      :source [filename]     导入 session文件
      

      'sessionoptions'选项记录 session中保存的信息。缺省的'sessionoptions' 选项包括 "blank,buffers,curdir,folds,help,options,tabpages,winsize" ,意为session文件会恢复当前编辑环境的空窗口、所有的缓冲区、当前目录、折叠相关的信息、帮助窗口、所有的选项和映射、所有的标签页、窗口大小。

      如果你不希望在session中保存当前路径,而是希望 session文件所在的目录自动成为当前工作目录,那么,需要在 'sessionoptions' 去掉'curdir' , 加入'sesdir' ,这样每次载入 session文件时,这个文件所在的目录,就被设为 VIM的当前工作目录。

    • viminfo

      :wviminfo [filename]  手动创建一个viminfo文件
      :rviminfo [filename]  导入viminfo 文件
      

      在VIM退出时,每次都会保存一个 .viminfo文件在用户的主目录。'viminfo' 选项决定 ':wviminfo'命令保存哪些内容,以及保存的数目

    TAB

    • 命令

      set expandtab      在插入时, <tab>键以一定数量的<space>代替
      set tabstop=4      <tab> 被当做的 <space>的数量
      set shiftwidth=4   每次缩进插入的 <space>的数量
      set smarttab       在行前插入 <tab>根据shiftwidth 空格
      set softtabstop=4  输入tab 时插入<tab>和 <space>的混合
      set list           显示<tab>和行尾字符 $
      set listchars=tab:>-,eol:$  <tab> 显示为>-,行尾显示为 $
      
    • 替换为

      :set expandtab
      :retab! 或 :retab
      

    加!处理所有的 ,若不加只处理行首的

    • 替换为

      :set noexpandtab
      :retab! 或 :retab
      

    编码

    • encoding

      set encoding=utf-8
      set langmenu=zh_CN.UTF-8
      language message zh_CN.UTF-8
      

      encoding是 VIM内部使用的字符编码方式, VIM内部所有的buffer 、寄存器、脚本中的字符串都使用这个编码。 Vim 在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。

    • termencoding

      termencoding 是 Vim 用于屏幕显示的编码,在显示的时候, Vim 会把内部编码转换为屏幕编码,再用于输出。内部编码中含有无法转换为屏幕编码的字符时,该字符会变成问号,但不会影响对它的编辑操作。如果 termencoding 没有设置,则直接使用 encoding 不进行转换。

    • fileencoding

      当 Vim 从磁盘上读取文件的时候,会对文件的编码进行探测。如果文件的编码方式和 Vim 的内部编码方式不同,Vim 就会对编码进行转换。转换完毕后, Vim 会将 fileencoding 选项设置为文件的编码。当 Vim 存盘的时候,如果 encoding 和 fileencoding 不一样, Vim 就会进行编码转换。

    • fileencodings

      编码的自动识别是通过设置 fileencodings 实现的,注意是复数形式。 fileencodings 是一个用逗号分隔的列表,列表中的每一项是一种编码的名称。当我们打开文件的时候, VIM 按顺序使用 fileencodings 中的编码进行尝试解码,如果成功的话,就使用该编码方式进行解码,并将 fileencoding 设置为这个值,如果失败的话,就继续试验下一个编码。

      set fileencodings=utf-8, gb2312
      

      如果编码被误判了,就会产生乱码。如果你知道这个文件的正确编码的话,可以在打开文件的时候使用 ++enc=encoding 的方式来打开文件:e ++enc=utf-8 myfile.txt

    • fileformat

      unix格式的换行符为 0A(ascii 码)也就是 ,dos 格式的换行符为 0D 0A(也就是) ,其实就显示为 ^M,Mac 把回车作为换行符,文本中既有unix 的换行符,又有 dos的换行符,那么vim会认为你打开的是 unix的,所以,那些dos的换行符就会出现 ^M,办法是:

    1. 若你的 vim版本大于7.1 ,并想用 dos显示和保存,如下语句:

      :e ++ff=dos
      
    2. 若你的 vim版本小于等于7.1,又想把文章按照 dos格式显示和保存,如下语句:

      :set ff=dos
      :%s/\r\+$//e
      
      
    3. 若你的 vim版本小于等于7.1,又想把文章按照 unix格式显示和保存,如下语句:

      :set ff=unix
      :%s/\r\+$//e
      

    VIMRC

    sh"""""""""""""""""""""""""""""""""""""""""
    "      windows版本gvim
    "   最后一次修改: 2013/1/23
    """""""""""""""""""""""""""""""""""""""""
    
    set nocompatible
    source $VIMRUNTIME/vimrc_example.vim
    source $VIMRUNTIME/mswin.vim
    behave mswin
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      基本设置
    """""""""""""""""""""""""""""""""""""""""
    set number           "显示行号
    set nobackup         "不备份
    colorscheme delek    "配色方案
    set tabstop=4        "TAB设置
    set softtabstop=4
    set shiftwidth=4
    set foldmethod=marker    "折叠设置
    "set foldmethod=syntax
    "set foldmethod=indent
    set foldlevel=100
    set foldclose=all    "关闭所有折叠
    set autoindent           "缩进设置
    set smartindent
    set cindent
    set fileformats=dos,unix "设置文件格式
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      编码和字体
    """""""""""""""""""""""""""""""""""""""""
    set fileencodings=gb2312,utf-8
    set termencoding=gb2312
    set fileencoding=gb2312
    
    set guifont=Consolas:h11:cANSI
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      常用映射
    """""""""""""""""""""""""""""""""""""""""
    let mapleader=","
    
    "标签
    nnoremap L :tabnext<cr>
    nnoremap H :tabprevious<cr>
    nnoremap tn :tabnew
    "窗口分隔
    nnoremap <c-h> <c-w>h
    nnoremap <c-j> <c-w>j
    nnoremap <c-k> <c-w>k
    nnoremap <c-l> <c-w>l
    "注释
    nnoremap <leader>/ I/*<space><esc>A<space>*/<esc>j
    nnoremap <leader>; ^xxx$xxxj
    inoremap <leader>/ /*<space><space>*/<left><left><left>
    "替换
    nnoremap <leader>r :%s/\<\>//gc<left><left><left><left><left><left>
    nnoremap <c-f> /\<\><left><left>
    "折叠
    nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<cr>
    nmap <leader>cs O#if 0 /*  comment by hl at <c-r>=strftime("%y/%m/%d %H:%M")<cr>  {{{  */<esc>
    nmap <leader>ce o#endif /*  comment by hl at <c-r>=strftime("%y/%m/%d %H:%M")<cr>  }}}  */<esc>
    "插入模式下方向键
    imap <a-j> <down>
    imap <a-k> <up>
    imap <a-h> <right>
    imap <a-l> <left>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      ctags 插件
    """""""""""""""""""""""""""""""""""""""""
    set tags=tags;
    set autochdir
    nmap <c-[> <c-t>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      taglist 插件
    """""""""""""""""""""""""""""""""""""""""
    let Tlist_Ctags_Cmd = 'ctags.exe'
    let Tlist_Show_One_File = 1        "同时显示多个文件函数列表
    let Tlist_show_Exit_OnlyWindow = 1 "当taglist 是最后一个窗口时,自动退出 vim
    let Tlist_Use_Right_Window = 0     "让窗口显示在左边
    let Tlist_Process_File_Always = 0  "不要一直处理tags
    let Tlist_Auto_Close = 1           " 非当前文件,函数列表折叠隐藏
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      DoxygenToolkit 插件
    """""""""""""""""""""""""""""""""""""""""
    let g:DoxygenToolkit_authorName = "hl - ssdlut"
    let g:DoxygenToolkit_briefTag_funcName = "yes"
    let g:DoxygenToolkit_emailString = "596150637@qq.com"
    let g:DoxygenToolkit_versionString = "1.0"
    
    "let g:DoxygenToolkit_briefTag_pre = "@brief "
    "let g:DoxygenToolkit_templateParamTag_pre = "@tparam "
    "let g:DoxygenToolkit_paramTag_pre = "@param "
    "let g:DoxygenToolkit_returnTag = "@return "
    "let g:DoxygenToolkit_throwTag_pre = "@throw "
    "let g:DoxygenToolkit_fileTag = "@file "
    "let g:DoxygenToolkit_authorTag = "@author "
    "let g:DoxygenToolkit_emailTag = "@e-mail "
    "let g:DoxygenToolkit_dateTag = "@date "
    "let g:DoxygenToolkit_versionTag = "@version "
    "let g:DoxygenToolkit_blockTag = "@name "
    "let g:DoxygenToolkit_classTag = "@class "
    "let g:DoxygenToolkit_commentType = "C"
    
    nnoremap <leader>da :DoxAuthor<cr>
    nnoremap <leader>df :Dox<cr>
    nnoremap <leader>db :DoxBlock<cr>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      omnicppcomplete 插件
    "
    "       <c-x> 进入补全模式
    "       <c-d> 宏定义
    "       <c-f> 文件名
    "       <c-k> 字典
    "       <c-i> 当前文件以及由#include包含进来的文件
    "       <c-l> 整个行
    "       <c-]> 标记(tags)
    "       <c-p> 向前查找, 与没有<c-x>命令时相同
    "       <c-n> 向后查找, 与没有<c-x>命令时相同
    "       <c-o> 万能补全
    "       <c-f> 文件名补全
    "       <c-v> VIM命令补全
    "       <c-u> 用户定义补全
    """""""""""""""""""""""""""""""""""""""""
    imap <leader>s <c-x><c-n>
    imap <leader>d <c-x><c-p>
    imap <leader>f <c-x><c-o>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      功能键映射
    """""""""""""""""""""""""""""""""""""""""
    "nmap <F2> :tabnew %:h<cr>
    "在新标签中打开当前目录
    nmap <F2> :Texplore<cr>
    "生成 tags文件
    nmap <F3> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr>
    "打开 taglist,不支持中文路径
    nmap <F4> :TlistToggle<cr>
    "make需要自己编写 Makefile
    nmap <F6> :!nmake<cr>
    nmap <F8> :!nmake clean<cr>
    nmap <F7> :!nmake run<cr>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "      对齐
    """""""""""""""""""""""""""""""""""""""""
    nnoremap <leader>ch :call SetColorColumn()<cr>
    function! SetColorColumn()
        let col_num = virtcol(".")
        let cc_list = split(&cc, ',')
        if count(cc_list, string(col_num)) <= 0
           execute "set cc+=".col_num
        else
           execute "set cc-=".col_num
        endif
    endfunction
    
    sh"""""""""""""""""""""""""""""""""""""""""
    "      Linux版本gvim
    "   最后一次修改: 2014/3/31
    """""""""""""""""""""""""""""""""""""""""
    
    set nocompatible
    filetype on
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       基本设置
    """""""""""""""""""""""""""""""""""""""""
    set number               " 显示行号
    set nobackup             " 不备份
    colorscheme delek        "配色方案
    set tabstop=4            "TAB 设置
    set softtabstop=4
    set shiftwidth=4
    set foldmethod=marker    "折叠设置
    "set foldmethod=syntax
    "set foldmethod=indent
    set foldlevel=100
    set foldclose=all        "关闭所有折叠
    set autoindent           "缩进设置
    set smartindent
    set cindent
    set fileformats=unix    "设置文件格式
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       编码和字体设置
    """""""""""""""""""""""""""""""""""""""""
    set termencoding=utf-8
    set fileencoding=utf-8
    set fileencodings=utf-8,gbk
    
    set guifont=Monospace\ Bold\ 10
    "set guifont=Consolas\ Regular\ 12
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       常用映射
    """""""""""""""""""""""""""""""""""""""""
    let mapleader=","
    
    "标签
    nnoremap L :tabnext<cr>
    nnoremap H :tabprevious<cr>
    nnoremap tn :tabnew
    nnoremap ts :tab split<cr>
    "窗口分隔
    nnoremap <c-h> <c-w>h
    nnoremap <c-j> <c-w>j
    nnoremap <c-k> <c-w>k
    nnoremap <c-l> <c-w>l
    "注释
    nnoremap <leader>/ I/*<space><esc>A<space>*/<esc>j
    nnoremap <leader>; ^xxx$xxxj
    inoremap <leader>/ /*<space><space>*/<left><left><left>
    "替换
    nnoremap <leader>r :%s/\<\>//gc<left><left><left><left><left><left>
    nnoremap <c-f> /\<\><left><left>
    "折叠
    nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<cr>
    nmap <leader>cs O#if 0 /*  comment by hl at <c-r>=strftime("%y/%m/%d %H:%M")<cr>  {{{  */<esc>
    nmap <leader>ce o#endif /*  comment by hl at <c-r>=strftime("%y/%m/%d %H:%M")<cr>  }}}  */<esc>
    "插入模式下方向键
    imap <a-j> <down>
    imap <a-k> <up>
    imap <a-h> <right>
    imap <a-l> <left>
    "make
    nnoremap cp :cp<cr>
    nnoremap cn :cn<cr>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       ctags 插件
    """""""""""""""""""""""""""""""""""""""""
    set tags=tags;
    set autochdir
    "nmap <c-[> <c-t>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       taglist 插件
    """""""""""""""""""""""""""""""""""""""""
    "let Tlist_Ctags_Cmd = 'ctags.exe'
    let Tlist_Show_One_File = 1            " 同时显示多个文件函数列表
    let Tlist_Exit_OnlyWindow = 1      "当taglist 是最后一个窗口时,自动退出 vim
    let Tlist_Use_Right_Window = 0         "让窗口显示在左边
    let Tlist_Process_File_Always = 0      "不要一直处理tags
    let Tlist_Auto_Close = 0               " 非当前文件,函数列表折叠隐藏
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       DoxygenToolkit 插件
    """""""""""""""""""""""""""""""""""""""""
    let g:DoxygenToolkit_authorName = "hl - ssdlut"
    let g:DoxygenToolkit_briefTag_funcName = "no"
    let g:DoxygenToolkit_emailString = "596150637@qq.com"
    let g:DoxygenToolkit_versionString = "1.0"
    
    "let g:DoxygenToolkit_briefTag_pre = "@brief "
    "let g:DoxygenToolkit_templateParamTag_pre = "@tparam "
    "let g:DoxygenToolkit_paramTag_pre = "@param "
    "let g:DoxygenToolkit_returnTag = "@return "
    "let g:DoxygenToolkit_throwTag_pre = "@throw "
    "let g:DoxygenToolkit_fileTag = "@file "
    "let g:DoxygenToolkit_authorTag = "@author "
    "let g:DoxygenToolkit_emailTag = "@e-mail "
    "let g:DoxygenToolkit_dateTag = "@date "
    "let g:DoxygenToolkit_versionTag = "@version "
    "let g:DoxygenToolkit_blockTag = "@name "
    "let g:DoxygenToolkit_classTag = "@class "
    "let g:DoxygenToolkit_commentType = "C"
    
    nnoremap <leader>da :DoxAuthor<cr>
    nnoremap <leader>df :Dox<cr>
    nnoremap <leader>db :DoxBlock<cr>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       omnicppcomplete 插件
    "
    "       <c-x> 进入补全模式
    "       <c-d> 宏定义
    "       <c-f> 文件名
    "       <c-k> 字典
    "       <c-i> 当前文件以及由#include包含进来的文件
    "       <c-l> 整个行
    "       <c-]> 标记(tags)
    "       <c-p> 向前查找, 与没有<c-x>命令时相同
    "       <c-n> 向后查找, 与没有<c-x>命令时相同
    "       <c-o> 万能补全
    "       <c-f> 文件名补全
    "       <c-v> VIM命令补全
    "       <c-u> 用户定义补全
    """""""""""""""""""""""""""""""""""""""""
    imap <leader>s <c-x><c-n>
    imap <leader>d <c-x><c-p>
    imap <leader>f <c-x><c-o>
    
    filetype plugin on
    set completeopt=menu,menuone
    let g:OmniCpp_SelectFirstItem = 0      "是否自动选择第一个匹配项
    let g:OmniCpp_ShowAccess = 1           " 显示访问控制信息
    let g:OmniCpp_GlobalScopeSearch = 1    "全局查找控制。0:禁止; 1:允许( 缺省)
    let g:OmniCpp_NamespaceSearch = 1      " 0 ,  1 or 2
    let g:OmniCpp_DisplayMode = 1
    let g:OmniCpp_ShowScopeInAbbr = 0
    let g:OmniCpp_ShowPrototypeInAbbr = 1
    let g:OmniCpp_MayCompleteDot = 1
    let g:OmniCpp_MayCompleteArrow = 1
    let g:OmniCpp_MayCompleteScope = 1
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       功能键映射
    """""""""""""""""""""""""""""""""""""""""
    "nmap <F2> :tabnew %:h<cr>
    "在新标签中打开当前目录
    nmap <F2> :Texplore<cr>
    "生成 tags文件
    nmap <F3> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr>
    "nmap <F3> :!ctags -R --fields=+lS .<cr>
    "打开 taglist,不支持中文路径
    nmap <F4> :TlistToggle<cr>
    "make需要自己编写 Makefile
    nmap <F6> :!make<cr>
    nmap <F7> :!make run<cr>
    nmap <F8> :!make clean<cr>
    
    
    """""""""""""""""""""""""""""""""""""""""
    "       对齐
    """""""""""""""""""""""""""""""""""""""""
    nnoremap <leader>ch :call SetColorColumn()<cr>
    function! SetColorColumn()
        let col_num = virtcol(".")
        let cc_list = split(&cc, ',')
        if count(cc_list, string(col_num)) <= 0
            execute "set cc+=".col_num
        else
            execute "set cc-=".col_num
        endif
    endfunction
    

    hatlonely
    1.1k 声望24 粉丝

    « 上一篇
    c++11新特性

    引用和评论

    0 条评论