<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tool on I Code It</title>
    <link>https://icodeit.org/categories/tool/</link>
    <description>Recent content in Tool on I Code It</description>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Sat, 24 Jan 2015 00:00:00 +0000</lastBuildDate><atom:link href="https://icodeit.org/categories/tool/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>剪贴板里的样式</title>
      <link>https://icodeit.org/2015/01/copy-code-with-style/</link>
      <pubDate>Sat, 24 Jan 2015 00:00:00 +0000</pubDate>
      
      <guid>https://icodeit.org/2015/01/copy-code-with-style/</guid>
      <description>高亮剪贴板里的代码片段 我前几天在准备一个培训的slides的时候，想在Keynote中粘贴一段代码，默认的粘贴板中的内容并没有样式，粘进去之后就是纯文本，没有语法高亮不说，默认的，代码的字体会采用Keynote默认的字体，非常难看。
之前在Intellij中有个插件&#39;Copy&#39; on steroids，这个插件可以将Intellij的编辑器中的高亮过的文本拷贝到剪贴板，然后就可以在Keynote中使用了。
我就想能不能有对应的命令行工具，结果还真的找到一个，就叫highlight，主页在这里。（这里略微吐槽一下，这个官方页面的风格以今天的眼光来看，无论是配色还是样式布局等，都非常难看，完全是10年前的风格，不过这个小工具确实很好用）。
基本使用 在Mac下，安装非常简单：
$ brew install highlight highlight支持很多格式，HTML，RTF甚至还有LaTeX。不过如果要在Keynote或者PowerPoint中使用，用RTF(Rich Text Format)就可以了。
选择要高亮的文件，比如app.rb
require &amp;#39;sinatra&amp;#39; require &amp;#39;rack/contrib&amp;#39; require &amp;#39;active_record&amp;#39; require &amp;#39;json&amp;#39; require &amp;#39;./model/plants&amp;#39; class FrontendApplication &amp;lt; Sinatra::Base get &amp;#39;/&amp;#39; do File.open(&amp;#39;index.html&amp;#39;).read end end 然后使用命令：
$ highlight -O rtf app.rb | pbcopy 即可将高亮过的内容复制到剪切板中，然后只需要CMD+V就可以粘贴了：
如果要生成HTML格式，只需要指定:
$ highlight -O html app.rb &amp;gt; app.rb.html 自定义语言（扩展） 如果遇到不支持的语言时，默认的highlight会报错，要查看所有支持的语言，可以使用
$ highlight -p 所有的highlight内置的语言高亮配置都存储在本地的一个目录中，比如在我的机器上，存储位置为/usr/local/Cellar/highlight/3.18_1/share/highlight/langDefs/。
还以Java为例，该目录下会有一个文件，名为java.lang，内容如下：
Description=&amp;quot;Java&amp;quot; Keywords={ { Id=1, List={&amp;quot;abstract&amp;quot;, &amp;quot;default&amp;quot;, &amp;quot;if&amp;quot;, &amp;quot;private&amp;quot;, &amp;quot;this&amp;quot;, &amp;quot;do&amp;quot;, &amp;quot;implements&amp;quot;, &amp;quot;protected&amp;quot;, &amp;quot;throw&amp;quot;, &amp;quot;break&amp;quot;, &amp;quot;import&amp;quot;, &amp;quot;public&amp;quot;, &amp;quot;throws&amp;quot;, &amp;quot;else&amp;quot;, &amp;quot;instanceof&amp;quot;, &amp;quot;return&amp;quot;, &amp;quot;transient&amp;quot;, &amp;quot;case&amp;quot;, &amp;quot;extends&amp;quot;, &amp;quot;try&amp;quot;, &amp;quot;catch&amp;quot;, &amp;quot;final&amp;quot;, &amp;quot;interface&amp;quot;, &amp;quot;static&amp;quot;, &amp;quot;finally&amp;quot;, &amp;quot;strictfp&amp;quot;, &amp;quot;volatile&amp;quot;, &amp;quot;class&amp;quot;, &amp;quot;native&amp;quot;, &amp;quot;super&amp;quot;, &amp;quot;while&amp;quot;, &amp;quot;const&amp;quot;, &amp;quot;for&amp;quot;, &amp;quot;new&amp;quot;, &amp;quot;switch&amp;quot;, &amp;quot;continue&amp;quot;, &amp;quot;goto&amp;quot;, &amp;quot;package&amp;quot;, &amp;quot;synchronized&amp;quot;, &amp;quot;as&amp;quot;, &amp;quot;in&amp;quot;, &amp;quot;def&amp;quot;, &amp;quot;property&amp;quot;}, }, { Id=2, List={&amp;quot;boolean&amp;quot;, &amp;quot;double&amp;quot;, &amp;quot;byte&amp;quot;, &amp;quot;int&amp;quot;, &amp;quot;short&amp;quot;, &amp;quot;void&amp;quot;, &amp;quot;char&amp;quot;, &amp;quot;long&amp;quot;, &amp;quot;float&amp;quot;}, }, { Id=3, Regex=[[@\w+]], }, { Id=4, Regex=[[(\w+)\s*\(]], }, } Strings={ Delimiter=[[&amp;quot;|&#39;]], Escape = [[ \\u\d{4}|\\x?</description>
      <content:encoded><![CDATA[<h3 id="高亮剪贴板里的代码片段">高亮剪贴板里的代码片段</h3>
<p>我前几天在准备一个培训的slides的时候，想在Keynote中粘贴一段代码，默认的粘贴板中的内容并没有样式，粘进去之后就是纯文本，没有语法高亮不说，默认的，代码的字体会采用Keynote默认的字体，非常难看。</p>
<p>之前在Intellij中有个插件<code>'Copy' on steroids</code>，这个插件可以将<code>Intellij</code>的编辑器中的高亮过的文本拷贝到剪贴板，然后就可以在Keynote中使用了。</p>
<p>我就想能不能有对应的命令行工具，结果还真的找到一个，就叫<code>highlight</code>，<a href="http://www.andre-simon.de/doku/highlight/en/highlight.php">主页在这里</a>。（这里略微吐槽一下，这个官方页面的风格以今天的眼光来看，无论是配色还是样式布局等，都非常难看，完全是10年前的风格，不过这个小工具确实很好用）。</p>
<h4 id="基本使用">基本使用</h4>
<p>在Mac下，安装非常简单：</p>
<div class="highlight"><pre class="chroma"><code class="language-sh" data-lang="sh">$ brew install highlight
</code></pre></div><p><code>highlight</code>支持很多格式，<code>HTML</code>，<code>RTF</code>甚至还有<code>LaTeX</code>。不过如果要在Keynote或者PowerPoint中使用，用<code>RTF</code>(Rich Text Format)就可以了。</p>
<p>选择要高亮的文件，比如<code>app.rb</code></p>
<div class="highlight"><pre class="chroma"><code class="language-rb" data-lang="rb"><span class="nb">require</span> <span class="s1">&#39;sinatra&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;rack/contrib&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;active_record&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;json&#39;</span>

<span class="nb">require</span> <span class="s1">&#39;./model/plants&#39;</span>

<span class="k">class</span> <span class="nc">FrontendApplication</span> <span class="o">&lt;</span> <span class="no">Sinatra</span><span class="o">::</span><span class="no">Base</span>
    <span class="n">get</span> <span class="s1">&#39;/&#39;</span> <span class="k">do</span>
        <span class="no">File</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s1">&#39;index.html&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span>
    <span class="k">end</span>
<span class="k">end</span>
</code></pre></div><p>然后使用命令：</p>
<div class="highlight"><pre class="chroma"><code class="language-sh" data-lang="sh">$ highlight -O rtf app.rb <span class="p">|</span> pbcopy
</code></pre></div><p>即可将高亮过的内容复制到剪切板中，然后只需要<code>CMD+V</code>就可以粘贴了：</p>
<p><img loading="lazy" src="/images/2015/01/ruby-highlight-resized.png" type="" alt="app.rb"  /></p>
<p>如果要生成HTML格式，只需要指定:</p>
<div class="highlight"><pre class="chroma"><code class="language-sh" data-lang="sh">$ highlight -O html app.rb &gt; app.rb.html
</code></pre></div><h4 id="自定义语言扩展">自定义语言（扩展）</h4>
<p>如果遇到不支持的语言时，默认的<code>highlight</code>会报错，要查看所有支持的语言，可以使用</p>
<div class="highlight"><pre class="chroma"><code class="language-sh" data-lang="sh">$ highlight -p
</code></pre></div><p>所有的<code>highlight</code>内置的语言高亮配置都存储在本地的一个目录中，比如在我的机器上，存储位置为<code>/usr/local/Cellar/highlight/3.18_1/share/highlight/langDefs/</code>。</p>
<p>还以Java为例，该目录下会有一个文件，名为<code>java.lang</code>，内容如下：</p>
<pre><code>Description=&quot;Java&quot;

Keywords={
  { Id=1,
    List={&quot;abstract&quot;, &quot;default&quot;, &quot;if&quot;, &quot;private&quot;, &quot;this&quot;, &quot;do&quot;, &quot;implements&quot;,
&quot;protected&quot;, &quot;throw&quot;, &quot;break&quot;, &quot;import&quot;, &quot;public&quot;, &quot;throws&quot;, &quot;else&quot;,
&quot;instanceof&quot;, &quot;return&quot;, &quot;transient&quot;, &quot;case&quot;, &quot;extends&quot;, &quot;try&quot;, &quot;catch&quot;, &quot;final&quot;,
&quot;interface&quot;, &quot;static&quot;, &quot;finally&quot;, &quot;strictfp&quot;, &quot;volatile&quot;, &quot;class&quot;, &quot;native&quot;,
&quot;super&quot;, &quot;while&quot;, &quot;const&quot;, &quot;for&quot;, &quot;new&quot;, &quot;switch&quot;, &quot;continue&quot;, &quot;goto&quot;,
&quot;package&quot;, &quot;synchronized&quot;, &quot;as&quot;, &quot;in&quot;, &quot;def&quot;, &quot;property&quot;}, },
  { Id=2,
    List={&quot;boolean&quot;, &quot;double&quot;, &quot;byte&quot;, &quot;int&quot;, &quot;short&quot;, &quot;void&quot;, &quot;char&quot;, &quot;long&quot;, &quot;float&quot;},
  },
 { Id=3,
    Regex=[[@\w+]],
  },
  { Id=4,
    Regex=[[(\w+)\s*\(]],
  },
}

Strings={
  Delimiter=[[&quot;|']],
  Escape = [[ \\u\d{4}|\\x?\d{3}|\\\w|\\[\'\\\&quot;] ]]
}

IgnoreCase=false

Comments={
  { Block=false,
    Delimiter= { [[\/\/]] },
  },
  { Block=true,
    Nested=false,
    Delimiter= { [[\/\*]],[[\*\/]],}
  }
}

Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\.|\:|\&amp;|&lt;|&gt;|\!|\=|\/|\*|\%|\+|\-|\|]]

EnableIndentation=true
</code></pre><p>基本上，这些配置都是自解释的，比如关键字列表的定义，字符串的正则pattern，是否区分大小写，注释的格式，操作符的格式，是否启用缩进等。</p>
<p>我在准备Slide的时候，想要加入一段<code>Cucumber</code>的feature文件，然后发现并不支持，于是就参照着Java的定义新建了一个文件：</p>
<pre><code>Description=&quot;Gherkin&quot;

Keywords={
  { Id=1,
    List={&quot;Feature&quot;, &quot;Scenario&quot;, &quot;Given&quot;, &quot;When&quot;, &quot;Then&quot;, &quot;And&quot;, &quot;World&quot;, &quot;Outline&quot;},
  },
}

Strings={
  Delimiter=[[&quot;|']],
  Escape = [[ \\u\d{4}|\\x?\d{3}|\\\w|\\[\'\\\&quot;] ]]
}

Comments={
  { Block=false,
    Delimiter= { [[#]] },
  },
}

IgnoreCase=false
</code></pre><p>将这个文件保存为<code>feature.lang</code>，这样我们就可以高亮下面这个<code>cucumber</code>的feature文件了（其实feature文件本身是有一个叫做Gherkin的语言编写的）</p>
<div class="highlight"><pre class="chroma"><code class="language-gherkin" data-lang="gherkin"><span class="k">Feature:</span><span class="nf">  Connected Home Purchase
</span><span class="nf">
</span><span class="nf">	</span><span class="k">Scenario:</span><span class="nf"> Purchase T-Broadband
</span><span class="nf"></span><span class="k">		Given </span><span class="nf">I am purchasing &#34;</span><span class="s">T-BROADBAND-50GB</span><span class="nf">&#34;
</span><span class="nf">		</span><span class="k">When </span><span class="nf">I go to checkout page
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I am an existing telstra broadband customer
</span><span class="nf">		</span><span class="k">When </span><span class="nf">I select &#34;</span><span class="s">Professional Installation</span><span class="nf">&#34; in Premium service and support
</span><span class="nf"></span><span class="c">		# And I select &#34;None&#34; in Community Wifi</span><span class="nf">
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I select &#34;</span><span class="s">None</span><span class="nf">&#34; in Optional extras
</span><span class="nf">		</span><span class="k">Then </span><span class="nf">I should see &#34;</span><span class="s">Telstra Broadband 50GB</span><span class="nf">&#34; in my shopping cart
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I should see &#34;</span><span class="s">Professional Installation</span><span class="nf">&#34; in add on list
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I should see the total price is &#34;</span><span class="s">$72.00</span><span class="nf">&#34;
</span><span class="nf">
</span><span class="nf">	</span><span class="k">Scenario:</span><span class="nf"> Purchase Entertainerment Bundle
</span><span class="nf"></span><span class="k">		Given </span><span class="nf">I am purchasing &#34;</span><span class="s">Telstra Entertainer Supreme Bundle M</span><span class="nf">&#34;
</span><span class="nf">		</span><span class="k">When </span><span class="nf">I go to checkout page
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I am an existing telstra broadband customer
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I select &#34;</span><span class="s">Foxtel iQ3 ($125 one-off)</span><span class="nf">&#34; in Inclusions
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I select &#34;</span><span class="s">Professional Installation</span><span class="nf">&#34; in Premium service and support
</span><span class="nf"></span><span class="c">		# And I select &#34;None&#34; in Community Wifi</span><span class="nf">
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I select &#34;</span><span class="s">None</span><span class="nf">&#34; in Optional extras
</span><span class="nf">		</span><span class="k">Then </span><span class="nf">I should see &#34;</span><span class="s">Telstra Entertainer Supreme Bundle Entertainment M</span><span class="nf">&#34; in my shopping cart
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I should see &#34;</span><span class="s">Professional Installation</span><span class="nf">&#34; in add on list
</span><span class="nf">		</span><span class="k">And </span><span class="nf">I should see the total price is &#34;</span><span class="s">$120.00</span><span class="nf">&#34;
</span><span class="nf">
</span></code></pre></div><p><img loading="lazy" src="/images/2015/01/feature-highlight-resized.png" type="" alt="cucumber feature"  /></p>
<p>如果你经常写代码，喜欢分享自己学到的，并且喜欢以简短的代码来举例子，那么这个工具非常适合你。</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
