Vim6 Part6
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNGhttp://www.vim.org/
前スレ
http://pc.2ch.net/test/read.cgi/unix/1045365370/
関連情報は>>2-6あたり。
0422名無しさん@お腹いっぱい。
NGNGsilent のスペルを間違ってないか?
0423名無しさん@お腹いっぱい。
NGNG:h :silent
0424420
NGNG:h sil でもいいけど。
0425名無しさん@お腹いっぱい。
NGNG-silentが出る場合もあるよ。
環境によって違うから、ヘルプ見ろ!って時はverboseに示した方が無難。
0426名無しさん@お腹いっぱい。
NGNG:h sil<TAB>
を押してみたら?
sil がキーワードのいろんなヘルプを見られますよ。
0427KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG確か<TAB>は'wildmenu'が設定されないと出てきません。
0428421
NGNG"various.txt"
E434: タグパターンを見つけられません。
となります。
ヘルプファイルを全部日本語のものに置き換えたせいですかね。
0429350
NGNGSolaris8でlibiconvの変換がうまく行かない件ですが、
環境変数のLIB、INCLUDE、LD_LIBRARY_PATHを設定しても、
make時のlink.shで、don't need と言われ、
-liconvが除外されてしまうのが原因っぽい気がします。
config.mk で -L -R を指定しても同じでした。
src/auto/link.sed から iconv の部分を削除すれば、リンクはされるんですが、
やはり変換はできません。
どうしてもiconvが必要というわけではないので、できなければあきらめますが、
なんか悔しいので、どなたかわかるかたいませんでしょうか?
0430KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG> ヘルプファイルを全部日本語のものに置き換えたせいですかね。
その通りです。
0431名無しさん@お腹いっぱい。
NGNG# Vimに関係ないわけではないから別にスレ違いにはならないと思うけど。
・>>350以下を見たところ、「GNUの」libiconvを入れたという解釈でよろしい
のですよね?(GNU libiconvの最新バージョンは 1.9.1 です)
・環境変数 LD_LIBRARY_PATH は(コンパイル時ではなく)実行時に指定するものです
が、大丈夫でしょうか。
% env LD_LIBRARY_PATH=${HOME}/lib ldd /path/to/bin/vim
% env LD_LIBRARY_PATH=${HOME}/lib /path/to/bin/vim
$ LD_LIBRARY_PATH=${HOME}/lib ldd /path/to/bin/vim
$ LD_LIBRARY_PATH=${HOME}/lib /path/to/bin/vim
でどうなりますか?
・行ったインストール方法を正確に書いていただけますか。
0432350
NGNGレスありがとうございます。liviconvはGNUのlibiconv 1.9.1を入れました。
LD_LIBRARY_PATHは実行時に指定するものというのは、351さんが教えてくれたので、
知ってましたが、念のためということで、.cshrcに
setenv LD_LIBRARY_PATH=${HOME}/lib:${LD_LIBRARY_PATH}
としてあります。
コマンドの出力結果ですが、長くなるので抜粋して..
1 libXpm.so.4.11 => (ファイルが見つかりません)
libiconv.so.2 => /homedirectory/lib/libiconv.so.2
/usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1
2は、libXpm.so.4.11が見つからないので強制終了してしまいます。
3,4はCシェルなのでエラーになってしまいます。
行ったインストール方法ですが、
./configure --prefix=ユーザディレクトリ 後
できた、src/auto/config.mk の LIBS に、-Lユーザディレクトリ/libを追加
で、make, make installです。
0433431
NGNG補足…
「正しい」インストール方法は README_unix.txt → src/INSTALL → src/Makefile
ってカンジで読めば分かるかと(すでにご存じかもしれませんが一応…)。で、
それらを読むと
1. Edit this Makefile
2. Edit feature.h
3. "make"
Will first run ./configure with the options in this file. Then it will
start make again on this Makefile to do the compiling.
ということが書かれているのが分かるはずです。最初に Makefile を修正しろ、
とのことなので修正して下さい。少なくとも、
CONF_OPT_MULTIBYTE = --enable-multibyte
は必要ですよね。あと、libiconvを「独自に」インストールされたとのことです
ので、Makefile内に
LDFLAGS = -L/path/to/libdir -R/path/to/libdir
を追加する必要があると思います。この後、
% make
を実行して様子を見て下さい。(makeはGNUのものを使った方がいいと思います)
その際、最初に内部でconfigureが実行されると思いますが、その表示内容を
「iconv」で探して見て下さい。どうなってますか?
checking for iconv.h... yes
…
checking for iconv_open()... yes; with -liconv
というのがありますか?
0434350
NGNGmake後、src/auto/link.sedからiconvの行を削除して、再びmakeし、make installです。
0436431
NGNGCシェルですか、それなら>>431の
> % env LD_LIBRARY_PATH=${HOME}/lib ldd /path/to/bin/vim
> % env LD_LIBRARY_PATH=${HOME}/lib /path/to/bin/vim
だけで結構です。(後の2つは Bシェル 用として書きました)
>>432
> 2は、libXpm.so.4.11が見つからないので強制終了してしまいます。
その Solaris8 には X Window 関係のライブラリはインストールされているのです
か?
0437431
NGNG>>432
>>434
>>433で書いた通りにやってみて下さい。ドキュメントに書かれていることに
忠実に実行することが重要かと。
# >>435はtypoですなスマソ
0438名無しさん@お腹いっぱい。
NGNG0439名無しさん@お腹いっぱい。
NGNGうちも,それやらないと Solaris の iconv が使われて変換できなかった.
でも他にはいじった覚えはないな.
記憶が不確かですまんが,あとは --enable-multibyte とは .vimrc で
enc とか fenc とか設定すればうまくいったような気がする.
0440名無しさん@お腹いっぱい。
NGNG%env CFLAGS="-I$HOME/include" CPPFLAGS="-I$HOME/include" \
LDFLAGS="-L$HOME/lib -R$HOME/lib" ./configure \
--enable-multibyte --prefix=$HOME
%make
おれはこれでできました。solaris7です。
0441名無しさん@お腹いっぱい。
NGNGなりますが、バックグラウンドで make させつつファイルの編集を
続ける方法はありませんか?
0442KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGシェルのジョブ管理機能を使って裏でmakeを実行することはできますが、quickfixとの
連携はできません。つまり、441さんが考えているような「バックグラウンドでmakeさ
せつつ」ということはできない、と推測されます。
0443350
NGNG変換も問題なくできるようになりました!
結局、.cshrcでCDFLAGS CPPFLAGS LDFLAGSを設定することで、
link.shのときに、iconvがDO needになって、除外されずにリンクしてくれました。
--enable-multibyteは、KoRoNさんのREADME_j.txtを見てやってたので、
最初から大丈夫でした。
EUCでもSJISでもJISでも開けて、完璧です。ほんとありがとうございました!
0444名無しさん@お腹いっぱい。
NGNG--enable-multibyteは最初からつけてるんなら、>>432に書け。
0445名無しさん@お腹いっぱい。
NGNGっていうか、自分、Kaoriya版とも書いてなかったですね..
どれもこれも説明不足でした。ほんとお騒がせしました。
0446KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGREADME_j.txtには最低限必要なことしか書かれていません。INCLUDEやLIB、加えて
LD_LIBRARY_PATHのような基本的な設定については、既に解決されていると仮定して書
かれています。
0447名無しさん@お腹いっぱい。
NGNG解決策を見付けられなかったので質問させてください。
.vimrc に set noautoindent を設定しているのですが、
gvim で編集中に改行するとインデントが入ってしまいます。
もちろん、編集中に :set noautoindent とすれば
インデントは入らなくなりますが、.vimrc で設定してる以上、
gvim の起動直後から設定が効いてほしいのです。
どうしたらよいか、どなたかご教授ください。
0448名無しさん@お腹いっぱい。
NGNGset noautoindent をやったあとで、
別なファイルをinclude したりしてない?
.vimrcの最後に書いてみたら。
とりいぞぎ。できれば識者の方フォローたのんます。
0449名無しさん@お腹いっぱい。
NGNG>>376 と同じだけど、
:verbose set autoindent
として、まずどこで最終的にそのオプションが効いているのか確かめたら?
0450447
NGNG>>448
.vimrcの最後に書いてもだめでした。
>>449
それやっても何も出てきません。
どこにも設定してないことにされてるのでしょうか。
綴りも間違えてないのですが。
vine2.6で
vim-common-6.1.265-0vl1.i386.rpm
vim-X11-common-6.1.265-0vl1.i386.rpm
vim-X11-huge-6.1.265-0vl1.i386.rpm
の3つをイン須子したのだが、これらに問題があるのだろうか。
rpmのを消して、香り屋のやつを入れようと思ったけど、
patchの当てかたも判らないので、
もうちょっと勉強してからやり直そうと思います。
0451名無しさん@お腹いっぱい。
NGNG:scriptnames
0452名無しさん@お腹いっぱい。
NGNG当方の環境はWinXP Pro SP1, VS.NETは2002と2003を共存してます。
gvimは6.2.71です。
ttp://www.kaoriya.net/testdir/VisVimNET-20021210.tar.bz2
を取ってきて、slnを2003に変換してビルドしたのですが、
インストーラーでインスコすると2002の方にAdd-Inが着いてしまいます…
# 2003のアドインマネージャにはVisVimが現れない。
2003で使えるようにするにはどうしたら良いでしょうか?
0453KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGVisVimNETSetupのレジストリ設定を変更(プロジェクト上で右クリック→表示→レジ
ストリ)して、HKCU以下の7.0となっているキー全てを7.1に変更してください。
0454名無しさん@お腹いっぱい。
NGNG何が原因でしょうか。
Windows版のスレが見つからなかったので板違いと知りつつも質問させて頂きましたが問題があるようでしたら退散します。
0456名無しさん@お腹いっぱい。
NGNGバッファに移さない削除の仕方ってありますか?
dもxもバッファに移ってしまうので…
0457今日も朝から@Vim%Chalice
NGNG"_を頭に付ける。eg. "_dd "_x
詳しくは:h "_
0458KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG起動時に読み込まれるスクリプト群の問題と推測されますが、類似症状の報告は受け
ていないので詳細はわかりません。ですから次のようにコマンドラインで起動して各
スクリプトを一時的に無効化することで、ご自分で原因を調べてみてください。
gvim -u NONE -U NONE
これでvimrc|gvimrcの読み込みが抑制されます。
gvim --noplugin
これでプラグインの読み込みが抑制されます。以上を実行して起動速度に違いが観測
できるか、確認してみてください。
>>455
1つのセットアッププロジェクトで7.0と7.1両方書くようにしてしまうか、セット
アッププロジェクトをコピーして7.0と7.1用2つ用意すると良いでしょう。
0459455
NGNG> 1つのセットアッププロジェクトで7.0と7.1両方書くようにしてしまうか、
これで試したら出来ました。いろいろありがとうございます。
# セットアッププロジェクトでレジストリのコピーって出来ないんですね…
# まるまる手で写しました…
0460454
NGNGお返事ありがとう御座います。
教えて頂いた方法を試してみたところvimrcとgvimrcを読み込まなければ速いことが解りました。
そして色々とコメントアウトをして試してみたところ
vimrc|gvimrcの以下のところで時間がかかっていることが解りました。
if 1 && exists('$HOME') && filereadable($HOME . '/.vimrc_first.vim')
さらに削ってみたところ
filereadable($HOME . '/.vimrc_first.vim')
の記述で時間がかかっていることが解りました。
これで何か解るでしょうか。
0461KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG追試と報告をありがとうございます。最新のNetUp版では該当箇所先頭の1を0に変え
て一時的に無効化しました。後ほどこちらでも環境を用意して原因の詳しい調査をし
た上で、正式な処置を決定します。
0462名無しさん@お腹いっぱい。
NGNG当方SchemeなるLisp系の言語で色々プログラムしているのですが,
Lisp系の言語は独自の構文が作れちゃうわけです.
そのとき,仕様書通りの構文に対するインデントと自分で作った構文に対するインデントが
異なってしまい,若干不都合です.
後者は構文じゃなくてその他の状況におけるインデントになるわけです.
具体的には,defineが仕様書通りの構文に対するインデント,define-methodが後者です
(define (test1 i)
(+ i 1))
(define-method ((<object> obj) i)
(func obj))
↑これを何とか上と同じようにスペース2個にしたくて,
$(VIM)/runtime/syntax/scheme.vim のschemeSyntax一覧に
define-methodなどを追加したところ,色は変わったのですがインデントは変わりませんでした.
インデントに関する記述は別の所にあるのでしょうか.
0463KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGsyntaxとindentは別物です。基本的な動作は'autoindent'や'smartindent'で記述可能ですが、
独自のインデントアルゴリズムを作りたい場合には
:help 'indentexpr'
を参照してください。ただし決して簡単ではありません。
またファイルタイプ毎にindentを切り替えるには&rtpのindentに
ファイル(例:~/.vim/indent/scheme.vim)を置くのが慣例です。
0464KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGLisp系言語に関しては'lisp' と 'lispwords' が関係するようです。
:set lispwords+=define-method
で行けそうです。
0465flatline@Vim%Chalice ◆r6EONKKhcc
NGNG:set lispwords+=define-method でよいと思います.
:help 'lispwords' してみて下さい.私は逆に :set lispwords-=if としてます.
ちなみにソース書いたら :!%scheme などとするとバッファ内が
Schemeインタプリタにかけた結果に置き換わります.その後はアンドゥすればよし.
結構使いやすい方法ですよ.どこかのサイトで教わりましたが発見できませんでした.
# ちなみに香り屋さんとこのVimヘルプを丸ごとコピーしてちょっとずつ
# アップデートしてますので,よろしければ御覧下さい > ALL
# ttp://user.ecc.u-tokyo.ac.jp/~g340299/docj/
0466名無しさん@お腹いっぱい。
NGNG0467462
NGNG>>465 if構文は趣味が分かれますが,述語と同列にする方が多いみたいですね
ちなみにソースを実行というやつは以下のページあたりかなぁと思います
http://www.ksky.ne.jp/~sakae/sicp/schemers-vi.html
0468名無しさん@お腹いっぱい。
NGNG:map とか :ts
とかのコマンドの出力をバッファに読み込むことはできるでしょうか?
0469名無しさん@お腹いっぱい。
NGNG:redir
0470名無しさん@お腹いっぱい。
NGNGおお、このコマンド知りませんでした。まだ知らないことたくさんあるなぁ。
ありがとうございました。
0471名無しさん@お腹いっぱい。
NGNG%s/\s$//g
だと空白一つしか削除できなかったのですが。
0472名無しさん@お腹いっぱい。
NGNG%s/\s\+$//
:h pattern
0473名無しさん@お腹いっぱい。
NGNG0474名無しさん@お腹いっぱい。
NGNGあれ? ”+”もエスケープしちゃうの?
0475名無しさん@お腹いっぱい。
NGNGサンクスコ
+ の前に \ が必要なのか。
0476KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGそのあたりは設定で変更可能です。
:help 'magic'
:help /\m
Perlと異なることに違和感を覚える人がいるようですが、一説にはソースコードを検
索するのに都合良いように現行のメタ文字になっている、と読んだ記憶があります。
0477名無しさん@お腹いっぱい。
NGNGmagicかnomagicでも \+ が正解みたいです。
magicの影響を受けるのは、どうやらgrep正規表現のメタキャラみたいです。
あと、grepと違うのは \{n,m\} と書かずに、\{n,m} と書くところくらいでしょうか。
0478KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG+はmagicではダメですけど\v使えばメタ文字になりますね。
0480名無しさん@お腹いっぱい。
NGNGまったりいきまそ。
0481名無しさん@お腹いっぱい。
NGNG1)
aho
baka
manuke
という3行をfoldすると、 fold後はahoがコメントになりますが、
それをbakaにすることは可能ですか?
空行を含む複数行のfoldを
////// 空行を含む複数行のfold ///////
と表した時、
hoge
////// 空行を含む複数行のfold ///////
hage
とあってhogeの下にカーソルがあると仮定して、 } で
hageの上まで飛ぶことは可能ですか?
# foldしててもその上でddするとfold全体を1行として
# 扱うかのように複数行deleteするのに対し、
# } ではfoldの中の空行を渡りあるいてカーソルが
# foldの上でたたずんでることがちょっと納得行きません。
0482KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG1つめは要スクリプトの知識ですが'foldtext'で設定可能です。
詳細は :help fold-text を参照してください。
2つめはfolddoopenを用いてmapすることが可能です。
:folddoopen normal! }
0483KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG0484名無しさん@お腹いっぱい。
NGNG自分を正当化するのが当たり前な今日この頃この業界こんばんはビルJでs(略
0485名無しさん@お腹いっぱい。
NGNG0486名無しさん@お腹いっぱい。
NGNG0489名無しさん@お腹いっぱい。
NGNG0490名無しさん@お腹いっぱい。
NGNGhttp://www.vim.org/scripts/script.php?script_id=273
2.3使ってたんで、感動するぐらい便利になっちょる。
TlistUpdate最高。
0491名無しさん@お腹いっぱい。
NGNGあってもいいのではと思うのは漏れだけですか?
undoで日付が変わるのが嫌で自分で一回だけ更新したい人もいるかと. . .
autocmdでAutodateOFFしてもいいんだけどね
0492名無しさん@お腹いっぱい。
NGNG0493KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGautodate.vimは「自動で更新すること」が目的ですから、それに対してオプションと
はいえ手動更新の優先機能つまり「自動更新の無効化」を追加してしまえば、そもそ
もの存在意義に矛盾しますよね。どうしても手動だけでやりたいのならば
:let plugin_autodate_disable = 1
した上で、現在日時を入力するためのmapなりプラグインを自分で書いた方がマシな
んではないでしょうか。
0494名無しさん@お腹いっぱい。
NGNGみたいにファイルの前後5行に書いておくと日時入力を無効にできる、
というのもありかと。
0495KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG使いたくないならばキーワードを変えるか、書かなければ良いだけです。
0496名無しさん@お腹いっぱい。
NGNG0497名無しさん@お腹いっぱい。
NGNG0498名無しさん@お腹いっぱい。
NGNGabcdefghijklmnopqここから〜
〜ここまでrstuvwxyz
0499名無しさん@Vim%Chalice
NGNGVで範囲指定して
:'<,'>s/^/strings to insert/
>>498
vで範囲指定してy
0500名無しさん@Vim%Chalice
NGNG( ゚Д゚) < ついでにムーンウォークで折り返し地点ゲトー!!
./ つ つ \_____________
〜(_⌒ヽ (´⌒(´
.)ノ `J≡≡≡(´⌒;;;≡≡≡
(´⌒(´⌒;;
ズザーーーーーッ
0501名無しさん@お腹いっぱい。
NGNGお陰で快適な編集作業が得られました。
0502名無しさん@お腹いっぱい。
NGNG0504名無しさん@お腹いっぱい。
NGNG0505名無しさん@お腹いっぱい。
NGNG0506名無しさん@お腹いっぱい。
NGNG初めて知りました。
便利ー。
しかし、>>497氏はこっちを求めていると推測してみる。
http://members.jcom.home.ne.jp/advweb/index_p1_s9.html
0507名無しさん@お腹いっぱい。
NGNG「2 japanJapanese: on Unix "euc-jp", on MS-Windows cp932」
だそうで, じゃあcygwinの時は? と思ってやってみたらcp932なんですね.
cygwinのterminal(rxvt)がeucj modeなのでeuc-jpと判断されたら嬉しかったのにぃ〜
0508KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGネイティブなコンソールがcp932なので、そういうパッチが送られ採用された経緯があります。
+iconvならtermencodeを使うと上手く行くかもしれません。
0509名無しさん@お腹いっぱい。
NGNGその指定した範囲の行が置きかえられてしまうでしょう?
例
:51,58!sort
この範囲指定のコマンドの実行を、現状のテキストを置き換えないで実行して
結果を取りたいのですよ。
で、なにか簡単にできる方法ってあったりしますか?
ちなみに今はこんなふうにしてます。
:51,58w temp.txt
:!sort temp.txt
0510509
NGNGこの方法でいいのかな。
0511507
NGNGなるほど.
ところで, 507で書いたようにeucjなterminal@win + cygwin環境で,
cp932のファイルを開くと文字化けしてしまいます.
encは無理矢理euc-jpにし, Kaoriya版のvimrcを$HOME/.vimrcに使わせて頂いているので,
encをeuc-jpにした時, fencsは
ucs-bom,ucs-2le,ucs-2,iso-2022-jp-3,utf-8,cp932
です.
echo has('iconv')には1を返すし, iconv -f CP932 -t EUCJP XXX.txtでは
正しく読めています.
うむむ謎…
tencというのは知らなかったので, ちょっとこいつを弄んでみます.
0512KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG必要な範囲を新しいバッファへ切り出して、そっちをフィルタにかける方法もありま
す。
>>511
Cygwinで./configure && makeしてもWin32APIを使ってたような記憶があります。
なのでencを無理矢理euc-jpにするにはソースを弄らないと意味が無いハズです。
Windowsで使うのならば基本的にencはcp932にして、rxvtを組み合わせたい時には
tencをeuc-jpにすれば、理論上は動作することになります。
0514名無しさん@お腹いっぱい。
NGNGautocmd FileType changelog
map ,d ggi<CR><CR><ESC>kki<C-R>=strftime("%Y-%m-%d")<CR>
\ 774 <774@hoge.jp ><ESC>o<CR><TAB>*
\ | map ,n ggo<CR><TAB>*
endif
というコードを.vimrcに貼り付けたら
gvimを起動するたびにダイアログが表示されるようになりましたが、
いちいちダイアログを閉じるのがめんどくさいので、表示しないように
する方法はありますか?
0515KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG0516名無しさん@お腹いっぱい。
NGNGすみません、\をmap ,dの前に入れたら動かなくなりました。
0517KoRoN@Vim%Chalice ◆8XALICEsdk
NGNGそもそもどういうダイアログが出て問題になっているのかわからんです。514に書かれ
た設定は、ft=changelogの時にだけ有効になるmapをしようとしているものだと推測さ
れますが、文法的にはmapの前に\が無いことが問題になります。なので515という指摘
をしたのです。
他に考えられる問題点として、行頭の \ で行を連結するというのは特定の条件下では
使えません。
:help cpo-C
あとautocmdの中で直接mapするよりはfunction定義してその中で定義したほうがエレガ
ント、というのがあります。
if has("autocmd")
function s:AutocmdFiletypeChangelog()
map ,d ggi<CR><CR><ESC>kki<C-R>=strftime("%Y-%m-%d")<CR> 774 <774@hoge.jp><ESC>o<CR><TAB>*
map ,n ggo<CR><TAB>*
endfunction
autocmd FileType changelog call <SID>AutocmdFiletypeChangelog()
endif
0518名無しさん@お腹いっぱい。
NGNG具体的には
VIM6.2.098で
set encoding=japan
set fileencodings=ucs-bom,iso-2022-jp,utf-8,ucs-2le,ucs-2,cp932
のとき,どんなファイルを読んでもiso-2022-jpとして処理されてしまう。
というものです。
わかった事は,
fileio.c の readfile() 内の iconv() の戻り値の処理が
0と-1の処理しかないので,おかしくなっているみたい。
1以上の値が返ったときもエラーとして扱えばうまくいってる。
そもそもコード変換できないときの処理として
GNU iconv は-1を返すけど
citrus iconv は 変換できなかった文字数を返す
ってことなんだけど
iconvの仕様として
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/iconv.3.html
これ見ると,変換できない文字数が返るときもあるみたいに読めます。
んで,結局何がいいたいかというと
VIMのサポートしているiconvシステムはGNU LIBICONVしかないのか?
ってこと。
外人にパッチ投げる勇気もないのでここに書いてみました。
#VIMのソース汚すぎ(;_; よく分からん。
0519KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG> そもそもコード変換できないときの処理として
> GNU iconv は-1を返すけど
> citrus iconv は 変換できなかった文字数を返す
違うようです。GNU libiconvではマップできない文字(入力エンコードとして不正な
シーケンス)を発見した際に-1を返すのですが、Citrus iconvでは計算アルゴリズムな
どで無理矢理マップした上で非可逆変換した文字数として返しているのでしょう。この
動きはMacのiconv相当APIであるTECと似た動作です。Macの場合はSnifferという入力
シーケンスのエンコードを検証するモジュールがあるので、それを用いてそのような無
理矢理な変換を検出することができます。
# ただしiso-2022-jpについてはこのSnifferが無茶苦茶遅いという問題がありますが。
Vimの抱えている問題点の1つに、エンコードの判定をiconvに頼っていることがありま
す。GNU libiconvの場合はそれでうまく行っていますが、Citrus iconvではそうは行か
ないということでしょう。正確にはPOSIX iconvの定義ではエンコード判定に使えるか
は保証できない、というべきです。これを材料にfencs=guessみたいな仕組みを提案す
ることはできるかもしれません。
しかしCitrusにもまったく問題が無いとは言い切れません。恐らくiso-2022-jp→
euc-jpへの変換などは計算アルゴリズムでガッツリ変換するように実装されているので
はないでしょうか?。だとすると入力エンコードとして不正なシーケンスのチェックは
一切行なっていないことになり、これはCitrusをvim-devでの議論の材料にした際に弱
点になる可能性があります。
Citrusがそのあたり正確にはどうなってるかを調べて、見るべきソースの入手場所、
ファイル名、行数等を教えて貰えないでしょうか?。それがわかればvim-devへ私がメー
ルを投げることができるようになり、もしかしたらCitrusにとってもVimにとっても幸
せなソリューションが生まれるかもしれません。もしも単にVimで漢字コード変換を使
いたいだけなら、Citrusは忘れてGNU libiconvを導入したほうが手っ取り早く幸せにな
れます。
# 余談ですがVimのソースなんて綺麗な方です。
0520518
NGNGはじめに言い忘れたけど,僕は単なるユーザーです。
Citrus iconvについて詳しいわけじゃないし,POSIX iconvが
どうなってるか,分かりません。
fencs=guessとかがとっても正しい姿な気がします。
でも自分はとりあえず使えればいいので
どんなところでも使えるGNU libiconvを使えって言われれば,そうするつもりです。
結局,vim-devの人たちを説得するだけのパワーは僕にはありません。
ものすごい独り言でごめんなさい。
0521KoRoN@Vim%Chalice ◆8XALICEsdk
NGNG> でも自分はとりあえず使えればいいので
> どんなところでも使えるGNU libiconvを使えって言われれば,そうするつもりです。
残念ですが、そういうことでしたらそのようにしてください。
> 結局,vim-devの人たちを説得するだけのパワーは僕にはありません。
以前より現行のfencsの仕組みはあまりに使い憎いと感じていたものですから、この
件に関しては時間がかかるかもしれませんが材料を整えてなんとかするつもりです。
■ このスレッドは過去ログ倉庫に格納されています