-
- 1. Vim 플러그인
-
-
- 1.1. 알려진 문제점
-
- 1.2. plugin/vim.pl 추가
-
- 1.3. wiki.css 수정
-
- 1.4. 추가 업데이트 내역
-
- 1.5. 사용자 의견
-
1. Vim 플러그인
사용자입력을그대로출력하기의 경우 지원하는 신택스가 몇 개 되지 않는다. 이 플러그인은 vim 을 호출하여 vim이 syntax highlight를 지원하는 언어 코드를 html로 변환하여 출력한다. 박원규님의 [모니위키]에 있는 vim.php 파일을 참조하였다.
- 필수 요구 사항:
- /PlugIn 패치가 되어 있을 것
- [vim]이 설치되어 있을 것
- vim-enhanced 패키지가 설치되어 있어야 하는데, 웹호스팅 업체의 경우 설치되어 있지 않았을 수도 있다.
- 선택 요구 사항:
- Digest::MD5 모듈이 설치되어 있으면 좋다.
{{{#!vim [c|sh|...] [number]
code
}}}
- [c|sh|...] - 사용할 신택스
- 서버에 설치되어 있는 vim 이 지원하는 신택스
- [number] - number 라는 옵션을 주면 행번호를 출력한다.
- 한 번 생성된 html 출력은 upload 디렉토리 아래 vim 디렉토리 아래 저장되어, 다음 번 호출시에는 이 html파일을 읽어서 보여준다. 따라서, vim을 호출하는 오버헤드가 크기 때문에 코드 블럭의 갯수가 많으면 처리에 시간이 많이 걸리지만, 일단 html출력이 저장되면 {{{언어 }}}를 사용하는 것보다 더 빨라진다.
#!/usr/bin/perl
if ($condition) {
print "Hello, World!\n";
}
vim 6.4 이후부터, 변환된 출력의 글꼴 색상이 매우 이상하게 나오고 불필요해보이는 밑줄까지 그어져서 나오는 문제가 있다.
현재 딱히 해결방법은 없고, GyparkWiki에서는 다음과 같이 임시로 처리해둔 상태:
- Raymundo의 사용자 계정에다가 6.3버전을 따로 설치한 후,
- vim.pl 플러그인 파일을 myplugin/ 디렉토리에 복사하고
- 복사된 myplugin/vim.pl 파일에서 vim 실행파일 경로를 직접 지정
./configure --prefix=/home/gypark/local/ \
--with-vim-name=vim63 \
--with-ex-name=ex63 \
--with-view-name=view63 \
--enable-perlinterp \
--enable-multibyte \
--enable-hangulinput
sub plugin_vim {
my ($content, @opt) = @_;
my $vim = "/home/gypark/local/bin/vim63";
my $tohtml = "syntax/2html.vim";
...
}
1.2. plugin/vim.pl 추가
sub plugin_vim {
my ($content, @opt) = @_;
my $vim = "vim";
my $tohtml = "syntax/2html.vim";
my $text;
my $status;
my $option;
my $type = "nosyntax";
foreach my $opt (@opt) {
if ($opt eq "number") {
$option='+"set number" ';
} elsif ($opt =~ /^\w+$/) {
$type = $opt;
}
}
$content =~ s/\r//g;
my $hash;
my $hasMD5 = eval "require Digest::MD5;";
if ($hasMD5) {
$hash = Digest::MD5::md5_base64($content.join('',@opt));
} else {
$hash = crypt($content, $HashKey);
}
$hash =~ s/(\W)/uc sprintf "_%02x", ord($1)/eg;
my $hashhtml = "$hash.html";
my $VimDir = "$UploadDir/vim";
if ($hasMD5 and -f "$VimDir/$hashhtml" && not -z "$VimDir/$hashhtml") {
($status, $text) = &ReadFile("$VimDir/$hashhtml");
return $text if $status;
}
&CreateDir($UploadDir);
&CreateDir($VimDir);
my $hashdir = "$TempDir/$hash";
if (not -d $hashdir) {
mkdir($hashdir, 0775) or return "[Unable to create $hash dir]";
}
my $pwd = `pwd`;
$pwd =~ s/(.*)(\n|\r)*/$1/;
chdir ($hashdir);
my $tmpi = "$hash.in";
my $tmpo = "$hash.out";
open (OUT, ">$tmpi") or return "[Unable to open $tmpi file]";
print OUT $content;
close(OUT);
open SAVEOUT, ">&STDOUT";
open SAVEERR, ">&STDERR";
open STDOUT, ">hash.log";
open STDERR, ">&STDOUT";
qx($vim -T xterm -e -s $tmpi +"set enc=$HttpCharset" +"syntax on" +"set syntax=$type" $option +"ru! $tohtml" +"wq! $tmpo" +q);
close STDOUT;
close STDERR;
open STDOUT, ">&SAVEOUT";
open STDERR, ">&SAVEERR";
($status, $text) = &ReadFile("$tmpo");
if (!$status) {
return undef;
}
$text =~ s/<title>.*title>|<\/?head>|<\/?html>|<meta.*>|<\/?body.*>//g;
$text =~ s/^.*?<pre>/<pre class='vim'>/gs;
$text =~ s/^(\s|\n)*//gs;
$text =~ s/(\s|\n)*$//gs;
$text .= "\n";
chdir($pwd);
if ($hasMD5 and open (OUT, ">$VimDir/$hashhtml")) {
print OUT $text;
close(OUT);
}
unlink (glob("$hashdir/*")) or return "[unlink fail]";
rmdir ($hashdir) or return "[rmdir fail]";
return $text;
}
1;
1.3. wiki.css 수정
pre.vim 항목이 추가됨
PRE.vim {
font: normal normal normal 105%/160% FixedSys, Lucida Console, Courier New, monospace;
border: 1px solid silver;
padding: 0.5em 0.5em 0.5em 0.5em;
white-space:pre;
text-align:justify;
width:90%;
background: black;
color: #c0c0c0;
}
1.4. 추가 업데이트 내역
ext1.74d - html 파일명을 결정하는 부분 개선. 특수 문자를 삭제하지 않고 아스키코드로 표현하게 함
ext1.74e
- 1.74d 에서, 특수문자를 "%16진수"의 형태로 만들었더니 문제가 있어서, "_16진수"의 형태로 만들도록 함.
- number 옵션의 오작동 문제 수정
- 사용 가능한 신택스의 제한을 없앰
ext1.76a - 미리 보기를 하면 \r 캐릭터 때문에 변환 후 "^M"이 출력되는 문제 수정
ext2.9a - 플러그인의 출력으로 나오는 pre 태그의 스타일을 UseModWiki스타일쉬트에서 지정할 수 있게 수정
ext2.26a - html_use_css=1
옵션을 주어서, font 태그를 쓰지 않고 span 태그와 스타일쉬트를 사용하는 형태로 변환하게 함. 구체적인 변경 내역은 [vim plugin - CSS를 사용하도록 수정 · 55f970b · gypark/UseModKr] 참고
위키위키분류