:help!
結果↓
E478: 慌てないでください!
tipsというよりイースターエッグかな...
Google謹製のjavascriptで動くコードハイライタ。
Yahooも使っていると言われているコードハイライタ。
コマンドラインで動くコードハイライタ。静的HTMLを生成します。
:echo len(split(globpath(&rtp, "syntax/*.vim"),"\n"))
とするだけでも500個以上のファイルフォーマットに対応している事が分かります。
#include <stdio.h>
int main(int argc, char* argv[]) {
printf("Hello, World\n");
return 0;
}
こんなファイルであれば
:TOHtml
とする事で
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>C:/temp/helloworld.c.html</title>
<meta name="Generator" content="Vim/7.1">
</head>
<body bgcolor="#000000" text="#c0c0c0"><font face="monospace">
<font color="#ff6060">#include </font><font color="#ff40ff"><stdio.h></font><br>
<br>
<font color="#00ff00">int</font> main(<font color="#00ff00">int</font> argc, <font color="#00ff00">char</font>* argv[]) {<br>
printf(<font color="#ff40ff">"Hello, World</font><font color="#008080">\n</font><font color="#ff40ff">"</font>);<br>
<font color="#00ffff">return</font> <font color="#ff40ff">0</font>;<br>
}<br>
</font></body>
</html>
こんなHTMLを出力してくれます。以上が「2html.vim」で使用できるオプションです。use_xhtml
出力するHTMLをXHTMLに強制します。たとえば<br>は<br />と出力されます。
また<DOCTYPE>も合わせて変更されます。
html_number_lines
HTMLを出力する際に行番号を出力してくれます。ただし同一要素内に出力されますのでマウスで選択すると行番号まで選択されてしまいます。
html_font
HTMLのフォントを強制出来ます。通常はmonospaceが使われますが、これよりも優先したいフォントがある場合に使用します。
html_use_css
コードのシンタックスを<font>ではなく<span>で出力します。
class属性は上記「Comment」や「Statement」といった識別が使用されます。
html_use_encoding
metaタグでcharset指定できます。但し現状の「2html.vim」にはencodingが「cp932」の場合の処理がありませんので、以下のパッチを「2html.vim」に当てる必要があります。
*** 2html.vim Fri Aug 03 13:23:20 2007
これでWindowsを使っていらっしゃる人でも「charset=Shift_JIS」と出力されます。
--- 2html.vim.org Tue Jul 31 09:48:00 2007
***************
*** 162,168 ****
let s:html_encoding = 'iso-8859-1'
elseif s:vim_encoding =~ "^cp12"
let s:html_encoding = substitute(s:vim_encoding, 'cp', 'windows-', '')
! elseif s:vim_encoding == 'sjis' || s:vim_encoding == 'cp932'
let s:html_encoding = 'Shift_JIS'
elseif s:vim_encoding == 'big5'
let s:html_encoding = "Big5"
--- 162,168 ----
let s:html_encoding = 'iso-8859-1'
elseif s:vim_encoding =~ "^cp12"
let s:html_encoding = substitute(s:vim_encoding, 'cp', 'windows-', '')
! elseif s:vim_encoding == 'sjis'
let s:html_encoding = 'Shift_JIS'
elseif s:vim_encoding == 'big5'
let s:html_encoding = "Big5"
html_no_pre
<pre>を使わずHTML出力する際に使用します。最近はRSSで全文配信する風潮もあるみたいで、その際に<![CDATA[...]]>使いたくない人には有用かもしれません。
html_start_line
ソースからHTMLを生成する際の開始行番号を指定します。
html_end_ilne
ソースからHTMLを生成する際の終了行番号を指定します。
html_ignore_folding
ソースコードがfoldingされていても内部をHTML出力するように設定します。
設定せずにfoldingされているソースをHTML出力すると以下のようなHTMLが出力されます。
#include <stdio.h>
int main(int argc, char* argv[]) {
+--- 2 行:printf("Hello, World\n");
}
html_whole_filler
foldingモード時に、追加された行を意味する行「... inserted lines」を表示したく無い場合に設定します。
.code {
border-bottom : 1px solid #777777;
border-left : 5px solid #777777;
border-right : 1px solid #777777;
border-top : 1px solid #777777;
background : #555555;
color : #ffffff;
overflow-x : auto;
white-space : nowrap;
font-family : monospace;
}
/* source code */
.code>.Comment {
color: #aaaaaa;
}
.code>.Constant,
.code>.String,
.code>.Character,
.code>.Number,
.code>.Boolean,
.code>.Float {
color: #aa7777;
}
.code>.Identifier,
.code>.Function {
color: #77aa77;
}
.code>.Statement,
.code>.Conditional,
.code>.Repeat,
.code>.Label,
.code>.Operator,
.code>.Keyword,
.code>.Exception {
color: #77aaaa;
}
.code>.PreProc,
.code>.Include,
.code>.Define,
.code>.Macro,
.code>.PreCondit {
color: #aaffff;
}
.code>.Type,
.code>.StorageClass,
.code>.Structure,
.code>.Typedef {
color: #aaaa55;
}
.code>.Special,
.code>.SpecialChar,
.code>.Tag,
.code>.Delimiter,
.code>.SpecialComment,
.code>.Debug {
color: #777777;
}
.code>.Underlined {
color: #00ff00;
text-decoration: underline;
}
.code>.Ignore {
color: #777777;
}
.code>.Error {
color: #ff0000;
}
.code>.Todo {
color: #0000ff;
}
.code>.Folded {
color: #aaffff;
background-color: #aaaaaa;
}
Internet Explorer6ではセレクタが正しく動作しないかと思いますので修正が必要です。
~/_vimrc(un*xでは~/.vimrc)に以下を追加します。
let g:use_xhtml = 1
let g:html_use_css = 1
let g:html_no_pre = 1
全体をHTML出力するならば何も選択せず、また部分的にHTML出力するならば行選択(linewise-visual)してHTMLには<html>や<body>も含まれますので、実際には<body>から</body>を切り取るといいでしょう。
:TOHtml
と実行します。
function! Class_Prototype() dict
return self
endfunction
function! Class_Override(...) dict
if a:0 == 0|throw "Invalid Parameter"|endif
let class = copy(self)
let class.__NAME__ = a:1
if type(a:2) == type(class.New)
let class.New = a:2
else
let class.New = self.New
endif
let class.Super = self
return class
endfunction
function! Class_New(...) dict
let instance = copy(self)
call remove(instance, "New")
call remove(instance, "Override")
let instance.Super = self
return instance
endfunction
function! Class_ToString() dict
return self.__NAME__
endfunction
let Object = {
\ "__NAME__" : "Object",
\ "Prototype": function("Class_Prototype"),
\ "Override": function("Class_Override"),
\ "Super": {},
\ "New": function("Class_New"),
\ "ToString": function("Class_ToString")}
この状態で
if exists("object")|unlet object|endif
let object = Object.New()
echo object.ToString() . ":..."
とすると
Object:...
と表示されます。
function! Human_Sing() dict
return self.perfix . "は" . self.name . "。" . self.title
endfunction
function! Human_New(...) dict
let instance = copy(self)
let instance.perfix = a:1
let instance.name = a:2
let instance.title = a:3
let instance.Sing = function("Human_Sing")
return instance
endfunction
let Human = Object.Override("Human", function("Human_New"))
とすると、Objectクラスを継承するHumanクラスを定義する事が出来ます。
if exists("human")|unlet human|endif
let human = Human.New("私", "人間", "一般人")
echo human.ToString() . ":" . human.Sing()
とすると
Human:私は人間。一般人
と表示されます。
function! Gian_Boxing(who) dict
return a:who . "のくせに生意気だぞ!!!"
endfunction
let Gian = Human.Override("Gian", {})
let Gian.Boxing = function("Gian_Boxing")
if exists("gian")|unlet gian|endif
let gian = Gian.New("俺", "ジャイアン", "ガキ大将")
echo gian.ToString() . ":" . gian.Sing()
echo gian.Boxing("のび太")
とすると
Gian:俺はジャイアン。ガキ大将
のび太のくせに生意気だぞ!!!
とジャイアンが生成出来ます。このブログを応援する