缘起

大学的时候做过Linux内核驱动程序研发,之前写C语言就是用的Vim编辑器,当年的Vim还不如今天之强大,当时的插件也没有现在这么多,只是觉得这个编辑器能满足我想要的所有,查看Linux内核代码,调试C程序,调试汇编代码,写Shell脚本,跑定时测试任务,等等等,都离不开这个编辑器。可能因为当年的机器为了节省几百块的操作系统费,被迫装上了Linux系统,后来才明白,这是上天指引着我来到了Linux这条道路,并且越陷越深。

以前总有人调侃程序员,说PHP是世界上最好的语言,今天带给大家的是CNMP系列的一个比较重量级的选手,Linux下的Vim编辑器。

毋庸置疑,Vim是世界上最棒的编辑器,有编辑器之神的称号,前身是Vi。功能强大,高度可定制是他的特性。

想要熟练使用Vim其实并不难,难就难在要改变你的一些习惯,比方说之前你用编辑器的时候右手肯定是要放在鼠标上面的,只有开始撸代码的时候才会将右手拿离鼠标。这不禁让我想到mac是最适合程序员的电脑,不会是因为他的鼠标就在键盘下侧吧,不过,讲真,mac的触摸板实在是太好用啦!

记住这句话:【vim设计之初就是整个文本编辑都用键盘而非鼠标来完成】,键盘上几乎每个键都有固定的用法,且vim的制作者希望用户在普通模式(也就是命令模式,只可输入命令)完成大部分的编辑工作。

插入模式与命令模式

Vim相较于其他编辑器,不同的地方在于,他有两种模式,第一种就是大家常见的,大部分编辑器都有的插入模式,第二种模式就是他区别于其他编辑器的命令模式。

熟练的使用命令模式能够让你感受到他不适用鼠标的正确性。

两者切换方式

进入Vim之后,键盘敲击

i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行

这些字符就可以进入插入模式,在插入模式中按【ESC】即可回到命令模式。

两者的切换,我最习惯的就是进入vim,按【a】进入编辑模式,然后狂按【ESC】进入命令模式。

屏幕跳转控制命令

【命令模式】

<Ctrl-f>:向下移动一屏。
<Ctrl-d>:向下移动半屏。
<Ctrl-b>:向上移动一屏。
<Ctrl-u>:向上移动半屏。

跳转到多少行

【命令模式】

numG:移动光标到指定的行(num)

剪切、拷贝、粘贴

【命令模式】

d:剪贴选择的内容到剪贴板。
y:拷贝选择的内容到剪贴板。
dd:剪切当前行。
yy:拷贝当前行。
p:在光标区粘贴剪贴板的内容

撤销

【命令模式】

u:撤销刚才编辑的内容

高能提示!!!高能提示!!!高能提示!!!千万别在vim中使用<ctrl+z>,没用的。

常用命令

下面介绍一下你们在日常工作中可能会用到的一些命令

查找命令

/text  查找text,按n健查找下一个,按N健查找前一个。

替换命令

s/old/new/ 用old替换new,替换当前行的第一个匹配
s/old/new/g 用old替换new,替换当前行的所有匹配
%s/old/new/ 用old替换new,替换所有行的第一个匹配
%s/old/new/g 用old替换new,替换整个文件的所有匹配
:, s/^/ /g 在第10行知第20行每行前面加四个空格,用于缩进。

退出命令

:wq 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件。

至此为止,你可以编辑你想要编辑的东西了,和一般的编辑器没多大的区别啦~

Vim插件

下面进入主题,vim的一大特色,他的高可扩展性!插件的安装与使用

左侧为Vim插件文件管理器【NERDTree】,后面我会给大家详细解答。

右侧为我的vimrc文件部分内容。

插件管理器

提起插件,大家第一个想到的就是管理器,类似于包管理器,Python的pip,PHP的Composer,CentOS的yum,Ubuntu的apt-get,Mac的brew,是不是很情切,啊。

