博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
配置 vim
阅读量:7125 次
发布时间:2019-06-28

本文共 6519 字,大约阅读时间需要 21 分钟。

  hot3.png

0. 最终效果

配置 vim.PNG

安装的插件清单(前两个在系统安装 vim 时,已自动安装完成)

  • ctags
  • cscope
  • taglists.vim
  • winmanager.vim
  • winfileexplorer.vim
  • wintagexplorer.vim
  • miniBufexpl.vim

1. 使用 ctags

1.1 生成tags文件

ctags -R                    #终端下运行如下命令

1.2 关联 vim,我这里打开 vim 后,已自动关联,于是转 1.3 步

1.3 vim 打开源文件,移动光标于任一函数或结构体等上,可用快捷键

ctrl + ]                   #跳到该函数或结构体等的定义处  ctrl + t 或 ctrl + o       #返回原位置

1.4 附:

  • 跳转操作可嵌套使用
  • :help ctags

2. 使用cscope

2.1 终端下运行如下命令

cscope -Rbq

生成名为cscope.in.outcscope.outcscope.po.out的三个文件

2.2 关联 cscope.out 到 vim,一劳永逸的方法是在 .vimrc 中设置, 详情见 附录部分 的配置文件中相应部分

2.3 将光标置于相应符号上,使用如下组合键操作

ctrl + _ + s           #查找本 C 符号ctrl + _ + g           #查找本定义ctrl + _ + d           #查找本函数调用的函数ctrl + _ + c           #查找调用本函数的函数ctrl + _ + t           #查找本字符串ctrl + _ + e           #查找本 egrep 模式ctrl + _ + f           #查找本文件ctrl + _ + i           #查找本包含本文件的文件

2.4 附:

  • ctrl + _ 组合须由 ctrl + shift + - 组合实现
  • :help cscope

3. taglist 插件

3.1 安装

taglist.vim 文件置于 ./vim/after/plugin/ 目录下( 没有就 mkdir -p ./vim/after/plugin ),安装过程结束。

插件获取地址:

3.2 使用设置

详情见 附录部分 的配置文件中相应部分

4. winmanager

4.1 安装

winmanager.vimwinfileexplorer.vimwintagexplorer.vim三个文件 置于./vim/after/plugin/目录下(没有就mkdir -p ./vim/after/plugin), 安装过程结束。

插件获取地址:

4.2 使用设置

详情见 附录部分 的配置文件中相应部分

4.3 普通模式下,按 wm 在左侧显示相应 Explorer

4.4 附:

  • 在到 FileExplorer 和 Taglist列表 窗口中,h,j,k,l移动光标 到选择的元素上面,回车打开文件(或目录)或跳转源文件相应部分
  • Ctrl + w + {h | j | k | l} #向"左,下,上,右"切换窗口

5. miniBufExplorer 插件

5.1 安装

minibufexpl.vim 文件置于 ./vim/after/plugin/ 目录下( 没有就 mkdir -p ./vim/after/plugin ),安装过程结束

插件获取地址:

5.2 使用设置

详情见 附录部分 的配置文件中相应部分

5.3 附:

  • 移动到 miniBufExplorer 窗口,tab键在不同文件间切换,回车键确定并打开; d键,删除当前选择文件
  • 帮助文档在 minibufexpl.vim 文件头部
  • Ctrl + {h | j | k | l} #向"左,下,上,右"切换窗口

6. 自动补全(借助一定的 tags 插件功能)

  • ctrl + { p | n | e | y }
  • ctrl + { x + o } 打开补全列表情况下用 ctrl + { p | n | e | y }进行选择

7. 待解决的问题

7.1 miniBufExplorer 弹出条件:编辑的文档 >= 2。 设置始终为弹出状态情境下,退出 vim 会产生一些问题 :-(

7.2 miniBufExplorer 弹出时,会将 FileExplorer 压缩为更小, 此时通过 wm 快捷键重启(先关闭再打开)winmanager 来解决问题 :-)

