vim配置总结[通俗易懂]

vim配置总结[通俗易懂]本篇博客主要包含我使用的vim配置和相关插件。也作一个常用vim快捷键的记录

大家好,又见面了,我是你们的朋友全栈君。

本篇博客主要包含我使用的vim配置和相关插件,也作一个常用vim快捷键的记录

我的vim版本是8.1,这个版本可以在vim中直接调用terminal,并且自带的插件管理器。如果你不是8.1的vim版本,可能无法使用我下面的插件安装方法,需要自行百度下载一个插件管理器了。

插件篇

vim的插件很多,推荐一个下载插件的网站:https://vimawesome.com/ 没事可以多逛逛,说不定能发现什么宝藏
我主要使用的插件目前大概五个:leaderf minibufexpl.vim nerdtree tagbar cscope
分别用来模糊查找,buf显示,文件目录列表,tag列表,函数跳转
首先在~/.vim目录下创建目录mkdir ~/.vim/pack/vendor/start/在该目录下执行下列命令

  • 插件下载安装
git clone https://github.com/yggdroot/leaderf	
git clone https://github.com/fholgado/minibufexpl.vim
git clone https://github.com/scrooloose/nerdtree
git clone https://github.com/majutsushi/tagbar
sudo apt-get install cscope

因为这其中tagbar需要依赖ctags,所以需要再安装下ctags

sudo apt-get install ctags

之后就是在~/.vimrc中配置下这些插件属性和映射你自己喜欢的快捷键了

  • 插件配置
    打开.vimrc 加入如下配置,我重定义了<Leader’>键为‘,‘ 我的快捷键也是围绕这个键设定的。
let mapleader=","   "設置<leader>鍵爲逗號
"tagbar
 map <silent> <F4> :TagbarToggle<CR>        "按F9即可打开tagbar界面
 let g:tagbar_ctags_bin = 'ctags'            "tagbar依赖ctags插件
 let g:tagbar_left = 1                       "让tagbar在页面左侧显示,默认右边
 let g:tagbar_width = 40                      "设置tagbar的宽度为40列,默认40
 let g:tagbar_autofocus = 1                   "这是tagbar一打开,光标即在tagbar页面内,默认在vim打开的文件内
 let g:tagbar_sort = 0                        "设置标签不排序,默认排序 
 
 "nerdtree
 map <F9> :NERDTreeToggle<CR> 
 map <F9> :NERDTreeToggle<CR>                "按F10即可打开NerdTree界面
 let g:NERDTreeWinSize = 30                  "设定NERDTree视窗大小
 let g:NERDTreeWinPos = 1                    "让NERDTree显示在右边
 
 "LeaderF
 map <leader>F :LeaderfFunction<CR>		”LeaderF默认有快捷键<Leader>f搜索文件,我定义F来搜索函数

  • cscope配置
    cscope的配置比较复杂,首先需要在代码仓库的根目录建立链接,以我的kernel目录为例
    在内核根目录下编写脚本cscope.sh
#!/bin/bash
/*扫描所有子目录下的*.c,*.s,*.h,.dtsi,*.dts,*.asm文件,写入cscope.files*/
find . -name "*.h" -o -name "*.c" -o -name "*.dtsi" -o -name "*.dts" -o -name "*.asm" -o -name "*.s" > cscope.files
/*cscope从cscop.files读入文件然后建立链接*/
cscope -bkq -i cscope.files
ctags -R

这个脚本执行完会在当前文件夹生成几个cscope.*文件,不要误删
这样当你在该目录下打开vim时可以用cscope搜索链接的所有函数,变量和字符串。但是如果在子目录下打开vim就无法使用这些链接来搜索了。所以需要在.vimrc中加入如下配置,让vim去上层目录查找cscope.out文件

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope 自动加载cscope.out文件
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=0
    set cst
    set csverb
    set cspc=3
    "add any database in current dir  
    if filereadable("cscope.out")
        cs add cscope.out
    "else search cscope.out elsewhere  
    else
        let cscope_file=findfile("cscope.out",".;")
        let cscope_pre=matchstr(cscope_file,".*/")
        if !empty(cscope_file) && filereadable(cscope_file)
            set nocsverb
            exe "cs add" cscope_file cscope_pre
            set csverb
        endif
    endif
