最后更新于 .

前几天,依云兄在我博客上推荐了一款插件gui2term.py,用了之后立马叫好,苦于一直没有时间,所以今天特意推荐一下。

这款插件实现了将gvim的配色转化成终端配色的解决方案。下载链接

相信不少朋友和我一样,需要在windows和终端下同时工作,而工具都是vim,所以,保持配色的相同就显得非常重要啦!

我们拿著名的desert配色来测试一下:

1.把desert.vim改成 test.vim,和gui2term.py放到同一目录。打开test.vim,将let g:colors_name="desert" 改为 let g:colors_name="test",并删除掉它的终端配色。

2.将vim根目录下的rgb.txt放到和gui2term.py同一目录。

3.执行./gui2term.py test.vim test2.vim

4.打开test2.vim,将会发现终端配色代码已经生成啦

code_color

放最终效果图 windows下gvim:

desert_gui

xshell下vim:

desert_x

好吧,我甚至觉得xshell下的vim要比windows下的gvim好看……

Then,enjoy it!

Pingbacks

  1. Vim终端配色转换 | 七星庐 on #

    [...] 强烈推荐–将GUI配色转化为终端配色的VIM插件–gui2term.py [...]

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 眼泪哗哗地

    眼泪哗哗地 on #

    终于看到这个插件了.....

    Reply

    1. Dante

      Dante on #

      哈哈,我当时也花了好长时间寻找这个插件呢~~~

      Reply

  2. 依云

    依云 on #

    终于看到有回复了。。。
    其实我也觉得终端下的比GUI的漂亮,无奈终端下用 Alt 组合键让 Esc 的时候不方便。
    其实在 vim.org 上有很多把 GUI 配色转成终端的,但它们都是“实时”的,在载入配色时设置而不改写原文件,按 RGB 算的近似颜色也不准确(比如 spring 的浅绿底色变成了灰色),所以就用自己刚学的 Python 写了这个。

    Reply

    1. Dante

      Dante on #

      嘿嘿,这个插件可是解决了我多年萦绕在心头的大问题呢~~
      其实我不懂python……,一开始还担心自己用不了,结果发现公司的服务器上居然预装了python的解释器啦,哈哈,真是幸运~~

      Reply

      1. 依云

        依云 on #

        一般的 Linux 都会装有 Python 的。你也不一定非要在目标机器上面运行啊。随便找个能跑 Python 的地方转换完毕拿到转换后的文件就可以了。不过你要是在 Windows 下跑估计会有乱码,等到下次更新它时再解决了。

        Reply

        1. Dante

          Dante on #

          哈哈,我就是在公司的开发机上转换的哦,一般也不会在windows下做什么开发工作。
          哈哈,期待你更新最新版本~~~

          Reply

  3. 君临天下

    君临天下 on #

    今晚尝试了 很受用!

    Reply

    1. juagel

      juagel on #

      能否将转换好的文件发我一份???937056191@qq.com 谢了。。。

      Reply

  4. fuadam

    fuadam on #

    为什么我用了这个以后cmd里面的vim就花屏了呢,还有个问题就是输入的中文显示不出来

    Reply

    1. Dante

      Dante on #

      呃,这个在windows下的cmd下用确实会有问题哦,所以其实这个配置是给linux下的终端用的……windows下面那个就是个伪终端,很鸡肋……

      Reply

      1. fuadam

        fuadam on #

        我想用这个的主要原因是想,利用cygwin+screen,来实现vim和shell在同一个窗口里面,用着方便

        Reply

        1. 依云

          依云 on #

          在Linux的screen下色彩也有些不对的,暂时不知道原因。

          Reply

  5. Ling

    Ling on #

    哇,这东西,太神了!是不是只要把这个更新好的test.vim放到color下就能用啦?老大能不能直接发一份给我呀?

    Reply

  6. 球猫

    球猫 on #

    试用了一下,发现颜色变得很利害,觉得是距离定义有问题(比rgb欧式距离还糟糕。。。)

    改成圆锥hsv距离,补丁:

    --- gui2term2.py 2011-01-11 12:10:19.000000000 +0800
    +++ gui2term.py 2011-01-11 12:05:15.000000000 +0800
    @@ -4,6 +4,7 @@

    import os, sys, re
    import colorsys
    +import math

    termcolor = { 16: '#000000',
    17: '#00005f',
    @@ -265,6 +266,25 @@
    re_hexcolor = re.compile('^#[0-9a-fA-F]{6}$')
    re_hiline = re.compile('^\s*hi\w*\s+[A-Z]\w+')
    re_name = re.compile('(?<=\s)[A-Z]\w+(?=\s+gui)')
    +
    +def x2f (s):
    + return int(s, 16)/255.0
    +
    +def color_norm (c):
    + return x2f(c[1:3]), x2f(c[3:5]), x2f(c[5:])
    +
    +
    +def dis (h1, s1, v1, h2, s2, v2):
    + _2pi = math.pi*2
    + x1 = s1*v1*math.cos(h1*_2pi)
    + y1 = s1*v1*math.sin(h1*_2pi)
    + z1 = v1
    + x2 = s2*v2*math.cos(h2*_2pi)
    + y2 = s2*v2*math.sin(h2*_2pi)
    + z2 = v2
    + return (x1-x2)**2 + (y1-y2)**2 + (z1-z2)**2
    +
    +
    class color:
    def __init__(self, r=0, g=0, b=0):
    self.r = r
    @@ -277,11 +297,12 @@
    # TODO 更好的计算法
    best_match= 0
    smallest_distance = 10000000
    - for c in range(16,255):
    - # d = (int(termcolor[c][1:3], 16) - self.r) ** 2 + (int(termcolor[c][3:5], 16) - self.g) ** 2 + (int(termcolor[c][5:], 16) - self.b) ** 2
    - a = colorsys.rgb_to_hsv(float(int(termcolor[c][1:3], 16)), float(int(termcolor[c][3:5], 16)), float(int(termcolor[c][5:], 16)))
    - b = colorsys.rgb_to_hsv(float(self.r), float(self.g), float(self.b))
    - d = (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 + ((a[2] - b[2]) / 255.0) ** 2
    + for c in range(16,256):
    + #d = (int(termcolor[c][1:3], 16) - self.r) ** 2 + (int(termcolor[c][3:5], 16) - self.g) ** 2 + (int(termcolor[c][5:], 16) - self.b) ** 2
    + a = colorsys.rgb_to_hsv(* color_norm(termcolor[c]))
    + b = colorsys.rgb_to_hsv(self.r/255.0, self.g/255.0, self.b/255.0)
    + #d = (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 + (a[2] - b[2]) ** 2
    + d = dis(* (a+b))
    if d < smallest_distance:
    smallest_distance = d
    best_match = c

    Reply

    1. Dante

      Dante on #

      哈哈,太好啦~~
      评论对代码的支持不是很好哦,能否提供一下文件下载,或者发到我邮箱?

      依云看到的话也可以试一下哦

      Reply

    2. 依云

      依云 on #

      谢谢,我对颜色的计算没什么概念,所以算法是自己瞎猜的。。。

      这个算法我将在下个版本加入。(不过我不知道下个版本什么时候发布。。)

      另外,Dante 有时间赶紧给评论加上 <pre> 标签的支持吧。

      Reply

      1. 依云

        依云 on #

        评论支持 &lt;pre&gt; 标签?那应该提示下下的。。。

        <pre>
        def test():
        12 - 23 &lt; 34
        print(&#039;OK?&#039;)
        </pre>

        Reply

        1. Dante

          Dante on #

          汗,我也才发现。。。

          <pre lang="cpp" line="1">
          int main(int argc, const char *argv[])
          {
          printf("真的支持!");
          return 0;
          }
          </pre>

          Reply

        2. Dante

          Dante on #

          哈哈,看我上面的评论,配色都有~~
          方法如下:
          &lt;pre lang=&quot;cpp&quot; line=&quot;1&quot;&gt;
          int main(int argc, const char *argv[])
          {
          printf(&quot;真的支持!&quot;);
          return 0;
          }
          &lt;/pre&gt;

          Reply

        3. Dante

          Dante on #

          依云,我把你的博客加到友链了哈

          Reply

          1. 依云

            依云 on #

            Thanks!

            Reply

      2. 依云

        依云 on #

        更新了,不过没采用这个算法,感觉效果不够理想。

        Reply

  7. 球猫

    球猫 on #

    我也是瞎猜的。。。

    Reply

  8. lixf

    lixf on #

    能不能把转换好的配色打包发给我。谢谢。43552719@qq.com

    Reply

    1. Dante

      Dante on #

      不好意思啊,很早的文章了,转好的文件都已经扔了,文章已经写了转化方法,自己搞一下也很快的。

      Reply

      1. lixf

        lixf on #

        一定要python3吗?我这里是2.5

        Reply

        1. Dante

          Dante on #

          python2.5就行

          Reply

          1. lixf

            lixf on #

            python2.5.
            gui2term.py1.0
            desert.vim
            终端Putty,试用失败,颜色出不来.

            Reply

            1. 依云

              依云 on #

              请设置 $TERM 环境变量或者 term 选项以让 Vim 知道它可以使用 256 色。

              Reply

  9. juagel

    juagel on #

    终端下显示的颜色和博主的颜色不一样。。。“删除掉它的终端配色”这是什么意思???

    Reply

    1. Dante

      Dante on #

      就是将cterm开头的那些设置删掉哦

      Reply

  10. Ace

    Ace on #

    并删除掉它的终端配色 这是什么意思?

    Reply

    1. Dante

      Dante on #

      就是将cterm开头的那些设置删掉哦~~

      Reply

    2. udonmai

      udonmai on #

      马桶哥!

      Reply

      1. Ace

        Ace on #

        我靠 好巧啊

        Reply

  11. Shmech

    Shmech on #

    我生成的colortheme在gnome-terminal中能用,但在urxvt下无效

    Reply

    1. 依云

      依云 on #

      我这里两个下面都可以用啊。你设置了 'term' 选项或者 't_Co' 选项没有?$TERM 环境变量的值是?

      另外,gui2term.py 更新到 3.0 版本了,使用了更好的算法(基于 CIELab 色彩空间),在寻找 rgb.txt 方面会尝试调用 locate 命令了。

      Reply

  12. _______小过期

    _______小过期 on #

    问一下把第一步并删除掉它的终端配色指的是把
    " color terminal definitions 后面的定义删掉吗?我尝试了一下,把文件放在colors目录下然后修改了vimrc文件还是没有用 T_T

    Reply

    1. Dante

      Dante on #

      凡是term* 类型的都删掉哈

      Reply

      1. _______小过期

        _______小过期 on #

        3X so much!

        Reply

  13. Iceway

    Iceway on #

    我用你的介绍方法, 把/usr/share/vim/vim73/colors/desert.vim转换之后, 的确和gvim中的配色一样了。
    只是还有一点问题想请教。
    看到你文章最后的效果图中, 代码里的变量和一些函数都是彩色的。 比如,变量test和printf函数都是绿色的。另外你的define的宏名称等都是有特殊颜色的。我的gvim和vim都没有这些。你的这些变量名,函数名等的彩色是怎么弄出来的?谢谢!

    Reply

  14. suck007

    suck007 on #

    我下载的最新版,rgb.txt到当前目录下,结果还是提示找不到rgb.txt

    见鬼。。。。。。。。

    Reply

发表评论