那Vim也有自己的插件管理器,那就是大名鼎鼎的【vundle】,最老牌的Vim插件管理器。

按照如下方式下载vundle并安装

#git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

该命令将下载Vundle插件管理器,并将它放置在你的Vim编辑器bundles文件夹中。现在,你可以通过.vimrc配置文件来管理所有扩展了。

vimrc

vim的配置文件,你想要的功能,包括插件的下载安装,都是配置在这个目录下的,然后在命令模式下输入

:PluginInstall

即可完成对插件的安装,别忘了前面有个【:】哈。

首先,我们先看下你的home目录下是否存在vimrc文件,默认是不存在的,如果你之前编辑过的,可以,没关系,我们从头再来过一遍。

#ls ~/.vimrc

【~】是Linux下对应用户的home目录。

没有的话,那就touch一个吧,或者直接vim一个,直接编辑即可。

#touch ~/.vimrc

编辑上面的.vimrc文件,把下载下来的Vundle配置添加到配置文件的顶部:

set nocompatible              " required
filetype off " required " set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin() " alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim' " Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)

注:" 开头的是注释

插件的安装

先来装个插件试试吧,就从刚才的那个文件管理器开始吧。

在上面的vimrc文件中新增一行

Plugin 'scrooloose/nerdtree'

在命令模式下输入【:PluginInstall】

如果出现如下的界面,就表示安装成功啦!

最左边的窗口就是插件安装的显示页面,安装成功的插件全部会显示在这边,怎么在几个分割窗口间跳转呢,按<ctrl+ww>,记住,是两个w哟。

关闭某个窗口,跳到那个窗口,命令模式输入【:q】即可关闭。

什么?打开没有文件夹目录?因为你还没有打开NERDTree呢,命令行输入NERDTree即可打开文件夹管理目录了,如果想要打开就会显示当前的文件夹,在vimrc中输入下面两行即可

autocmd VimEnter * NERDTree
let NERDTreeShowBookmarks=

代码自动补齐