endif

我将cscope的帮助文档中推荐的快捷键配置也添加到了.vimrc中,将我常用的几个重新自定义了

    map <C-_> :cstag <C-R>=expand("<cword>")<CR><CR>
    map g<C-]> :cs find 3 <C-R>=expand("<cword>")<CR><CR>
    map g<C-\> :cs find 0 <C-R>=expand("<cword>")<CR><CR>
    nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
    nmap <leader>d :cs find g <C-R>=expand("<cword>")<CR><CR>		“查找函数定义,并直接跳转
    nmap <leader>c :cs find c <C-R>=expand("<cword>")<CR><CR>		“查找当前函数被调用的地方,并直接跳转
    nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
    nmap <C-_>e :cs find e <C-R>=expand("<cword>")<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>
    nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
    nmap <C-_>a :cs find a <C-R>=expand("<cword>")<CR><CR>
    " Using 'CTRL-spacebar' then a search type makes the vim window     
    " split horizontally, with search result displayed in                    
    " the new window.                                                                                                               
    nmap <C-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR>
    nmap <leader>dd :scs find g <C-R>=expand("<cword>")<CR><CR>		”查找函数定义,并打开分屏窗口跳转
    nmap <leader>cc :scs find c <C-R>=expand("<cword>")<CR><CR>		”查找函数调用的地方,并打开分屏窗口跳转
    nmap <C-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR>
    nmap <C-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR>
    nmap <C-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR>
    nmap <C-Space>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
    nmap <C-Space>d :scs find d <C-R>=expand("<cword>")<CR><CR>
    nmap <C-Space>a :scs find a <C-R>=expand("<cword>")<CR><CR>

到这配置的环境就基本上可以用了,配合vim命令模式下输入:term直接打开终端使用grep已经没有其他的障碍了

快捷键篇

除上述自定义的插件快捷键,vim有很多很实用的快捷键,这里也作一个记录自己常用的组合键,包括插件使用的默认快捷键。以防自己以后忘了还要搜博客
一些我特别熟悉的,这辈子可能都很难忘记的快捷键可能就不会列出来占地方了,类似i,/,yy,p之类的

  1. 进入插入模式
o 光标所在行的下一行行首插入需要录入的文本
O 光标所在行的上一行行首插入需要录入的文本
I 在光标所在行的行首插入需要录入的文本
A 在光标所在行的行尾插入需要录入的文本
  1. 移动光标
G 光标定位到最后一行的行首
gg 光标定位到第一行的行首
ctrl+f 查看下一页内容
ctrl+b 查看上一页内容
ctrl+o 后退,移动到上次光标所在位置
ctrl+i 前进,回退后移动到下次光标所在位置
  1. 删除,撤销与恢复
x 删除光标当前所在的字符
u 撤销刚才的操作
ctrl + r 恢复撤销操作
  1. 分屏
    第三列是我自定义的快捷键,写入vimrc配置
Ctrl + w w 切换分屏 nnoremap ww w “将Ctrl+ww映射为ww
Ctrl + w h 将当前的分屏光标移动到左边 nnoremap <leader>h <C-w>h “映射为 ,+h
Ctrl + w l 将当前的分屏光标移动到右边 nnoremap <leader>l <C-w>l “映射为 ,+l
Ctrl + w j 将当前的分屏光标移动到下边 nnoremap <leader>j <C-w>j “映射为 ,+j
Ctrl + w k 将当前的分屏光标移动到上边 nnoremap <leader>k <C-w>j “映射为 ,+j
Ctrl + w H 将当前的分屏移动到最左边 nnoremap <leader>H <C-w>H “映射为 ,+H
Ctrl + w L 将当前的分屏移动到最右边 nnoremap <leader>L <C-w>L “映射为 ,+L
Ctrl + w J 将当前的分屏移动到最下边 nnoremap <leader>J <C-w>J “映射为 ,+J
Ctrl + w K 将当前的分屏移动到最上边 nnoremap <leader>K <C-w>K “映射为 ,+K
Ctrl + w = 将分屏尺寸恢复均等 nnoremap w= <C-w>= “映射为w=
  1. 切换buf
