
Robbins, Arnold
O'Reilly Media, Inc, USA ペーパーバック / ¥3,979 (2008年07月01日)
発送可能時間:
これまでに私が買ったvi/vim本は
くらいかな。
誰か翻訳してくれ。
素のviって1冊もあれば基本は網羅出来てしまうんで、vim本には基本部分(viコンパチな部分)って書かなくてもいいよ。
特にvi/vimの歴史とか、もういらんし。
例えばYYYYMMDD等といった日付形式のファイル名で散乱しているファイルを日付通りに処理したい。と言った場合、やはりsortやgrepのお世話になるのが楽ですよね。
find . -name "*.txt" | grep '/[0-9]¥{8¥}¥.txt' | sort -n | tr ¥¥n ¥¥0 | xargs -0 ...
といった感じにxargsに渡す寸前でtrを使って改行コードを¥0に置き換えてやる。福地さんののページにあるにバージョン1.2aとして置いてありました。
ショートショートプログラムの部屋
C:¥temp¥quit-1.2a>nkf -g *
Makefile:ASCII (LF)
quit.1:EUC-JP (LF)
quit.c:EUC-JP (LF)
quit.h:EUC-JP (LF)
quit.txt:ASCII (LF)
README:EUC-JP (LF)
C:¥temp¥quit-1.2a>mkdir tmp
C:¥temp¥quit-1.2a>copy quit.c + quit.h tmp
quit.c
quit.h
1 個のファイルをコピーしました。
C:¥temp¥quit-1.2a>nkf -EsX quit.c > sjis_quit.c
C:¥temp¥quit-1.2a>nkf -EsX quit.h > sjis_quit.h
C:¥temp¥quit-1.2a>del quit.c quit.h
C:¥temp¥quit-1.2a>rename sjis_quit.* quit.*
C:¥temp¥quit-1.2a>mingw32-make CC=gcc CFLAGS="-O -DJAPANESE=1"
gcc -O -DJAPANESE=1 -o quit quit.c -lncurses
quit.c:47:49: warning: unknown escape sequence '¥|'
quit.c:47:49: warning: unknown escape sequence '¥|'
quit.c:47:49: warning: unknown escape sequence: '¥201'
quit.c:47:49: warning: unknown escape sequence '¥|'
quit.c:238: error: stray '¥26' in program
quit.c:238:2: warning: no newline at end of file
mingw32-make: *** [quit] Error 1
※ギコ猫版をビルドするには「-DJAPANESE=1」が必要です。
#include <stdio.h>
#include <string.h>
int
main(int argc, char* argv[]) {
const char* s = "―t";
printf("'%s' = %d\n", s, strlen(s));
return 0;
}
のソース(Shift_JIS保存)は、Microsoft Visual C++では「―」の2バイトと「t」の1バイトで計3バイトという結果が返りますがMinGWでは「0x81」の1バイトと「¥t」の1バイトで計2バイトの結果となります。
#include <stdio.h>
#include <string.h>
int
main(argc, argv)
int argc;
char **argv;
{
char buffer[BUFSIZ];
char *p;
while (fgets(buffer, BUFSIZ, stdin) != NULL) {
for (p = buffer; *p != 0; p++) {
if (*p & 0x80) {
putchar(*p++);
if (*p == '\\') putchar(*p);
}
putchar(*p);
}
}
return 0;
}
このソース、実はvimのpoディレクトリにあるsjiscorr.cからパクってます。
C:¥temp¥quit-1.2a>type quit.c | sjiscorr > esc_quit.c
C:¥temp¥quit-1.2a>type quit.h | sjiscorr > esc_quit.h
C:¥temp¥quit-1.2a>del quit.c quit.h
C:¥temp¥quit-1.2a>rename esc_quit.* quit.*
の様にすればOK。一連の流れを一回でやるならば
C:\temp\quit-1.2a>nkf -EsX quit.c | sjiscorr > sjis_quit.c
C:\temp\quit-1.2a>nkf -EsX quit.h | sjiscorr > sjis_quit.h
C:\temp\quit-1.2a>del quit.c quit.h
C:\temp\quit-1.2a>rename sjis_quit.* quit.*
ってやった方が速いですね。
C:\temp\quit-1.2a>mingw32-make CC=gcc CFLAGS="-O -DJAPANESE=1"
とすれば出来上がり。
--- quit.c.orig Fri Feb 22 12:14:24 2008
+++ quit.c Fri Feb 22 12:14:53 2008
@@ -6,6 +6,10 @@
#include <ncurses.h>
#include <signal.h>
#include <unistd.h>
+#ifdef _WIN32
+# include <windows.h>
+# define usleep(x) Sleep(x/1000)
+#endif
#include "quit.h"
こんなパッチでusleepをSleep(1000分の1)で誤魔化してビルド。って事でコンパイルを、いわたさんの言う様に「--finput-charset」指定でする事も重要ですね。特に「¥uXXXX」な文字列や「L"XXX"」なんかは上の方法では変換出来ませんしね。@mattn_jp -finput-charset=cp932 -fexec-charset=cp932 への言及もおながいします。
このブログを応援する