YouCompleteMe - 前Google的C++工程师Valloric (Val Markovic) 开发的一款,专门用于C系(C,C++,C#) 的自动补全工具, 优点是速度非常快,而且支持变量跳转,函数关联跳转,检测代码报错, 可以说是最牛逼的补全工具,缺点是太难配置,对于除了C系语言的其他语言补全支持并不好. 对于刚接触Vim的同学来说相当不友好, 不过文档比较齐全.

Git版本控制

只支持Git 的高亮,速度非常不错

Plugin 'vim-gitgutter'

更新和安装插件

编辑好vimrc文件之后,需要在命令模式下输入下面命令才能更新和安装插件

:source %
:PlugInstall

更改在git管理下的代码,新增一行,左侧就会出现一个小+号。

常用的vimrc配置命令

大多数“现代”集成开发环境(IDE)都提供对方法(methods)或类(classes)进行折叠的手段,只显示类或方法的定义部分,而不是全部的代码。

你可以在.vimrc中添加下面的代码开启该功能:

" Enable folding
set foldmethod=indent
set foldlevel=

你必须手动输入za来折叠(和取消折叠)。

让Vim中的Tab键就相当于4个标准的空格符,确保每行代码长度不超过80个字符,并且会以unix格式储存文件,避免在推送到Github或分享给其他用户时出现文件转换问题。

set tabstop=
set softtabstop=
set shiftwidth=
set textwidth=
set expandtab
set autoindent
set fileformat=unix

支持UTF-8编码

set encoding=utf-

开启显示行号:

set nu

语法高亮显示

syntax on

关于vim的所有就讲到这里,vim其实有很多,包括linux,其实有很多可以让我们去学习的地方,我指的学习不单单是指工具的使用,而是代码层面的学习,尤其是Linux内核的相关源码,可以让你学到很多变成思想,也可以说是算法,真的很精辟,看过的人都知道~~~

【CNMP系列】VIM编辑器详解的更多相关文章

  1. vim编辑器详解

    vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率. vi是“visual interface”的 ...

  2. vim编辑器详解(week1_day3)--技术流ken

    vi编辑器 作用:编辑文本文件中的内容的工具 命令历史 末行模式中,以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 v ...

  3. vim编辑器详解(week1_day3)

    vi编辑器   作用:编辑文本文件中的内容的工具   命令历史   末行模式中,以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令.   启动vim   在命令行窗口中 ...

  4. nginx高性能WEB服务器系列之四配置文件详解

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  5. mongo 3.4分片集群系列之六:详解配置数据库

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  6. mongo 3.4分片集群系列之五:详解平衡器

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  7. Hexo系列(二) 配置文件详解

    Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...

  8. css3系列之transform详解translate

    translate translate这个参数的,是transform 身上的,那么它有什么用呢? 其实他的作用很简单,就是平移,参考自己的位置来平移 translate() translateX() ...

  9. ThreeJS系列1_CinematicCameraJS插件详解

    ThreeJS系列1_CinematicCameraJS插件详解 接着上篇 ThreeJS系列1_CinematicCameraJS插件介绍 看属性的来龙去脉 看方法作用 通过调整属性查看效果 总结 ...

随机推荐

  1. 《JAVASCRIPT高级程序设计》事件处理程序和事件类型

    一.事件流 谈到事件,首要要理解事件流的概念:事件流是指从页面接受事件的顺序:“DOM2级事件”规定事件流包括三个阶段:事件捕获阶段.处于目标阶段和事件冒泡阶段.目前大部分的浏览器的事件流是事件冒泡, ...

  2. yii2 邮件发送(有图有真相)

    经典的密码找回方案是发送邮件到用户邮箱然后修改密码,下面利用yii2 高级版的mail功能,进行邮件的发送,如下图 1.在comm/config/main-local.php中添加 'mailer' ...

  3. 5. UITest测试总结

    1. 什么是Mock 当我们在做单元测试的过程中,为了保持测试又短又快和测试的隔离性,希望尽可能少地去实例化一些具体的组件.在现在面向对象的系统中,被测试的对象很可能会依赖于几个其他的对象,这时候我们 ...

  4. CSS3知识点整理(五)----响应式设计及其他属性

    介绍Media Queries与Responsive设计以及外轮廓属性.resize属性.CSS3生成内容等 学会如何使用CSS3中的Media Queries模块来让一个页面适应不同的终端(或屏幕尺 ...

  5. bzoj4554: [Tjoi2016&Heoi2016]游戏 二分图匹配

    4554: [Tjoi2016&Heoi2016]游戏 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看 是否能 ...

  6. 网络爬虫与搜索引擎优化(SEO)

    爬虫及爬行方式 爬虫有很多名字,比如web机器人.spider等,它是一种可以在无需人类干预的情况下自动进行一系列web事务处理的软件程序.web爬虫是一种机器人,它们会递归地对各种信息性的web站点 ...

  7. oracle中的net manager 无法配置

    今天遇到配置oracle net manager时无法配置,点击服务命名下面没有节点,绿色加号也没有反应 后在网上查到是因为tnsnames文件中的有空格存在导致 文件路径:oracle/produc ...

  8. Transport (VMDB) error -44: Message

     关于点击电源按钮的时候出现了这情况Transport (VMDB) error -44: Message.   虚拟机有个服务没开.开始菜单--运行--services.msc 回车   找到VMw ...

  9. CMFCShellList和自定义ShellList结合使用,达到“直接浏览缩略图,双击打开图片”

    在GOPaint的设计研究过程中,我一直希望能够实现这样的结果(A B C 3个步骤) 在我之前的博客里面,曾经有过缩略图显示的现就(http://www.cnblogs.com/jsxyhelu/p ...

  10. JS事件绑定深入

    W3C很好地解决了覆盖问题.相同函数屏蔽的问题.this传递问题.添加额外方法不被覆盖等问题. 但是IE8之前的版本并不支持,IE9已完全支持了. IE和W3C在事件绑定上存在很多差异,我们以冒泡和捕 ...