:bn 切换buffer列表中下一个 buffer map r  :bn  ”逗号+ r切换下一个buf
:bp 切换buffer列表中上一个 buffer map <leader>e :bp<CR>  ”逗号+ e切换前一个buf
:b# 切换到上一个在的buffer
:bdelete 从当前buf列表中删除buf
<C-w>q 关闭当前buf nnoremap <leader>q <C-w>q “映射为 ,+q
  1. Nerdtree
map :NERDTreeToggle 按F9即可打开NerdTree界面
p 到上层目录
P 到根目录
K 到同目录第一个节点
J 到同目录最后一个节点
  1. tagbar
<space> 底行显示标签原型
+ 展开标签内容
折叠标签内容
* 展开所有标签内容
= 折叠所有标签内容
x 是否展开tagbar标签栏,x展开,再一次x,则缩小标签栏
  1. LeaderF
<leader>f 搜索当前目录下的文件
<leader>b 搜索当前打开的buf
:LeaderfFunction 搜索当前文件的函数
:LeaderfLine 搜索目录下的字符串
<C-R> 在模糊匹配和正则式匹配之间切换
<C-F> 在全路径搜索和名字搜索之间切换
<Tab> 在检索模式和选择模式之间切换
<C-J>, <C-K> 在结果列表里选择
<C-X> 在水平窗口打开
<C-]> 在垂直窗口打开

LeaderF支持使用rg 实现类似命令行grep的功能
安装ripgrep之后,sudo apt-get install ripgrep 可以使用如下命令

:Leaderf rg map g :Leaderf rg “重映射为,+g
  1. 鼠标配置
    因为偶尔还是会用鼠标,正常的鼠标在vim里无法移动光标,normal模式下也无法拖动分屏放大缩小。所有设定了个快捷键切换鼠标。这样想用鼠标复制的时候按<F6>,想像IDE中拖拽,选中窗口的时候按<F5>
map <F5> :set mouse=a<CR>
map <F6> :set mouse=<CR>
  1. 复制粘贴
    首先安装使vim支持系统粘贴板的组件sudo apt-get install vim-gtk vim-gonme
    在这里插入图片描述
    上图+clipboard已支持系统粘贴板,在.vimrc中追加下列命令,任选其一
"set clipboard=unnamed			 ”*号粘贴板,可以使用鼠标中键粘贴
set clipboard=unnamedplus        “+号剪贴板,可以使用Ctrl+shift+v粘贴

之后在vim normal模式下按v进入virtual模式选中任意字符,按y键即复制。然后根据粘贴板快乐的粘贴吧。

到这,vim的功能已经不亚于windows下的source insight了。甚至快捷键用熟了还更方便,几乎用不到鼠标。后续我会再把这个配置的使用录制成GIF动图,可以更直观的展示使用方法。

