【发布时间】:2017-01-24 06:23:05
【问题描述】:
我想用 VIM 生成漂亮的代码 sn-p(C、python 或其他)的 HTML 代码。
目前我只知道vim下的命令“:TOhtml”,但是结果好像太基础了。
这是我想要得到的示例(带有行号和圆角):
有谁知道快速制作这种演示文稿的方法?即使 VIM 做不到,是否有工具可以获取原始代码部分并使用必要的可定制 CSS 直接生成 HTML 代码?
更新 1:
我首先通过“:%set nu”显示行号并执行“:TOhtml”找到了部分解决方案。
所以我得到例如以下代码 sn-p :
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="PreProc">#include </span><span class="Constant">"clFFT.h"</span>
<span id="L2" class="LineNr"> 2 </span><span class="PreProc">#include </span><span class="Constant"><stdio.h></span>
<span id="L3" class="LineNr"> 3 </span><span class="PreProc">#include </span><span class="Constant"><stdlib.h></span>
<span id="L4" class="LineNr"> 4 </span><span class="PreProc">#include </span><span class="Constant"><string.h></span>
<span id="L5" class="LineNr"> 5 </span><span class="PreProc">#include </span><span class="Constant"><math.h></span>
然后,我设置了 CSS 样式:
.LineNr { color: #007399;
-moz-user-select: -moz-none;
-webkit-user-select: none;
user-select: none;
}
我在使用 Firefox 或 Chrome 时会出现问题:
1) 在第一种情况 (FF) 中,如果我从 html 页面复制代码,然后当我粘贴到 nedit 中时,例如,每一行都由 1 个空白行与其他空白行分隔。
2)在第二种情况下(Chrome),代码选择被正确粘贴但行号也出现了,我认为“user-select: none;”可以防止这种行为。
谁能帮我调试一下?
谢谢
更新 2:
我尝试了zeppelin 建议的解决方案,但“:TOhtml”命令生成的 HTML 代码转换为vim 的格式为:
<span class="Comment">/*</span><span class="Comment"> Allocation of 2D arrays </span><span class="Comment">*/</span>
x = malloc((size_tot_y)*<span class="Statement">sizeof</span>(<span class="Type">double</span>*));
x0 = malloc((size_tot_y)*<span class="Statement">sizeof</span>(<span class="Type">double</span>*));
<span class="Statement">for</span>(i=<span class="Constant">0</span>;i<=size_tot_y-<span class="Constant">1</span>;i++)
{
x[i] = malloc((size_tot_x)*<span class="Statement">sizeof</span>(<span class="Type">double</span>));
x0[i] = malloc((size_tot_x)*<span class="Statement">sizeof</span>(<span class="Type">double</span>));
}
或表格的另一部分:
printf(<span class="Constant">"Time step</span><span class="Special">\n</span><span class="Constant">"</span>);
scanf(<span class="Constant">"</span><span class="Special">%lf</span><span class="Constant">"</span>,&dt1);
printf(<span class="Constant">"Convergence </span><span class="Special">\n</span><span class="Constant">"</span>);
scanf(<span class="Constant">"</span><span class="Special">%lf</span><span class="Constant">"</span>,&epsilon);
以上两个 HTML 代码都不需要在每行输入代码前面加上 <span> 标签。
你不认为我的第一种方法不好(在像 nedit 这样的编辑器中复制/粘贴时有一个空白行),因为每行存在不同的标签,我的意思是在第一个之后总是<span id="L1" class="LineNr"> "n-th line" </span> ?
例如,让我们采取这一行:
<span id="L1" class="LineNr"> 1 </span><span class="PreProc">#include </span><span class="Constant">"clFFT.h"</span>
问题是否来自其他 <span> 标签(<span class="PreProc">#include </span> 和 <span class="Constant">&quot;clFFT.h&quot;</span>)?
当我复制一部分代码时,这两个标签似乎会产生回车,当我将其粘贴到文本编辑器中时,这将解释空行,不是吗?
问候
更新 3:当我复制/粘贴最初由 VIM 命令 :TOhtml 生成的代码时,我没有发现任何关于删除空白行的新信息,每个代码都有行号代码行的开头。例如,我再次向您展示生成的 HTML 代码:
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="PreProc">#include </span><span class="Constant">"clFFT.h"</span>
<span id="L2" class="LineNr"> 2 </span><span class="PreProc">#include </span><span class="Constant"><stdio.h></span>
<span id="L3" class="LineNr"> 3 </span><span class="PreProc">#include </span><span class="Constant"><stdlib.h></span>
<span id="L4" class="LineNr"> 4 </span><span class="PreProc">#include </span><span class="Constant"><string.h></span>
<span id="L5" class="LineNr"> 5 </span><span class="PreProc">#include </span><span class="Constant"><math.h></span>
当我从页面复制/粘贴一些代码时,我不希望选择行号。这就是为什么我在我的 CSS 中使用 user-select: none; 作为<span 标签的原因。
也许,解决方案是删除回车(一旦我将代码粘贴到文本编辑器中,这似乎是双重的,因为每个复制的代码行之间都有空行)。
但是当我选择一些代码并将其复制到复制/粘贴文本缓冲区时,我不知道如何删除第二个回车。
我在以下链接上发现了一个有趣的讨论,但我不明白所有的细节:https://bugzilla.mozilla.org/show_bug.cgi?id=1273836
如果有人有一些想法或线索,很高兴告诉我。
谢谢
【问题讨论】:
-
解决方案是部分使用 CSS 处理圆角。以及如何生成不可选择的行号?
-
我可以在命令 ":TOhtml" 之前用 ":set nu" 插入行号,但是当我想复制/粘贴代码 sn-p 时,这些行号可以用鼠标选择。
标签: html css vim copy-paste