7.3 当开启 autochdir 功能后,用 vim 打开的多个文件位于不同的目录下时, miniBufExporer 会出现不好的效果(当这多个文件均在相同目录下时, 不好的效果消失) :-(

附:我的.vimrc

""=============================> 我的设置 <================================="set nocompatible    " 强烈建议放在配置文件的首部,                    " 因为作为负面效应,它会改变其它选项的效果                    " 详见:help compatible"-----------------------> 编码设置 <-----------------------"set encoding=utf-8  " 设置正在编辑的文档所采用的编码(                    " 默认采用当前系统 locale )set fileencodings=utf8,prc,ansi" set fileencoding=                    " 设置写入文件时采用的编码(vim 打开文件时                    " 自动识别其编码(依据 fileencodings 的值,                    " 顺序匹配),并设置为其为该匹配值;                    " 如果匹配失败,则置为空,此时采用 encoding 值)set termencoding=prc                    " 设置输出到客户终端(terminal)采用的编码(                    " 默认为空值,即输出到终端时不进行编码转换。)""----------------------------------------------------------" set autochdir     " 开启自动切换到正在编辑文件的目录功能                    " 开启后,对 miniBufExpolorer                    " 造成部分影响(相同目录下的多个文件,正常;                    " 不同目录下的多个文件,则出现异常。                    " 不知什么原因???????set autoread        " 开启自动更新文件功能(文件被其他编辑器修改)" set fillchars=stl:^,stlnc:-,vert:\|,fold:-,diff:-                    " 设置状态栏、垂直分割、折叠标记等的样式。                    " 详见:help fillcharsset history=70      " 命令行的历史记录数 set number          " 显示行号" set numberwidth=4 " 用于显示行号的列宽,默认值 4set ruler           " 状态栏中显示光标的位置坐标(右下角)" set cursorline    " 下划线显示光标所在行,默认关闭set backspace=indent,eol,start                    " 设置退格键可用set autoindent      " 开启自动缩进功能" set cindent       " 开启 C 语言缩进功能,默认关闭set smartindent     " 开启对 C 等类似语言的的智能缩进功能,                    " 较 cindent 选项更出色,且在 cindent 关闭情况下                    " 起作用,建议配合 autoindent 使用set tabstop=8       " tab键宽度(占用的 space 数,默认值 8 )set shiftwidth=8    " 每次缩进的宽度(占用的 space 数,默认值 8 )" set expandtab     " 将 tab 键转换为空格,默认关闭set smarttab        " 根据 shiftwidth 设置行前的 tab (插入的空白)" set list          " 显示制表符,默认关闭" set listchars=tab:>-,trail:-                    " 将制表符显示为 >- 将行尾空格显示为 -                    " 详见:help listcharsset textwidth=78    " 一行被允许插入的最大字符数,0 值表示禁用此功能" set wrap          " 自动换行,默认开启set linebreak       " 整词换行filetype plugin indent onsyntax enablesyntax oncolorscheme desertset showmatch       " 类似当输入一个左括号是会匹配相应的那个右括号的功能set ignorecase      " 搜索时,忽略大小写set smartcase       " 当搜索模式中含有大些时,会覆盖 ignorecase 选项,                    " 且只在此时(/,?,n,N,:g,:s 命令下,                    " 且 ignorecase 处于开启状态)使用set hlsearch        " 高亮显示搜索结果set incsearch       " 查询时非常方便,如要查找book单词,当输入到/b时,                    " 会自动找到第一个b开头的单词,当输入到/bo时,                    " 会自动找到第一个bo开头的单词,依次类推,进行查找时,                    " 使用此设置会快速找到答案,当你找要匹配的单词时,                    " 别忘记回车set foldmethod=marker           " 使用 marker 方法来折叠set completeopt=longest,menu    " 关掉智能补全时的预览窗口"--------------------> cscope 设置 <-----------------------"set cscopequickfix=s-,c-,d-,i-,t-,e-if has("cscope")    " set csprg=/usr/local/bin/cscope    set csprg=/usr/bin/cscope    set csto=0    set cst    set nocsverb    " add any database in current directory    if filereadable("cscope.out")        cs add cscope.out    " else add database pointed to by environment    elseif $CSCOPE_DB != ""        cs add $CSCOPE_DB    endif    set csverbendifnmap 
s :cs find s
=expand("
")
nmap
g :cs find g
=expand("
")
nmap
c :cs find c
=expand("
")
nmap
t :cs find t
=expand("
")
nmap
e :cs find e
=expand("
")
nmap
f :cs find f
=expand("
")
nmap
i :cs find i ^
=expand("
")
$
nmap
d :cs find d
=expand("
")
"0 or s: Find this C symbol"1 or g: Find this definition"2 or d: Find functions called by this function"3 or c: Find functions calling this function"4 or t: Find this text string"6 or e: Find this egrep pattern"7 or f: Find this file"8 or i: Find files #including this file""----------------------------------------------------------"----------------------> Taglist 设置 <--------------------"let Tlist_Show_One_File=1let Tlist_Exit_OnlyWindow=1" map tl :TlistToggle
""----------------------------------------------------------"-------------------> winManager 设置 <--------------------"let g:winManagerWindowLayout='FileExplorer,TagsExplorer|TagList'map wm :WMToggle
""----------------------------------------------------------"----------------------> miniBuf 设置 <--------------------"let g:miniBufExplMapWindowNavVim=1" 设置 ^-h,j,k,l 即可左下上右移动到不同窗口" let g:miniBufExplMapWindowNavArrows=1" 设置 ^-{上下左右箭头} 即可上下左右移动到不同窗口" let g:miniBufExplMapCTabSwitchBufs=1" let g:miniBufExplModSelTarget=1""----------------------------------------------------------

转载于:https://my.oschina.net/nirno/blog/111339

你可能感兴趣的文章
常见JAVA问题定位1
查看>>
S5PV210-uboot源码分析-uboot命令体系
查看>>
JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
查看>>
开源web 架构
查看>>
sscanf() 函数
查看>>
poj - 1061 青蛙的约会【扩展欧几里】
查看>>
通过调用firefox无法使用鼠标事件,解决办法
查看>>
1.站长工具网站地址
查看>>
centos redis 主从配置+哨兵模式
查看>>
typedef struct和struct 的区别 用途
查看>>
八皇后问题---详解---参考<<紫书>>
查看>>
P2325 [SCOI2005]王室联邦
查看>>
Request
查看>>
错题解析
查看>>
C++命名空间
查看>>
C语言文件操作
查看>>
session(会话)研究(一)基础
查看>>
DNS解析全过程分析
查看>>
scala基础篇-03 if与for
查看>>
http协议详解
查看>>