使用问题详述

  • 新建文件无法用LeaderF搜索到的问题
    当在一个文件夹打开vim使用LeaderF后,LeaderF会建立一个cache缓存。如果这之后再在子目录下创建文件或者文件夹,在LeaderF中无法检索到。
    解决方法:在LeaderF的检索界面按F5刷新缓存就可以了

  • 每次在有cscope的文件夹中运行vim,都会出一行cscope提示,按Enter后才能打开VIM。太烦了
    解决方法:打开.vimrc,将cscope向上索引cscope.out的配置代码set nocsverb放到if filereadable之前

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope 自动加载cscope.out文件
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=0
    set cst
    set csverb
    set cspc=3
    set nocsverb		“after
    "add any database in current dir  
    if filereadable("cscope.out")
        cs add cscope.out
    "else search cscope.out elsewhere  
    else
        let cscope_file=findfile("cscope.out",".;")
        let cscope_pre=matchstr(cscope_file,".*/")
        if !empty(cscope_file) && filereadable(cscope_file)
            “set nocsverb			”before
            exe "cs add" cscope_file cscope_pre
            set csverb
        endif
    endif
endif
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144038.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RAID10磁盘阵列损坏修复操作

    RAID10磁盘阵列损坏修复操作-f模拟硬盘损坏mdadm/dev/md0-f/dev/sdb1、查看损坏磁盘阵列的情况2、将损坏的硬盘设备移除3、插上新的硬盘(在真机上操作,虚拟机之间将损坏的硬盘删除,然后在添加新的硬盘即可)4、卸载挂载操作5、将新的硬盘添加到RAID10磁盘阵列中6、查看修复成功后的磁盘阵列信息(因为新添加的需要等待一段时间等待系统重新创建)7、重新挂载1、查看损坏后的磁盘阵列信息2、将损坏的硬盘从磁盘阵列中移除mdadm/dev/md0-r损坏的硬盘设备名mdadm-D/

    2022年6月3日
    41
  • Vue学习笔记——Vue-router「建议收藏」

    Vue学习笔记——Vue-router「建议收藏」第1节:Vue-router入门1、解读router/index.js文件importVuefrom’vue’//引入VueimportRouterfrom’vue-router’//引入vue-routerimportHellofrom’@/components/Hello’//引入根目录下的Hello.vue组件Vue.use(Route…

    2022年7月11日
    20
  • QueryInterface 的实现规则

    QueryInterface 的实现规则本节将给出一些QueryInterface既的所有实现都必须遵循的一些规则,以便客户能够获取关于组件的足够多的知识并对之施实一些控制和其他有用的处理。如果没有这些规则,是不可能编写出组件的,因为在这种情况下,QueryInterface的行为将是不确定的。具体来讲,这些规则是:QueryInterface返回的总是同一IUnknown指针。若客户曾经获取过某个接口,那么它将总能获取此接口。客户可

    2022年7月22日
    10
  • 岭回归算法_tikhonov正则化与岭回归

    岭回归算法_tikhonov正则化与岭回归岭回归算法简介回归算法的本质上就是为了解决一个线性方程:Ax=b标准估计方法是普通的最小二法的线性回归,然而如果x是一个病态的矩阵,在这种情况下使用普通最小二法估计会导致过拟合或者欠拟合的情况。此外,岭回归还可以处理矩阵阵列的多重共线性问题。通常最小二乘法寻求的是最小花平方残差的综合,公式:在岭回归中,在这种最小化中加入正则化项:其中Г是Tikhonovmatrix矩阵,在许…

    2022年8月21日
    9
  • 对比java和python对比「建议收藏」

    对比java和python对比「建议收藏」1.难易度而言。python远远简单于java。  2.开发速度。Python远优于java  3.运行速度。java远优于标准python,pypy和cython可以追赶java,但是两者都没有成熟到可以做项目的程度。  4.可用资源。java一抓一大把,python很少很少,尤其是中文资源。  5.稳定程度。python3和2不兼容,造成了一定程度上的混乱以及大批类库失效。ja

    2022年7月8日
    25
  • 深入分析 Java 方法反射的实现原理

    深入分析 Java 方法反射的实现原理博主说:Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。在本文中,占小狼分析了Java反射机制的实现原理(源码),感兴趣的同学可以通过本文花上几分钟了解了解。正文方法反射实例publicclassReflectCase{pu

    2022年7月8日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号