Vim配置之入门篇

正所谓“工欲善其事,必先利其器”,而作为一个专业的码农,怎么能不好好对待自己编程的利器-- 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 命令

        1ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ cpp_src 2mv 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 命令

        1cp -R /usr/include/c++/4.8 ~/.vim/tags/gcc 2ctags -R --c++-kinds=+p --fields=+iaS --extra=+q gcc 3mv 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 中配置

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

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

    1. 安装 winmanager

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

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

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

    1. 安装minibufexplorer

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

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

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

    1. 在 .vimrc 中配置

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

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

参考文献

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

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

技术茶话会

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

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )