トップページunix
986コメント327KB

Vim6 Part10

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名無しさん@w3mNGNG
Vim 6.xに関する話題、Part10です。
http://www.vim.org/

前スレ
http://pc5.2ch.net/test/read.cgi/unix/1086135625/

関連情報は>>2-7あたり。
0848名無しさん@Vim%Chalice05/02/19 02:57:49
は〜、Chalice は快適じゃのう

>>847
>まあそうなんだけど、elseやelse ifがあったときはそこを経由し
>て巡回したいなと思って。
"else if のない if" と、"else if のある if" が入れ子になったらどうなる?

> 特にswitch文でcaseを辿りたいときは便利かなと。
case は1つですか? 複数の場合があるでしょ。
switch に、一意に対応しない。


:h 'matchpairs'
ここからはじまったの
084984705/02/19 11:08:17
>>848
caseはもちろん複数あるよ。

switch -> case 'a' -> case 'b' -> case 'c' -> switch

switch (a) {
case 'a':
case 'b':
case 'c':

たぶんmatchitではできないんだろね。あきらめるよ。
085084905/02/19 11:13:35
>>848の意味がわかりました。switchが入れ子になったときにcase
がどのswitchに対応するかわからないということですね。

switch
case
case
switch
case
case
case
case
085185005/02/19 11:32:43
defaultを使えばいいのか。defaultがない場合は先頭に戻らないけ
ど、まあいいや。
  \ '\<switch\>:' .
  \ '\<case\>:' .
  \ '\<default>\:'
0852名無しさん@お腹いっぱい。05/02/19 11:34:39
訂正。最後の:はいりません。スレ汚しのお詫びに全部貼ります。

if exists("loaded_matchit")
  if !exists("b:match_words")
    let b:match_ignorecase = 0
    let b:match_words =
\ '\%(\%(^\|;\)\s*\)\@<=if\>:' .
\ '\<else\s\+if\>:' .
\ '\<else\>\%(\s\+\<if\>\)\@!,' .
\ '\<switch\>:' .
\ '\<case\>:' .
\ '\<default\>'
  endif
endif
0853名無しさん@お腹いっぱい。05/02/19 19:03:07
>>682, 705 あたりが関係してる問題だと思いますが、
 - help ファイルが 'fileencodings' に対応してない
 - 'encodings' に指定されてるエンコードを 'fileencodings' に含めると動作が変
というのを改善するパッチを書いてみました。

vim-6.x を使い始めて日が浅いということと(今までは vim-3.0を使用)、
iconv を使ったプログラムに触れるのが初めてなので変な所があったら教えてください。
こちらの環境は OS:NetBSD-1.6.2、vim-6.3(patch1-62、iconv 使用) です。
なお iconv は GNU libiconv 1.9 を使ってます。

パッチと説明が以下に続きます。

085485305/02/19 19:10:10
パッチです。
#define IS_THIS_NECESSARY 1 とかすると、前と同じになります。

begin 644 vim_fileio.patch
M*BHJ(&9I;&5I;RYC+F]R9PE3870@1F5B(#$Y(#`Q.C(P.C4T(#(P,#4*+2TM
M(&9I;&5I;RYC"5-A="!&96(@,3D@,3@Z,#(Z-#(@,C`P-0HJ*BHJ*BHJ*BHJ
M*BHJ*BH**BHJ(#<W,2PW-S8@*BHJ*@HM+2T@-S<Q+#<W-R`M+2TM"B`@"69E
M;F,@/2`H8VAA<E]U("HI(B(["0DO*B!B:6YA<GDZ(&1O;B=T(&-O;G9E<G0@
M*B\*("`)9F5N8U]A;&QO8V5D(#T@1D%,4T4["B`@("`@('T**R`C:69D968@
M25-?5$A)4U].14-%4U-!4ED*("`@("`@96QS92!I9B`H8W5R8G5F+3YB7VAE
M;'`I"B`@("`@('L*("`)8VAA<E]U"2`@("!F:7)S=&QI;F5;.#!=.PHJ*BHJ
M*BHJ*BHJ*BHJ*BH**BHJ(#@P.2PX,30@*BHJ*@HM+2T@.#$P+#@Q-B`M+2TM
M"B`@"7T*("`)9F5N8U]A;&QO8V5D(#T@1D%,4T4["B`@("`@('T**R`C96YD
M:68@+RH@25-?5$A)4U].14-%4U-!4ED@*B\*("`@("`@96QS92!I9B`H*G!?
M9F5N8W,@/3T@3E5,*0H@("`@("!["B`@"69E;F,@/2!C=7)B=68M/F)?<%]F
M96YC.PDO*B!U<V4@9F]R;6%T(&9R;VT@8G5F9F5R("HO"BHJ*BHJ*BHJ*BHJ
M*BHJ*@HJ*BH@.30R+#DT."`J*BHJ"BTM+2`Y-#0L.34T("TM+2T*("`@("`@
M("H@8V]N=F5R<VEO;B!T;R!55$8M."DN"B`@("`@("`J+PH@("`@("!F:6]?
M9FQA9W,@/2`P.PHK("-I9F1E9B!)4U]42$E37TY%0T534T%260H@("`@("!C
M;VYV97)T960@/2`H*F9E;F,@(3T@3E5,("8F("%S86UE7V5N8V]D:6YG*'!?
M96YC+"!F96YC*2D["BL@(V5L<V4**R`@("`@8V]N=F5R=&5D(#T@*"IF96YC
M("$]($Y53"D["BL@(V5N9&EF("\J($E37U1(25-?3D5#15-305)9("HO"B`@
M("`@(&EF("AC;VYV97)T960@?'P@96YC7W5N:6-O9&4@(3T@,"D*("`@("`@
%>PH@(`IF
`
end
085585305/02/19 19:12:20
説明1 help ファイルの 'fileencodings' 対応

:help で表示されるファイルのエンコードを 'fileencodins' に指定してても
ちゃんと表示されない原因についての説明です。

ファイル読み込み部で 'fileencodings' をなめる前に、
:help からの呼び出しだったら utf-8 か latin1 で処理する、
というコードが入り込んでます。
これが原因で 'fileencodings' が効きません。

この部分を削ると 'fileencodings' を見てくれるようになります。
コメントを読むと 『ヘルプファイルは utf-8 か latin1 じゃなきゃだめ』
と読めますが、別にユーザに任せてくれれば良いような気が。
#変換による情報の欠落をおそれてるのかなぁ。

バグではないのだろうけど、どうなんでしょ?

085685305/02/19 19:13:40
説明2-1 'encoding' と 'fileencodins' (現象編)

vim のソースを読むきっかけとなった問題です。
:set encoding=euc-jp
:set fileencodings+=euc-jp,iso-2022-jp,sjis (元の 'fileencodings' に無い値を追加)
とすると、euc-jp のファイルが開けるけれども、
それ以外の iso-2022-jp、sjis のファイルは文字化けしてしまいます。

これが
:set fileencodings+=iso-2022-jp,euc-jp,sjis
だと sjis のファイルだけが化けて、
:set fileencodings+=iso-2022-jp,sjis,euc-jp
だと全部表示されます。

どうも 'encoding' に設定されている値が
'fileencodings' に含まれているとその後のエンコードが無視されるようです。
ちなみに、文字化け時の 'fileencoding' は全部 euc-jp になってます。
085785305/02/19 19:16:26
説明2-2 'encoding' と 'fileencodings' (導入)

ファイル読み込み時は、'fileencodings' の先頭から
エンコード名抜き出しチェックしていきます(ここでは fenc とします)。
処理の流れを簡単に説明すると次のような感じです。

 1. fenc から 'encoding' へ iconv が変換できるかチェック (iconv_open)
  - ここでは iconv がそのエンコードの変換に対応しているか調べるだけ
   +ファイルがどのエンコードかは、この段階で不明
  - iconv が対応してなければ次の fenc にチャレンジ
  - 対応していれば iconv ディスクリプタをゲット
 2. iconv ディスクリプタを元にエンコードの変換を試みる (iconv)
  - 変換失敗(fenc とファイルとのエンコードが異なる場合)で次の fenc にチャレンジ
  - 成功すると 'encoding' に変換されたデータをゲット

という処理を 2. が成功するまで 'fileencodings' をなめながら行います。
#そして成功時の fenc が 'fileencoding' になると。
085885305/02/19 19:17:57
説明2-3 'encoding' と 'fileencodings' (原因と解決)

が、ソースを読むと、fenc と 'encoding' が同じならば、
1. のチェックを省くというように書かれてます。
#同じエンコードならば iconv のチェックの必要がないと考えた?

ただ、そうしてしまうと、iconv_open が呼ばれないわけで、
iconv ディスクリプタが手に入らなくなります。
そして、2. の処理の前には iconv ディスクリプタが有効かのチェックがあって、
無効だと iconv の変換が必要ないと判断され、2. の処理がスルーされます。

で、fenc とファイルのエンコードが一緒かどうか判断しないまま、
fenc を 'fileencoding' としたうえ iconv での変換もされません。
これでは、エンコードが違った場合は文字化けしてしまいます。

なので、1. の処理前にある『func と 'encoding'が同じなら〜』の判定を省き、
ちゃんと iconv_open を呼ぶようにしました。
085985305/02/19 19:20:22
説明2-4 'encoding' と 'fileencodings' (残る問題)

普通に動作しているようですが、一点問題があります。
:set encoding=euc-jp
:set fileencodings+=euc-jp,iso-2022-jp,sjis
の状態で、iso-2022-jp のファイルを開くと 'fileencoding' が euc-jp になります。
#sjis のファイルは sjis になりオッケー。

そこで原因追求のため iconv のテストプログラムを書いてみました。
すると euc-jp -> euc-jp の変換用の iconv ディスクリプタを使って
iso-2022-jp の変換を試した所、エラーが発生せず iso-2022-jp に変換されました。
#本来ならばエラーになって欲しい。

これのせいで、'encoding' == func == euc-jp かつファイルのエンコードが
iso-2022-jp だと文字化けしてます。
#euc-jp を想定している所に iso-2022-jp のデータが流れてきてしまう。

iconv のバージョンを上げて調査したい所ですが、
エネルギーが切れてきたので、とりあえず報告だけということで。
086085305/02/19 19:22:39
以上です。長文&連投失礼しますた。
長くて誰も読まないヨカーン。
0861KoRoN@Vim%Chalice ◆8XALICEsdk 05/02/19 20:02:28
>>860
1について。そういう仕様ですし「むしろhelpの翻訳はUTF-8で書くべし」と考えた方が
なにかと都合が良いです。特に原文の文字を残したい場合など、CP932やEUC-JPでは表
現不可能な場合があり、実際問題KaoriYaのsvn上にある翻訳の最新版は全てUTF-8にし
ましたから、今後公開する版では全部UTF-8になります。仕様を変更したい、という話
でしたらvim-devかBram氏に直接提案してみてください。

2について。簡単に言ってしまえば、それはfencsの設定の仕方の問題で、わざわざソー
スを修正する必要はありません。enc=euc-jpならば
  set fencs=ucs-bom,ucs-2le,ucs-2,iso-2022-jp-3,utf-8,cp932
これで良いでしょう。

Vimは「encへの変換をfencsの値を先頭から順番に試して成功したところで止める」と
いう文字コード判別アルゴリズムを採用しています。そして全て失敗した場合にはenc
がそのまま使われます(無変換)。ですからencに等しい値をfencsに入れる必要はありま
せんし、むしろ下手に入れてしまうとご指摘の問題が生じます。さらにそれだけではな
く、日本語での利用ではfencsに書かれた順番も重要な問題になります。KaoriYaで配布
しているパッチに、日本語向けのfencsを自動設定するスクリプトや、誤認識をある程
度補正するスクリプトが含まれているのは、それらを回避する目的です。

本質的な修正には、いまの場当たり的な文字コード判別アルゴリズムは破棄して、
Gaucheのようなしっかりした判定アルゴリズムを積みたいところですが…Bram氏を納得
させるには難しい面があります orz
0862KoRoN@Vim%Chalice ◆8XALICEsdk 05/02/19 20:17:56
>>861
> Gaucheのようなしっかりした判定アルゴリズムを積みたいところですが…Bram氏を納得
> させるには難しい面があります orz
一応、認識している問題を具体的にしておきます。

1. 文字コード判別ライブラリとして(世界規模で)スタンダードなものがない。
2. 判別ルーチンは変換ライブラリが持っているのが自然に思われる。
   しかし、POSIXで定義されるiconvにはその口が無い。
3. Vimの現在の方法はある程度以上、妥当に働いてしまう。
086385305/02/19 20:36:37
>>861
1はやはり仕様なんですか。
政治的なことは面倒なんで放置プレイかしらん。

>Vimは「encへの変換をfencsの値を先頭から順番に試して成功したところで止める」と
私もそう理解してますが、
変換に成功してない(試していない)のに成功と判定するのは変だと思ったのです。
何をもって変換成功とするかのとらえ方の問題ですかね。

>>862
はい、文字コードを判別する仕組みが iconv に無いことは調べてる最中にわかりました。
そしてそれで苦労している人がたくさんいることも。:)
日本語だけならまだしも、全コードとなると大変ですものね。
0864名無しさん@お腹いっぱい。05/02/19 21:56:44
>>861
> 1について。そういう仕様ですし「むしろhelpの翻訳はUTF-8で書くべし」と考えた方が
> なにかと都合が良いです。特に原文の文字を残したい場合など、CP932やEUC-JPでは表
これってencがutf-8以外だと変換(表示)できなくてむしろ困る気がする。
結局は変換できない文字をつぶさなきゃなんないし、
最低限、encに合わせて変換した物を利用できるようにすべきだと思う。
そのほうがチープな環境もサポートするって意味でvim的な感じがする。
ていうか現状そうなってると思うんだけど、違うんかな。
0865名無しさん@お腹いっぱい。05/02/19 22:06:26
>>864
後ろばかり見ているのはいかがなものかと。
0866KoRoN@Vim%Chalice ◆8XALICEsdk 05/02/19 23:00:55
>>863
> 何をもって変換成功とするかのとらえ方の問題ですかね。
あるコードから同じコードへの変換は、どのような入力であっても明らかに成功する
とわかっている(仮定している)から、ということなのでしょうね。むしろ変換に成功
しないようなiconv実装は知らん、ぐらいの勢いが感じられますよね(笑)

あとはドキュメントの問題ですかね。help 'fencs'には幾つかのダメな設定例があ
がっていますが、encと同じ値を指定するという例はありませんから、追加するよう
に提案するのは1つのアイデアです。が、やはり本質的にはちゃんと自動認識して欲
しいですよね。

>>864
> これってencがutf-8以外だと変換(表示)できなくてむしろ困る気がする。
それにはiconvが無いと使えなくなるとか、iconvの実装の問題というところもあるん
ですが、大元のデータとしてはUTF-8で表現しておくのは決して間違いではありませ
ん。あとは、どのタイミングで何を使ってコンバートするか、だけの問題です。

> そのほうがチープな環境もサポートするって意味でvim的な感じがする。
> ていうか現状そうなってると思うんだけど、違うんかな。
現状からは否定できないところです(苦笑)。でも個人的には最終的に、encはUTF-8固
定にするのが一番良いと考えてます。そして必要に応じて表示する直前でtermencを
使う。どの文字を潰してどう表現するかはiconvの実装に任せれば良いわけです。
GNOME,KDE,WinならばUTF-8からiconv使わずに表示できますから、コードが小さく単
純にできるし、基幹部分も速くなります。

# Vim7ではリファクタリングするとか宣言してたと思うけど、本当にするのかな?
086785305/02/19 23:56:44
>>866
うっ、私の書き方が悪かったせいで誤解されてるヨカン。

>>856-858 で言いたかったのは
'fileencodings' の中で 'encoding' と同じエンコード*名*が出ただけで
変換作業をスキップしてしまうのはマズイのでは、
ということです。
これによって、実際のファイルのエンコードと 'encoding' が異なるのに
変換が行われない問題が起きています。
#んで、その問題を直すパッチを書いたと。

>>859 で言ったのは私の iconv 環境の問題で vim は悪くありません。
同じ A => A のエンコード変換を設定している所に
B のエンコードを突っ込んだらエラーも出ずに B が出た、
というのがその問題です。
#本来なら想定してない B のエンコードを突っ込んだ時点でエラーにならなきゃおかしい。

全然別の問題を一緒に書いたのがまずかったですね。
0868名無しさん@お腹いっぱい。05/02/20 00:54:02
A->Aの変換器にBをつっこんだらそのままBが出力されるってのは妥当な仕様だと思う。
iconvの場合は実際に変換してみてデータが不正なら変換に失敗するってのは「副作用」であって、
本来は入力がAであることを利用者(プログラマ)が保証すべきなんじゃないかな。
だからiconvにデータの検証を求めるのはそもそもおかどちがいだし、
「A->Aの変換」とかいう無駄を避けるのも妥当な選択。
副作用が必然である以上はそれを利用するのも妥当だと思う。
086985305/02/20 01:41:57
>>868
あー、そういうものなんでしょうか。
個人的には A のエンコード以外の入力は全部不正なデータのエラーにしてくれる方が好みです。
もちろん、B のエンコードがきても不正なデータとして認識できない可能性もあるから
データの検証を iconv にさせるのは正しくないと思います(そのための関数でもないだろうし)。
0870名無しさん@お腹いっぱい。05/02/20 02:55:04
>>869
> 個人的には A のエンコード以外の入力は全部不正なデータのエラーにしてくれる方が好みです。

> データの検証を iconv にさせるのは正しくないと思います(そのための関数でもないだろうし)。

矛盾してるんだが。

矛盾してないとすれば別に検証してから変換かけろってことか、
両方をするプログラムを書くってことだが、どっちも無駄な労力だろう。
087185305/02/20 09:47:42
>>870
理想と現実を書いたので矛盾してます。
また紛らわしく書いてしまってすんません。
0872名無しさん@お腹いっぱい。05/02/20 15:29:06
個人的には
・判別ルーチンは変換ライブラリとは別にして、判別は変換前にする
・判別ルーチンは指定可能にする
がいいと思う。
0873KoRoN@Vim%Chalice ◆8XALICEsdk 05/02/20 18:29:29
>>872
> ・判別ルーチンは変換ライブラリとは別にして、判別は変換前にする
> ・判別ルーチンは指定可能にする
もちろん、それが直近で実現可能な方法の1つなのですが、その判定結果がそのまま
変換ライブラリに渡されることを考えると、どうにもスッキリしないんですよね。

iconvのほうを直して、fromにautoみたいにしておけば良いようにする手も無くは無
いですが…あ〜そうなるとVimがfencを決定できませんね。
0874名無しさん@お腹いっぱい。05/02/20 19:47:54
判別で 1つに絞り込めるとは限らないなら
判別法は複数候補があっていいはず。
判別ルーチンを iconv に実装してそれに固定するのは
うまくないような。iconv で指定可にする手もあるか。
なんて。
0875名無しさん@お腹いっぱい。05/02/20 21:01:32
ファイル自体に何か書いとくと強制的にそのエンコーディングになる、
とかって出来ますっけ?
0876名無しさん@お腹いっぱい。05/02/20 21:09:08
モードライン使って
  vim: set fenc=cp932 nomodified:
って感じ?
0877名無しさん@お腹いっぱい。05/02/20 21:16:22
>>876
最初に開いたときは文字化けするけど、:eで読みなおすと化けなく
なる。
0878KoRoN@Vim%Chalice ◆8XALICEsdk 05/02/20 21:24:46
>>874
Gaucheのヤツはかなり賢くて、完全には絞り込めなくても点数(確率みたいなもんで
す)が計算されて、順位付けされます。
# 構造も綺麗で、さすがScheme屋さんだと感心しました。

複数候補があったとしてもプログラムで使う以上、最終的に1つを選択しなければな
りません。その意味でもGaucheの方法は妥当と言えます。それに失敗した場合はもう
仕方ない。Webブラウザが文字セットの判定に失敗するのと同じですね。敢えていえ
ば、絞られた複数の候補とその順番を取得する仕組みが欲しいかもしれません。
0879mattn@Vim%Chalice05/02/21 09:29:13
:help は compatible モードでも動作する必要があります。
fenc の設定によって、見えなくなってしまうようではヘルプの意味が無くなりますし
その上で utf-8 で統一しようという風に決まったと記憶しています。
local additionals の判断も、utf-8 前提でしか処理していません。patch 6.3b.018
0880名無しさん@お腹いっぱい。05/02/21 10:41:48
kaoriyaさんとこのパッチを当てたら、uim-fep 使えるようになってるけど、
日本語入力すると、確定前とか、複数候補選択時とか、
文字化けする(というかカーソルの進みが1半角分しか進まない感じ)
のは、うちだけでしょうか?
0881名無しさん@お腹いっぱい。05/02/21 10:57:13
>>880
uim-fep作者です。
おそらくvimは関係ありません。

uim-fep単体で動かしても同じ症状が出ますか?
再現方法はわかりますか?

スレ違いでしたらこちらにお願いします。
http://pc5.2ch.net/test/read.cgi/linux/1105419571/
0882名無しさん@Vim%Chalice05/02/21 11:48:01
q: で履歴画面を開き、リターンでコマンド実行後、
画面が閉じずに続けてコマンドを選択実行したいのですが
方法はあるでしょうか?
C-cしてエンター押してもだめでした・・・
088388005/02/22 10:19:14
>>881 ご返答ありがとうございます。
PCいじっている時間がなく、しばらく返答できないです。
再現性などその他情報まとめましたら、改めて質問させて頂きます。
0884名無しさん@お腹いっぱい。05/02/23 11:31:50
vimでtex書いてる方、どんなスクリプト使ってますか?
vim-latexっていうのを入れてみたんですが、どうもimapがうまくいってないみたい
0885名無しさん@お腹いっぱい。05/02/23 12:09:03
>>884
プラットフォームはなんですか?
0886名無しさん@お腹いっぱい。05/02/23 12:14:16
>>884
別に何も使ってないなぁ
大昔に書いたMakefileで :make と、foldmethod=marker にして
適当に折りたたみしてるくらいかな?
0887名無しさん@お腹いっぱい。05/02/23 13:11:28
たとえば fa で a の文字に飛ぼうとしたときにIMEがオンになってIMEをオフにしてからもういちど a を打ち直さなければならないときがあるんですが
これをなくすにはどうすればいいのでしょうか

今やってみたのは
1. IMEのキー設定で<ESC>にIMEオフを割り当てて
2. vim内で :map <ESC> <ESC><ESC>
としてみたのですがなぜかずっとノーマルモードで〈ESC〉を押したときの音がいつまでも鳴りつづけて操作できなくなるんですがどうしてなんでしょう。
0888名無しさん@お腹いっぱい。05/02/23 13:17:47
そらあんた…。
ESC 入力のループになるでしょ。
0889名無しさん@お腹いっぱい。05/02/23 13:19:53
>>888
どうすればいいんですか?
0890名無しさん@お腹いっぱい。05/02/23 13:35:18
>>887
inoremap <silent> <esc> <esc>:se imi=0<cr>
0891名無しさん@お腹いっぱい。05/02/23 14:05:57
>>890
ありがとうございます!!
勉強不足でコマンドの意味はわからないのですが試してみます。
089288405/02/23 17:39:47
>>885
WinXPのgvimです。そういえばここはUNIX板でしたね。
>>886
慣れればマクロとかなくても平気なのかもしれないですね。
0893名無しさん@お腹いっぱい。05/02/23 17:47:34
>>892
僕はtex_autoclose.vimと自分で書いたftpluginを使ってます。

inorea <buffer> sec \section{}<left>
inorea <buffer> sub \subsection{}<left>
inorea <buffer> subsub \subsubsection{}<left>
inorea <buffer> par \paragraph{}<left>
inorea <buffer> use \usepackage{}<left>
inorea <buffer> \i \item
inorea <buffer> \r \ref{}<left>
inorea <buffer> \l \label{}<left>
inorea <buffer> beg \begin{
inorea <buffer> the \begin{thebibliography}{9}<cr>\end{thebibliography}<esc>kA
inorea <buffer> enu \begin{enumerate}<cr>\end{enumerate}<esc>kA
inorea <buffer> des \begin{description}<cr>\end{description}<esc>kA
inorea <buffer> ite \begin{itemize}<cr>\end{itemize}<esc>kA
inorea <buffer> cen \begin{center}<cr>\end{center}<esc>kA
inorea <buffer> ver \begin{verbatim}<cr>\end{verbatim}<esc>kA
setl isk+=_
0894名無しさん@お腹いっぱい。05/02/23 18:03:52
>>893
そういうの初めて知りました。
で、abbreviationのヘルプ見たら、うまくいかなかった原因はset pasteしてたせいだとわかりました。
どうもです。
0895名無しさん@お腹いっぱい。05/02/24 23:13:00
いま趣味でpythonの勉強しているんですがvimでコードを書いているときにバグ探しみたいなことってきるんですか?
ヘルプ見たら:makeでC(Cはまったく知らない)とかだったら出来るみたいなんですがpythonでやると出来ない見たいみたいなんですが実際どうなんでしょう?
0896名無しさん@お腹いっぱい。05/02/25 00:40:15
>>895
:makeが何をする物か分かってる?
0897名無しさん@お腹いっぱい。05/02/25 00:49:37
>>895
pyunitっていうのが使えるみたい
0898名無しさん@Vim%Chalice05/02/25 20:37:36
:g/String/number の出力結果をエラーファイルにしたいのですが、
マクロを組んで、
:redir! @a
:g/String/number
:redir end
:Scratch
"aP
:set buftype=quickfix
までやったのですが、エラーフォマットが問題なのか動きません。
やろうとしてることが無理なのでしょうか。
0899名無しさん@お腹いっぱい。05/02/25 22:13:32
:redir! > tmpfile
:g/String/echo bufname("%").":".line(".").":".getline(".")
:redir end
:"適当に空行削除
:cfile tmpfile
出力フォーマットについては:help 'errorformat'
0900名無しさん@お腹いっぱい。05/02/27 12:42:39
アスキーコード以外の文字コードを入力することってできますか?

例えば、0x82 や 0xFF などなど
0901名無しさん@お腹いっぱい。05/02/27 12:49:05
>>900
C-vx82
C-vxff
0902名無しさん@お腹いっぱい。05/02/28 00:53:08
:e で新しくファイルを開くのですが
また前のファイルにもどりたくなったら :eで開くしかないのでしょうか?
screenを使っているのですが Vimではできないのかと思いました
0903名無しさん@お腹いっぱい。05/02/28 00:55:08
>>902 :e# とか :sp とか使ってみ
0904名無しさん@お腹いっぱい。05/02/28 01:01:25
画面を横に分割したときに分割のサイズを変えるにはどうするのでしょうか?
縦なら C-w 5+ とかで変えれるんですけど・・
0905名無しさん@お腹いっぱい。05/02/28 01:19:04
:h window-resize
0906名無しさん@お腹いっぱい。05/02/28 02:57:59
>>902
:bp もありかな。
0907名無しさん@お腹いっぱい。05/02/28 03:13:38
>>902
Ctrl-^が楽だよ。前のバッファに移動する。
ちなみにCtrl-W Ctrl-^で分割して移動もできる。
:lsでバッファリスト表示させて、番号とCtrl-^で任意のバッファに移動も可能。
0908名無しさん@Vim%Chalice05/03/01 10:51:26
エラーファイルのように、普通のバッファの現在行をカラー表示できるでしょうか。
0909名無しさん@お腹いっぱい。05/03/01 13:45:53
YES
0910名無しさん@お腹いっぱい。05/03/01 13:47:15
>>908
結構FAQなので過去スレとかに書いてある
0911名無しさん@お腹いっぱい。05/03/01 15:24:27
終了時にターミナルのウィンドウタイトルを「Thanks for flying Vim」に
変えやがるのが気に入らないんだが…。
0912名無しさん@お腹いっぱい。05/03/01 15:39:11
>>911 :set notitle とかどうよ?
0913名無しさん@お腹いっぱい。05/03/01 17:06:12
今更だけど、Yの動作が納得いかない。
Dはd$
Cはc$と動作が同じなのに
Yはyyと動作が同じ
よく使うコマンドだけに
Yからくらべるとy$はキーストロークが一つ多いからなんか困る。

こうなった理由ってなんかあるんですか?
091491105/03/01 17:09:52
>>912
ぐはっ、なぜ気づかなかったのか… orz
0915名無しさん@お腹いっぱい。05/03/01 17:59:42
>>913
nnoremap Y y$
0916名無しさん@お腹いっぱい。05/03/01 18:11:30
input()でcommandのcompleteみたいな事をしたいのですが、
具体的にはカレントバッファの単語を補填したいのですが、可能でしょうか。
inputの履歴もいいのですが。
091791305/03/01 18:38:22
>>915
その、いろんな環境を使わなきゃいけなくて、(viの設定ファイルすらおけないものもある)
基本的にデフォルト状態から変更せずに、使いたいんです。

だから、仕方がないからy$を使っているんですけど、
なぜ、こう、ちゃんとコマンドが考えられていそうなviで、
こういうキーバインドがあるのかと疑問に思ったもので。
0918名無しさん@お腹いっぱい。05/03/01 18:47:36
>>917
> なぜ、こう、ちゃんとコマンドが考えられていそうなviで、
> こういうキーバインドがあるのかと疑問に思ったもので。

むしろviらしい。考えたわけではなくて、いきあたりばったりなかんじ。
0919KoRoN@Vim%Chalice ◆8XALICEsdk 05/03/01 19:13:43
そろそろ次スレの準備を始めたほうが良いかなと思ってテンプレ修正してみました。
  http://www.kaoriya.net/testdir/2ch_vim6_template.html
リンク切れやdat落ちなど一通りチェックして、Vim7に向けて言い回しの修正もしま
した。

「このリンクは止めよう」とか「是非ともこのリンクを入れて」というのがありまし
たら言ってください。
0920名無しさん@Vim%Chalice05/03/03 12:25:40
functionの中で、# の検索コマンドを使用しているのですが、
検索文字があったか、なかったかのステータスを知ることはできますか。
0921KoRoN@Vim%Chalice ◆8XALICEsdk 05/03/03 12:55:06
>>920
実行前後でline('.')とcol('.')を比較すればある程度わかるのではないでしょうか。
でもステータスを知る目的ならば、search()使ったほうが簡単です。カーソルの下の単
語はexpand('<cword>')で取れるので、それを\<\>で囲めばほぼ#と同じ動作になります。
0922名無しさん@Vim%Chalice05/03/03 14:11:23
>>921
ありかとうございます。今回はline、colでトライしてみます。
0923名無しさん@Vim%Chalice05/03/03 16:33:46
eclipceみたいなコードアシストを実現しようと思い、まだ不完全ですが
以下のようなものを作ってみました。
例えば、
    value = FileIO::
まで入力し、<C-]>すると、タグファイルから候補をScratchに出力し、
Scratch上でEnterを押すと、
    value = FileIO::open( char , int)
が補填されるというものです。

:imap ^] <ESC>maByE:call MyTag("<C-R>"")<CR>
"入力中の文字をコピーし、それを引数に関数呼び出し。
function! MyTag(tagstr)
    :let tagfile = &tags
    :let @a = system("grep '^".a:tagstr."' ".tagfile)
    "タグファイルから候補を取得
    :normal ^Wnj
    :set buftype=nofile
    :normal "aP
    "バッファを開き、ペースト
    :v/[[:space:]]f[[:space:]]/d
    :silent % !sort
    "関数のみ抽出しソートする
    :silent %s/.*\/\^[[:space:]]*\([^)]\+)\).*\$\/.*/\1/g
    "タグの中身だけ取り出す
    :map <buffer> <CR> ddggPjdG:%s/[\*&]*[[:space:]]*\w\+[[:space:]]*\([,)]\)/\1/g<CR>:%s/^.*[[:space:]]\([A-z0-9_:]\+\)[[:space:]]*(/\1(/g
<CR>:%s/\([(,]\)[[:space:]]*[^[:space:]]\+[[:space:]]*\([^[:space:]]\+\)[[:space:]]*\([,)]\)/\1 \2 \3/g<CR>0y$^Wc`aBPld$
    "いろいろしてますが、関数名と、引数の型のみに整形して、元の場所に貼り付ける
    "mapを作成。
endfunction

もっと改良するつもりです。
0924名無しさん@お腹いっぱい。05/03/03 16:44:41
いちおう言うけど
:help ins-completion
:help compl-tag
0925名無しさん@Vim%Chalice05/03/03 17:06:24
>>924
そうですね。最初は使用していたのですが。C++やjavaだとクラス名+メソッド名で
うまく補填できなかったので、オリジナルを考えました。
あと、候補が複数あるときに、すべてをリスト表示したかったので
ない知恵絞ってやってみました。
0926名無しさん@Vim%Chalice05/03/03 17:27:05
>>923
http://vim.sourceforge.net/scripts/script.php?script_id=747
コード補完についてはIntellisenseって言うのがポピュラーらしいですね。上のはWin
専用で、スクリプト+αにより実現されています。

スクリプトの書き方について3つ。行頭の「:」はいらないです。正規表現中の
[[:space:]]は\s(逆は\S)と書いた方がスッキリします。mapよりはnoremap、さらにい
えばnnoremapのほうが良いでしょう。

Vim7ではネイティブレベルで、もう少し作りやすくなるような意気込みだったと記憶し
ていますが、現状どうなっているんでしょうか…気になるところです。
0927名無しさん@Vim%Chalice05/03/03 19:07:24
>>926
ご指摘ありがとうございます。早速修正してみます。
ネットでみてみましたけど、すごいですね。
是非と思ってかおりや版の最新版にインストールしてみましたが、
::を入力すると、何かが動いている感じはしますが何も起こらなかったです。
perlもcygwinの5.8.5が入っているし、ん〜もう少し調べてみます。
0928名無しさん@お腹いっぱい。05/03/07 17:17:48
yzisってwxWidgetsでやりゃよかったのに…
Win版がでるのは相当先っぽいな
0929名無しさん@お腹いっぱい。05/03/07 18:26:32
KDEありきだから独立したんでしょ?
0930名無しさん@お腹いっぱい。05/03/09 18:10:20
"1234567890"
     ↑ カーソル
上の状態で、香りや番gvimにて di" で 1234567890が削除されますが、
同じバージョンの普通のvimだど反応無しです。
mapで見ても特に設定はされていないです。
拡張されているのでしょうか?
0931名無しさん@お腹いっぱい。05/03/09 18:16:49
windows の話で恐縮ですが、
右クリック->編集で gvim を起動させるには、
やっぱりレジストリの訳わからんところをいじるしかないんでしょうか。
あるいは
右クリック->[vim で編集]
などのメニューを追加する方法でもいいですけど。
ちなみに香り屋版使ってます。
0932名無しさん@お腹いっぱい。05/03/09 19:23:54
AIXで、+multi_langでvim63をコンパイルしたのですが、メッセージが日本語になりません。
:language の結果は Current language: "Ja_JP Ja_JP Ja_JP Ja_JP Ja_JP Ja_JP"
:echo $LANG の結果は "Ja_JP" です。
0933名無しさん@お腹いっぱい。05/03/09 19:41:26
AIXで メッセージを日本語化て・・
アフォかいな
0934名無しさん@お腹いっぱい。05/03/09 20:01:56
>>931
おれは送る(sendto)が便利だと思う。拡張子ごとに設定しなくてすむし。
http://www.xucker.jpn.org/pc/sendto.html
0935KoRoN@Vim%Chalice ◆8XALICEsdk 05/03/09 20:26:46
>>930
いわゆるテキストオブジェクトはVim7で正式に取り込まれ(てい)ます。香り屋版6.3
にはその実験実装が含まれています。
0936名無しさん@お腹いっぱい。05/03/09 20:32:10
>>932
+gettextは?
0937名無しさん@お腹いっぱい。05/03/09 20:34:49
[HKEY_CLASSES_ROOT\*\shell\vim]の(規定)に「vim で編集」
[HKEY_CLASSES_ROOT\*\shell\vim\command]の(規定)に「"C:\Program
Files\vim-6.3\gvim.exe" "%1"


こんな感じで拡張子関係なしで追加できる。

ディレクトリにも付けたかったら
[HKEY_CLASSES_ROOT\Folder\shell\vim]
で同じようにすればいい
093893705/03/09 20:36:24
>>931
0939名無しさん@お腹いっぱい。05/03/09 23:30:53
この際ファイラーを使いだすのもいいと思うよ。
094093905/03/09 23:31:38
>>931
0941名無しさん@お腹いっぱい。05/03/10 00:59:29
clipboardに長ーい文字列が入ってるのにうっかり
  :<C-R>* 
なんてするとあっちの世界に逝っちまって鬱
094293105/03/10 01:36:12
>>934 >>937 >>939
どうもありがとう。
「送る」が簡単だったんで、まずそれで様子見てみます。
レジストリは仕組みがわかってないと後々混乱の原因になりそうなので、
極力手動ではいじりたくないんですが、
いじらないと不便なところもあって困りますね。
0943名無しさん@お腹いっぱい。05/03/10 03:21:43
vim 6.3.54 にkaoriya パッチを当てた物をSolaris9 IA版でSSH経由でTeraTermから使用しています。
configure オプションは
./configure --with-features=big --enable-multibyte --enable-xim --enable-fontset --with-vim-name=vim6
です。

で、vimを起動すると、TeraTermのタイトルバーが化けます。
vimを起動した時点でまず、"[フオツ鷯 - VIM" となって、終了する時点で”Vim 、サネ、テ、ニ、ッ、、ニ、「、熙ャ、ネ、ヲ” となります。
.vimrcはとりあえずkaoriyaパッチに付いてきた物をそのまま使っています。
タイトルバー文字化けの原因と対策を教えてください。
0944名無しさん@Vim%Chalice05/03/10 11:05:35
>>935
なるほど。ありがとうございます。
0945KoRoN@Vim%Chalice ◆8XALICEsdk 05/03/10 12:37:30
>>943
> タイトルバー文字化けの原因と対策を教えてください。
原因は、Vimの送ったeuc-jpによるタイトル変更命令を、TeraTermがそのままcp932と
して扱ってしまっていることです。対策はTeraTermをeuc-jpに対応させるか、Vimに
タイトルを設定させないか、Vimで日本語メッセージを使わないようにする、という
ところでしょうか。

タイトルを設定させないようにするには以下を参照してください。
:help 'title'
:help 't_ts'
:set t_ts=
0946名無しさん@お腹いっぱい。05/03/10 19:34:28
>>919
hown-mode.vimのサイトは移転らしい。
移転先
http://sworddancer.funkyboy.jp/howm_vim/
0947KoRoN@Vim%Chalice ◆8XALICEsdk 05/03/10 20:33:40
>>946 ありがとうございます。早速修正しました。
レス数が900を超えています。1000を超えると表示できなくなるよ。