Vim配置之入门篇

Wesley13
• 阅读 706

正所谓“工欲善其事,必先利其器”,而作为一个专业的码农,怎么能不好好对待自己编程的利器-- VIM 编辑器呢!可能读者会说编程的利器不应该是各种语言的集成工具么?像编写 C/C++ 程序的 VS,Codeblock(跨平台)软件,像编写 Java 程序的 Eclipse(现在已经有支持 C/C++/Python 的插件),像编写 Python 程序的 PyCharm 等。这些人性化的开发集成环境功能强大,使用方便。不过成也在此,败也在此。本文将详细介绍Vim编辑器以及其基本入门级配置。

简介

正所谓“工欲善其事,必先利其器”,而作为一个专业的码农,怎么能不好好对待自己的编程利器-- VIM 编辑器呢!可能读者会说编程的利器不应该是各种语言的集成工具么?像编写 C/C++程序的 VS,Codeblock(跨平台)软件,像编写 Java 程序的 Eclipse(现在已经有支持 C/C++/Python 的插件),像编写 Python 程序的 PyCharm 等。这些人性化的开发集成环境功能强大,使用方便。不过我觉得成也在此,败也在此。

  1. 功能冗余
    现在编程的集成环境工具非常强大,但是很多功能我们都用不到,反而每次开启都花费很长时间。所以集成环境并不适合专业的码农。我们经常说适合自己的才是最好的,编程利器更是如此,毕竟它每天不离手。
  2. 定制化太低 基本上每个集成开发工具都没有留太多的定制空间给用户,而用户只能习惯软件供应商提供的大众化用法。对于熟悉多种语言的用户而言,它得掌握多种开发集成环境,还不如用Vim解决所有。
  3. 鼠标和键盘的混合使用
    其实这一点仁者见仁,智者见智吧。个人觉得高效编程还是需要手不离键盘的,要熟练掌握一些基本的快捷键的使用。

基本的 Vim 说白了就是一个文本编辑器,不过它的强大之处在于它庞大的插件。这些插件可以让Vim能够干很多牛x的事,这跟 Google 浏览器有点像。像代码补全,错误跳转,高亮显示等等,Vim 都有相应的插件来处理,用户可以自行了解,自由组合。所以 Vim 的入门门槛还是蛮高的,主要是开始学得命令比较多,这里有推荐个玩游戏记命令的网址以及Vim学习指南。此外打造一个适合自己的 Vim 环境将会大大节约时间,是磨刀不误砍柴工的。下面就来看看基础入门级的Vim插件配置

基本配置

  1. 安装 vim,scripts,doc

    sudo apt-get install vim vim-scripts vim-doc
    

    Tips:

    • vim vim软件,安装目录是/usr/share/vim
    • vim-scripts vim的基本插件,包括语法高亮等,安装目录是/usr/share/vim-scripts
    • vim-doc vim帮助文件,不过是英文版本的
  2. 中文帮助文档

    1. 下载最新版本的vim中文帮助文档
    2. 解压 doc 文件夹到 ~/.vim 目录下
  3. 配置 ~/.vimrc 文件

    配置个性化的 .vimrc(不懂的命令可以用 :help command 查看中文帮助文档)

实用插件

