zoukankan      html  css  js  c++  java
  • 打造一个有感觉的Vim(一)

      最近有一款编辑器叫sublimeText 2比较流行,我也下载用了一下,确实很好看,自动完成,缩进功能什么的也比较齐全,插件也十分丰富。但用起来不是很顺手,最后还是回到了Gvim(Vim的GUI版本,除了一些GUI可以额外设置,颜色支持更多外基本与Vim没有区别)的怀抱,我并没有花很多时间去把玩ST2,没法评论那个更好,不过也许Gvim会更适合我。所以想写几篇博文记录下一路学习Gvim的过程。

      写在前面:

      (1)我用的是Gvim7.3_46,系统是win7

      (2)这一系列文章不会详细的介绍Vim的每一个命令的用法

      (3)我会尽量的配图,千言万语有时候真的没有一张图片来得直观

      (4)Gvim下载地址Gvim需要爬墙

      什么叫有感觉呢?最近看了很多相亲的帖子(没错,楼主也是大龄苦逼单身屌丝码农T-T)。经常某某会这样说:“我的要求不高,对方有感觉就好。”,这其实是一个很高的要求,类似于你希望微软为了让你写程序有感觉而推出一个量身打造的VS-For-You,当然你有足够的金钱也不是不可能的(这点和某些相亲情况类似)。话扯远了,我想说的是也许这辈子我们都无法找到一个真正有感觉的人,但这阵子我们完全就可以打造一个有感觉的Vim。

      顺眼的外表:

        按照上面的下载地址路安装完成之后,来看看我们素颜的Gvim姑娘

        

        而在Gvim安装的根目录下你可以看到一个这样的文件_vimrc,这个是Gvim的配置文件,未修改过的内容如下

    set nocompatible
    source $VIMRUNTIME/vimrc_example.vim
    source $VIMRUNTIME/mswin.vim
    behave mswin
    
    set diffexpr=MyDiff()
    function MyDiff()
      let opt = '-a --binary '
      if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
      if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
      let arg1 = v:fname_in
      if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
      let arg2 = v:fname_new
      if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
      let arg3 = v:fname_out
      if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
      let eq = ''
      if $VIMRUNTIME =~ ' '
        if &sh =~ '\<cmd'
          let cmd = '""' . $VIMRUNTIME . '\diff"'
          let eq = '"'
        else
          let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
        endif
      else
        let cmd = $VIMRUNTIME . '\diff'
      endif
      silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
    endfunction

      这是一些基本的配置和一个函数,暂时不用管这些。现在我们来看看Gvim外观的一些设置。

      首先是要说的是Gvim的设置大多是通过set [key]=[value]这个命令来实现。而Vim有三个基本的模式(正常模式,编辑模式,和底行模式)set命令需要在底行模式中执行,而进入底行命令需要在正常模式中按下:,这时候你就会在底部看见一个要求输入命令的行。

    而正常模式是编辑模式和底行模式的转换层(编辑模式需要在正常模式中按下某些键,例如:i,I,a,A等等,进入),因为正常模式是Vim的默认模式,现在我们只需要按下:进入即可。

    我们通过在底行模式下输入browse set可以看到当前的设置

    此时当前窗口被分割成了两个部分,通过浏览上面窗口的内容我们可以知道当前Gvim的各个设置和每个设置控制的外观属性。

    为了打造Gvim小姐,我们需要对以下几个设置进行更改。

    guioptions:缩写是go 主要控制Gvim的图形外观,默认只是egmrLtT,每个字母的意义如下:
                    e.(这个不知道)
                    g.令Gvim的无法使用的菜单选项变为灰色
             m.显示菜单栏
             r.显示右边的下拉条L.当垂直分割窗口的时候显示左边的下拉条
    t.(这个不知道)
    T.显示工具栏

    既然用Vim了那么我们可能基本上就不会再用到工具栏和菜单栏了,一切操作都应该以快捷键和命令完成,所以我们不需要这些设定。不需要菜单栏,不需要下拉条,不需要工具栏。只需要一个窗口就好。我们只需要简单的将go设置成空就行了,命令如下

    :set go=

    Gvim变成了下面这个样子

    这个字体看起来不是很舒服,我们还需要对字体设定一下,这个选项是guifont,首先我们调出字体设置的页面,输入如下命令即可

    :set guifont=*

    命令成功执行后会弹出下面的对话框

    我选择了如图所示的字体,点击确定后Gvim如下

     

    我们还需要记录下当前字体的设置,然后将其写如配置文件中,这样就不用每次打开Gvim都要重新设定一下了。查看任意一个设置的当前值得命令为:set [key]?,所以查看当前字体设定的命令如下

    :set guifont?

    guifont的值会在当前输出

    当编辑的时候我们不希望屏幕中间还有一个鼠标停在那里,只要如下设定即可达到目的

    :set mousehide

    这样当我们按下键盘的时候鼠标就会消失了

    我们还需要设置一下Gvim的高和宽,最好是全屏,所以我们要设置一下Gvim的行数和列数

    :set lines=150 columns=1000

    这只是一个大概的设置,但是你应该设置一个超过当前行数和列数的值来保证Gvim窗口的最大化,因为之前我们已经设置了没有下拉条并且Gvim的默认设定会自动折行所以这样设置并没有问题,但你也可以使用下面这个命令来保证最大化到精切的行数和列数

    au GUIEnter * simalt ~x

    但是这个命令只能保存到配置文件中,因为这是一个响应Gvim打开的自动命令,就是在每次Gvim打开是模拟执行Windows最大化窗口的快捷键(Alt+空格+x)

    下面来切换一下Gvim的主题,在Vim的根目录下有一个colors文件夹里面就存放了Vim的默认安装的主题,如下图

    我们只需要输入:colo [ThemeName] 例如

    :colo evening

    此时Gvim的窗口如下

     

    你也可以访问100个顶级Vim主题下载(需爬墙)获得,下载完成后解压出.vim后缀的文件放到colors文件夹下进入Vim中用:colo设定即可

    最后我们要将这些配以一起写到前文提到的_vimrc中,这样每次Gvim启动我们就不需要再次设置了。最后的_vimrc文件如下

    set nocompatible
    source $VIMRUNTIME/vimrc_example.vim
    source $VIMRUNTIME/mswin.vim
    behave mswin
    "无菜单工具条
    set go=
    "设置Gvim字体 set guifont=Consolas:h11:cANSI
    "Gvim打开即进入全屏 au GUIEnter
    * simalt ~x
    "设置主题 colo evening
    set diffexpr=MyDiff() function MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif let arg1 = v:fname_in if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif let arg2 = v:fname_new if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif let arg3 = v:fname_out if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif let eq = '' if $VIMRUNTIME =~ ' ' if &sh =~ '\<cmd' let cmd = '""' . $VIMRUNTIME . '\diff"' let eq = '"' else let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"' endif else let cmd = $VIMRUNTIME . '\diff' endif silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq endfunction

      

  • 相关阅读:
    Codeforces 177G2 Fibonacci Strings KMP 矩阵
    Codeforces Gym100187C Very Spacious Office 贪心 堆
    Codeforces 980F Cactus to Tree 仙人掌 Tarjan 树形dp 单调队列
    AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
    BZOJ3622 已经没有什么好害怕的了 动态规划 容斥原理 组合数学
    NOIP2016提高组Day1T2 天天爱跑步 树链剖分 LCA 倍增 差分
    Codeforces 555C Case of Chocolate 其他
    NOIP2017提高组Day2T3 列队 洛谷P3960 线段树
    NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp
    NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
  • 原文地址:https://www.cnblogs.com/iiaijimaai/p/3052901.html
Copyright © 2011-2022 走看看