Vim 的插件很多,而且功能很强大,非常强大。官网的插件地址在这里,不过它的很多插件都转移到 Github 上。

  • ctags
    ctags 可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形。

    1. 安装 exuberant-ctags 工具

      sudo apt-get install exuberant-ctags
      
    2. 创建 C++ 代码库索引

      1. 下载 libstdc++ 头文件,包含 C++ 中 STL,streams 等。

      2. 解压到 ~/.vim/tags 目录后执行 ctags 命令

        ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ cpp_src
        mv tags ~/.vim/tags/cpptag
        
      3. 在 .vimrc 中设置

        set tags+=~/.vim/tags/cpptag
        
    3. 创建 Gcc 代码库索引

      1. ubuntu 中安装完 build-essential 后,会在 /usr/include/c++ 目录下有 C/C++ 的头文件。

        sudo apt-get install build-essential
        
      2. 拷贝 /usr/include/c++/4.8 里的文件到 ~/.vim/tags/gcc 文件夹里后执行 ctags 命令

        cp -R /usr/include/c++/4.8 ~/.vim/tags/gcc
        ctags -R --c++-kinds=+p --fields=+iaS --extra=+q gcc
        mv tags ~/.vim/tags/gcctag
        
      3. 在 .vimrc 中设置

        set tags+=~/.vim/tags/gcctag
        
  • taglist
    在屏幕右侧出现的就是 taglist 窗口,从中可以看到文件中定义的所有 tag :宏、定义、变量、函数等;通过单击某个 tag,可以跳到该 tag 定义的位置;也可以把某一类的 tag 折叠起来,方便查看。

    1. 安装 taglist

      vim-addon-manager install taglist
      
    2. 在 .vimrc 中配置

      """"""""""""""""""""""""""""""""""
      " 标签列表的设置
      """"""""""""""""""""""""""""""""""
      " 启动vim后,自动打开taglist窗口
      let Tlist_Auto_Open=1  
      " 高亮显示当前标签列表中的标签
      let Tlist_Auto_Highlight_Tag=1
      " 添加新文件后,标签列表将自动更新
      let Tlist_Auto_Update=1
      " 显示标签域--类
      let Tlist_Display_Tag_Scope=1
      " 如果taglist窗口是最后一个窗口,则退出vim
      let Tlist_Exit_OnlyWindow=1
      " Taglist窗口里可折叠
      let Tlist_Enable_Fold_Column=1
      " 只显示当前文件的标签,折叠其他文件的标签
      let Tlist_File_Fold_Auto_Close=1
      " 多个文件间切换时,标签列表也更新为当前文件
      let Tlist_Show_One_File=1
      " 标签列表显示在Buffer区的右边
      "let Tlist_Use_Right_Window=1
      " 单击标签列表中的标签将定位到标签定义处
      let Tlist_Use_SingleClick=1
      
    3. 自定义快捷键说明

      • <F10> 打开/关闭标签列表
  • winmanager
    WinManager 用于管理文件浏览器和缓冲区(buffer)。2.0 以上版本的 WinManager 还可以管理其他 IDE 类型插件,不过要用户在插件中增加一些辅助变量和 hook 来支持WinManager(帮助文档有相关说明)。

    1. 安装 winmanager

      vim-addon-manager install winmanager
      
    2. 在 .vimrc 中配置

      """"""""""""""""""""""""""""""""""
      " 文件管理器
      """"""""""""""""""""""""""""""""""
      " 进入vim后自动打开winmanager
      let g:AutoOpenWinManager =1
      " 设置要管理的插件
      let g:winManagerWindowLayout='FileExplorer|TagList'
      " 如果所有编辑文件都关闭了,退出vim
      "let g:persistentBehaviour=0
      " <F9>打开/关闭文件管理器
      nnoremap <silent> <F9> :WMToggle<CR>
      
    3. 自定义快捷键说明

      • <F9> 打开/关闭文件浏览器
  • minibufexplorer
    MiniBufferExplorer 用于浏览和管理 buffer ,如果只打开一个文件,是不会显示在屏幕上的,而打开多个文件之后,会自动出现在屏幕上。Vim 也有自带的 buffer 管理工具,不过只有 :ls, :bnext, :bdelete 等的命令, 既不好用, 又不直观.

    1. 安装minibufexplorer

      vim-addon-manager install minibufexplorer
      
    2. 在 .vimrc 中配置

      """"""""""""""""""""""""""""""""""
      " 缓冲区管理
      """"""""""""""""""""""""""""""""""
      " 用<C-h/j/k/l>切换到上下左右窗口
      let g:miniBufExplMapWindowNavVim = 1
      " 用Ctrl+箭头切换到上下左右窗口
      let g:miniBufExplMapWindowNavArrows = 1
      "let g:bufExplorerMaxHeight=30
      " 只有一个buffer,MiniBufExplorer这栏也会出现
      "let g:miniBufExplorerMoreThanOne=0
      " normal模式下<Tab>移动到下一个buffer,<C-Tab>上一个
      nnoremap <silent> <Tab> :bn<CR>
      nnoremap <silent> <C-Tab> :bp<CR>
      " 不要在不可编辑内容的窗口(如TagList)中打开选中的buffer
      let g:miniBufExplModSelTarget = 1"
      
    3. 自定义快捷键说明

      • <Tab> 移动到下一个buffer
      • <C-Tab> 移动到上一个buffer
  • quickfix
    通过 quickfix 命令集,你可在 Vim 内编译程序并直接跳转到出错位置进行修正。你可以接着重新编译并做修正,直到不再出错为止。因为 quickfix 已经在 vim 里集成了,只要配置就好了。

    1. 在 .vimrc 中配置

      """"""""""""""""""""""""""""""""""
      " QuickFix设置
      """"""""""""""""""""""""""""""""""
      " 按下<F2>,执行make
      nnoremap <F2> :TlistToggle<CR> :make<CR><CR><CR> :copen<CR> :TlistToggle<CR>
      " 按下<F12>,执行make clean
      nnoremap <F12> :make clean<CR><CR><CR> :cclose<CR>
      " 按下<F3>,光标移到上一个错误所在的行
      nnoremap <F3> :cp<CR>
      " 按下<F4>,光标移到下一个错误所在的行
      nnoremap <F4> :cn<CR>
      
    2. 自定义快捷键说明

      • <F2> make当前程序
      • <F10> make clean当前程序
      • <F3> 光标移动到上一个错误所在行
      • <F4> 光标移动到下一个错误所在行

参考文献

  1. 有趣的vim游戏
  2. Vim学习指南
  3. vim plugin
  4. Vim Script

如果该文章对您产生了帮助,或者您对技术文章感兴趣,可以关注微信公众号: 技术茶话会, 能够第一时间收到相关的技术文章,谢谢!

Vim配置之入门篇

本篇文章由一文多发平台ArtiPub自动发布

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这