■掲示板に戻る■ 1- 101- 201- 301- 401- 501- 601- 701- 最新50

vim6

1 :名無しさん@お腹いっぱい。 :2001/05/25(金) 13:18
vim-6.xに関する専門的スレッドです。

289 :KoRoN :2001/07/25(水) 08:52
>>288
guifontsetはXでの(x)fontset用です。guifontwideはeucがutf-8の時しか使えないよ
うです。微妙におかしいのだけど次のような方法で、マルチバイト文字(漢字)だけ
フォントを変えることができます。

highlight MBChar font=MS_明朝
syntax match mbcharString display "[^ -~]\+"
highlight def link mbcharString MBChar

カーソルが重なった部分や、Visual Selectした部分のフォントが戻ってしまうのは
許してください。Cのコメント部分やらなんやらにかぶると、デフォルトフォントが
使われてしまうんですけど…まぁ、探せば何か設定があると思います。

290 :KoRoN :2001/07/25(水) 13:26
>>289
>guifontwideはeucがutf-8の時しか使えないようです。

ごめんなさい。間違えました。誤:'euc'→正:'enc'です。鬱氏。

291 :288 :2001/07/25(水) 15:51
>>289
回答ありがとう。
う〜む、やっぱ正式にサポートというわけじゃないんですね。

もうひとつ質問。
vim6.0 でソートをしたいんですが、できますか?

292 :KoRoN :2001/07/25(水) 17:35
>>291
:he eval-examples
にある2つ目の例が行ごとのソートです。
visual selectして:Sortでソーティングできます。

293 :288 :2001/07/25(水) 19:13
>>292
うおおお〜、マジありがとう。
コマンドって定義できたのね。ホント毎度助かります。
これからもよろしく(笑)。(できる限り調べるが)

294 :あー :2001/07/25(水) 23:31
全く関係ないアプリなんだが、文字コードが上手くいかないと思ったら
enc と euc を間違ってた。
これ、紛らわしいよね

295 :288 :2001/07/26(木) 01:48
2つほど質問

dictionary に

font-family
background-image

とか記述してあるんだけど
辞書補完しても font , background みたいに - 以降を補完してくれません。
補完できるようにできますか?

ビジュアルブロックモードの時だけ
:set virtualedit=all
にしたいけどできますか?

296 :KoRoN :2001/07/26(木) 08:50
>>295

> 辞書補完しても font , background みたいに - 以降を補完してくれません。
> 補完できるようにできますか?

オプション'iskeyword'に'-'を追加します。
setを使って全部を設定しなおすのも「手」ですが、
letを使えばこんな感じで追加できます。。
:let &iskeyword = &iskeyword . ",-"

> ビジュアルブロックモードの時だけ
> :set virtualedit=all
> にしたいけどできますか?

:help virtualedit
してみましたか?
:set virtualedit=block
が幸せにしてくれるでしょう。

297 :288 :2001/07/26(木) 10:35
>>296

> :help virtualedit
> してみましたか?

かなり恥ずかしい質問してたみたいだね。:h visual-block でしか調べてなかったです。

> オプション'iskeyword'に'-'を追加します。
> setを使って全部を設定しなおすのも「手」ですが、
> letを使えばこんな感じで追加できます。。
> :let &iskeyword = &iskeyword . ",-"

うまくできました。ありがとう。
set iskeyword+=-
でもいいんだよね?

298 :288 :2001/07/26(木) 10:37
↑:set iskeyword+=-
: が抜けてました

299 :KoRoN :2001/07/26(木) 11:50
>>295-298
失礼。試したときに+=,-としてできなかったので。
ただletを使うテクニックは他のオプションに応用できるので、覚えておいて損はないです。

300 :名無しさん@お腹いっぱい。 :2001/07/26(木) 21:35
Lispとかは知らないけど、激しくマイナーな関数型プログラミング言語の
Haskellを、試しにctagsしてみたところ、
何も作られませんでした(涙)
いや、べつにいいんだけど、マイナー言語を触って喜ぶ自分に気づいた…
気づかせてくれてありがとう>ctags

301 :KoRoN :2001/07/26(木) 22:11
うぉ。haskellとはまた渋いところを…いっそこの機会にhaskell用のctags定義を書いてみるというのはどうでしょう?(藁

haskellを知らない人はこちらをどうぞ。
http://haskell.org/

302 :名無しさん@お腹いっぱい。 :2001/07/26(木) 22:17
技術板にhaskellスレがたったよ。
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=996131288

303 :300 :2001/07/26(木) 23:16
>>302
私が建てた説(爆)

304 :名無しさん@お腹いっぱい。 :2001/07/27(金) 06:26
何故突然Haskell話に(藁

305 :名無しさん@お腹いっぱい。 :2001/07/27(金) 18:46
何度もHaskell話で申し訳ない(wara
*.lhsファイル(*.hsとは違ってシェルから動かせるヤツ?)の
syntaxがおかしい、とかエラーを返されたような。
寝ぼけていたので良く覚えていませんが…?
再現性あったら報告しますね。

306 :名無しさん@お腹いっぱい。 :2001/07/28(土) 01:37
vim スクリプトの setline() てすごく便利なんですけど
これと似たような関数で文字列をバッファに挿入する関数ってないですか?

307 :KoRoN :2001/07/28(土) 07:49
>>306
:he append()っていうことでお願いします。
{lnum}に0を指定すれば先頭行に挿入できます。

308 :306 :2001/07/28(土) 11:54
>>307
ありがとう。

もうひとつお願い。
vim script で配列ってどうやって使うの?
eval.txt 見ても "string"[num] で char を返すとかしかなかったし、、、
普通に C みたいに配列を使いたいのだけど

309 :KoRoN :2001/07/28(土) 13:18
>>308
vim scriptに配列を扱う機能はありません。しかしエミュレートすることは可能です。
1つはScratchバッファ(:set bt=nofile)を配列代わりに使う方法。
もう1つは下記に示すようなスクリプトを使う方法です(:help cury-brace-names)。

後者の場合、連想配列も同時にエミュレートできます。
ループで回したい等の場合にはもうちょっと工夫が必要になりますが、
用途によって工夫の仕方が違ってくるので、それは自分でやってみてください。

function! SetArrayValue(name, index, value)
let {a:name}_{a:index} = a:value
return a:value
endfunction

function! GetArrayValue(name, index)
return {a:name}_{a:index}
endfunction

310 :306 :2001/07/28(土) 14:14
>>309

返答ありがとう。ただ、自分のやりたかったことが配列必要かと思ってたけど、
配列使わなくてもできてしまった。ちょっとした文字列の操作に配列のようなものは
使わずに済ませられるみたいですね。

因みに HTML でテーブルを生成するスクリプト書いてました。↓table.vim

311 :306 :2001/07/28(土) 14:16
" 使い方
" セルの中身を1行につき一つずつ書き並べる
" (注:表の左から右、上段から下段に向かって書き並べる)
" (このファイルを :source して):Table X Y で横 X 縦 Y の表が完成する
"
" 例:
"
" A ← ここで :Table 3 2 で
" B
" C
" D ↓ こうなる
" E
" F
"
" <table>
" <tr><td>A<td>B<td>C
" <tr><td>D<td>E<td>F
" </table>
"
function! Maketable( table_x, table_y )
let tx = a:table_x
let ty = a:table_y
if ( tx <= 0 || ty <= 0 )
echo "引数は自然数でなくてはなりません"
return 0
endif
let curline = line( "." )
let line_number = line( "$" )
if( line_number < curline + tx * ty - 1 )
echo "指定が EOF を超えています"
return 0
endif
let ty2 = 0
while( ty != ty2 )
let tx2 = 0
let tdstr = "<tr>"
while( tx != tx2 )
let addtdstr = getline( curline + ty2 * tx + tx2 )
let tdstr = tdstr . "<td>" . addtdstr
let tx2 = tx2 + 1
endwhile
call setline( curline + ty2, tdstr )
let ty2 = ty2 + 1
endwhile
call append( curline - 1, "<table>" )
let curline = line( "." )
call append( curline + ty2 - 1, "</table>" )
if( tx > 1 )
exe "normal! " ty + 1 . "j"
exe "normal! " tx * ty - ty . "dd"
endif
endfunction
command! -nargs=* Table call Maketable(<f-args>)

312 :名無しさん@お腹いっぱい。 :2001/07/28(土) 20:58
migemo使いたいなー。

313 :名無しさん@お腹いっぱい。 :2001/07/29(日) 01:51
gvim6.0 使っているが、正規表現でマルチバイト文字ってどうやって表現すればよいの?

314 :KoRoN :2001/07/29(日) 02:15
一度マルチバイト文字に対応する文字クラス(\j)を作ったんですけど
[^ -~]
で出来てしまうことなので消してしまいました。
Shift-JISの半角カナがあると破綻しますけど…マズイですか?。

誤解のないように解説しておくとハット(^)とハイフン(-)の間には空白文字がひとつ入っています。
16進コードで0x20から0x7Eを表現しているのです。

315 :KoRoN :2001/07/29(日) 02:19
>>313-314
補足です。実行速度の観点からマジメに実装した\jより
[^ -~]のほうが速いことがわかった、ということも取りやめた動機の一つです。

316 :名無しさん@お腹いっぱい。 :2001/07/29(日) 02:24
KoRoN さんありがとうございます。
[^ -~] で全然OKです。意外な解決方法ですね。

317 :KoRoN :2001/07/29(日) 03:09
直接は関係ないけど
「テキストエディタ何使ってる?Ver.2」板が盛り上がってて面白くて眠れないです(笑)
http://salad.2ch.net/test/read.cgi?bbs=software&key=993763803&ls=50

318 :KoRoN :2001/07/29(日) 10:28
>>312
機能としてvim-devにpushしづらいしRubyに依存してしまうのが嫌なので、
Cのライブラリとして実装できないかFF10の片手間に試行錯誤中です。

319 :名無しさん@お腹いっぱい。 :2001/07/29(日) 13:53
>>317
ほんとだ。
ちょっと前まで Emacs, vi の名前を出す人なんて
皆無だと思ってたのに

320 :名無しさん@お腹いっぱい。 :2001/07/29(日) 15:48
う〜む。vim6多いですね。
操作方法さえ修得すればvim6は魅力なのですが、
どうも一般ユーザからすれば「変態奥義」に思われがちらしい(笑)

321 :名無しさん@お腹いっぱい。 :2001/07/29(日) 16:22
まあ、オレに言わせればモーダルな方が自然で合理的だと思うがな。

322 :KoRoN :2001/07/29(日) 16:27
モーダルが自然かどうかはわかりませんが、vimを使いつづけていると
モードなんて意識するよりも速く指が動きませんか?

323 :名無しさん@お腹いっぱい。 :2001/07/29(日) 16:48
行移動が便利です。
コンパイルエラーの箇所へジャンプするときなんて、
vi系使っていて良かったと涙しちゃいます。

324 :名無しさん@お腹いっぱい。 :2001/07/29(日) 22:48
>>322
まったくです。とりあえず、お約束ではありますが、
ファイルを開いて jjj... なんてのは、定番の笑い話ですよね。

一区切りついたときに、気付くと ^[ 押して :w してたりしますね。

325 :名無しさん@お腹いっぱい。 :2001/07/30(月) 01:20
autocmd で [No File] をマッチさせるにはどう記述すればよいのですか?
:new (引数なし)したときだけ buftype=nofile を設定したいのです。

326 :KoRoN :2001/07/30(月) 01:31
:command! -nargs=0 Scratch new | set bt=nofile
というようにコマンドを定義すれば:Scratchで同じことが出来るようになります。
私はこうやってますがこの方法じゃダメでしょうか?。

327 :KoRoN :2001/07/30(月) 01:33
イカんです。下げ癖が付いているので上げておきます。

328 :名無しさん@お腹いっぱい。 :2001/07/30(月) 01:44
>>326
なるほど。再定義ですか。
なるだけ細かく設定したいところだけど仕方ありませんね。
ありがとうございます。

329 :名無しさん@お腹いっぱい。 :2001/07/30(月) 02:02
:cw
で grep などの結果をウィンドウに表示してジャンプするできますが、
これを
:ls
の結果に対してできるコマンドはありますか?

330 :KoRoN :2001/07/30(月) 02:18
>>328
関数を呼び出すことも出来ますからnewを見るだけなら、autocmdでイベントをフックよりもスマートでは無いでしょうか?。
もっとも:help :newをみればどのようにイベントが飛ぶか書いてあるので、それを参考にautocmdでやってみるのも良いのでは?

>>329
:Explorerもしくは:Sexplorerしてみてください。これで望む操作の代用になりませんか?

331 :KoRoN :2001/07/30(月) 02:22
あ、vim6がapでβになった。

332 :329 :2001/07/30(月) 02:38
>>330
確かに :Explore は便利なのですが、
:ls の結果なら必要なファイルのみで出来るので…

まあそれでも
:b {nr}
で十分なのですが。

333 :KoRoN :2001/07/30(月) 03:11
本当にlsを使いたいのならば、要は適切にmakeprgとerrorformatを定義すればよいのでしょう。

334 :名無しさん@お腹いっぱい。 :2001/07/30(月) 04:17
>>333
ってどういうことでしょうか?
プログラミングしていないときでも別ウインドウに :ls の結果を表示して
編集しているファイルをいったりきたりしたいのですが、どうも無理のような気が
してきたので、自分でそういうスクリプトを書いてみようかと思います。

335 :334 :2001/07/30(月) 06:57
と思ったけど、$VIMRUNTIME/plugin/explore.vim を見て挫折した。

336 :KoRoN :2001/07/30(月) 10:51
>>335
なるほどなるほど。apのリリース作業で疲れてて:lsだったことに気が付きませんでした。ごめんなさい。

いちばん簡単なのはGUIを使って「バッファ」のメニューからtear off(ハサミの項目)を選択すること
ではないでしょうか。こうすると:lsの結果がボタンになってますから…でもこれだとキーボードからの操作が…。
確かにバッファリストウィンドウはあっても良いかもしれませんね。

337 :334 :2001/07/30(月) 12:41
>>336
おぉ、menu 消してたので知らなかったよ。けっこう便利だね。

338 :名無しさん@お腹いっぱい。 :2001/07/30(月) 13:16
たまたま気づいたんだけど WantToDo_j.txt の中の書き方のように、
先頭を -<スペース> で始めた文章は囲んで gq やっても
綺麗にぶらさがって(?)くれますね。

'-' のほかに '*' でも同様だったけど、
この設定ってどこでやってるんでしょ?

339 :KoRoN :2001/07/30(月) 13:39
format周りは複雑で把握できていないところがあるのですが、
gqは$VIMRUNTIME/plugin/format.vimによって日本語禁則処理有りのものに置き換えられています。
確かformat.vimでは'formatoptions'の値を見て、
極力オリジナルのgqと同様の動作をするように作られています。
よってformatoptionsを研究すれば何かわかるかもしれません。

340 :名無しさん@お腹いっぱい。 :2001/07/30(月) 13:55
すごく初歩的なことだけど、
vim スクリプトってコマンドの後の変数とか文字列とか何が展開されるかわかりにくいよね。

set ○○=××
の××は"××"て書いたら " がコメントとみなされて空文字列が入るのに
let &○○="××"は普通に通ったりとか
set とか so の後は環境変数やオプション変数(?)は展開されるのに let でつくられた変数は展開されないとか。

多分本当は始めから
set ○○="××" とか source "△△"
っていう書き方をして統一すればよかったんだろうけど
設定ファイルに互換性を持たせるためにそういうわけにもいかずに set とかは自動的にダブルクォートで囲まれたような
挙動をすることにしたんだろうね。
解釈あってる?

#しかし α とか β とか思えないほど安定してるな。一回も落ちたことないよ。
#ところで ap で printersettings が printeroptions に変わったのに syntax/vim.vim は変更されていない。

341 :KoRoN :2001/07/30(月) 14:31
>>340
ソースにあたってないので正確ではないですが、おそらく違うでしょう。
スクリプトでオプションに設定する値を動的に生成して、
実際に設定したいという欲求があれば、それは:executeを使えばできるわけです。
:execute "set " . name . "=".value
こんな感じで。

でもこの表記は面倒な上にわかりにくいので、せっかく変数と代入:letという仕組みがあるのだから、
そいつにオプションを設定できる機能を持たせよう、というということではないでしょうか。
つまり「:let &name = value」は上で示すexecuteコマンドのエイリアスだと考えるのが正しいでしょう。
# &によるオプションの値の参照は説明できていませんけど勘弁してください。

vimを、letを含むスクリプトのevalベースで捉えることができれば確かに美しくて理解しやすくなりますが、
それではvimがviであるという本質を見誤っています。vimはevalが無くても機能するのですから。

# その変更を行った人物とsyntax/vim.vimのメンテナーが別人物なのでしょうね。どうしたってラグがでますよ。

342 :340 :2001/07/30(月) 17:19
># &によるオプションの値の参照は説明できていませんけど勘弁してください。
これは僕の勘違いです。
set ○○=&×× という書き方はできませんでした。

なるほど、あくまでも eval は追加機能だということですね。
これで納得できました。

でも個人的には、どうせならスクリプトを解釈する機能はコンパイル時に外せないようにして
すっきりした書き方にしてしまってもよかったんじゃないかなという気もしますが。

343 :KoRoN :2001/07/30(月) 17:57
>>342
> すっきりした書き方にしてしまってもよかったんじゃないかなという気もしますが。

私もそういうふうに考えたことがあったのですが、
それを極論していくとLispをベースにvimを再構築することが、
一番すっきりすることになってしまったんですよ。
ってそれemacsやん!、というわけでそれ以降考えるのは止めました。
この適度なゴタゴタ感、つぎはぎな感じこそがvimがvimたる所以なのではないでしょうか。

344 :名無しさん@お腹いっぱい。 :2001/07/30(月) 23:16
:autocmd や :map や :command
などの結果を別ウインドウで表示ってできませんか?
ただ、ドバーっと流れるだけじゃ不便です。

345 :KoRoN :2001/07/31(火) 00:11
なんか出来そうで出来ませんねぇ…autocmdやgroupで縛ったりくらいはできますけど。
それとも、何か見落としていることがあるのかしら?。

346 :名無しさん@お腹いっぱい。 :2001/07/31(火) 16:44
gVim-6.0ap(Win)にしてみたのですが、
gvimディレクトリ内のvimを読んでくれない(?)のか、
vimrc内でcmdheight=1としてもコマンドウィンドウの高さが2なんですよ。
gvim立ち上げて:set cmdheight=1を入力すると高さが1になるんですけどね。
2だと少々大きく感じるので、1にしたいですなぁ

347 :KoRoN :2001/07/31(火) 17:26
>>346
もうしわけないです。$VIM/gvimrcを見てください。
そっちでもcmdheight=2を設定してしまっているのです。
gvimrcにあるほうは削除してください。
gvimrcからvimrcに設定を移動したのですが、消すのを忘れてました。

個人用の設定は$HOME/_vimrcか$VIM/_vimrcに書くのをオススメします。
そうしていれば今回のようなことはなかったハズです。

348 :名無しさん@お腹いっぱい。 :2001/07/31(火) 17:35
それがうまく効かないんですよね。
$VIM/gvimrcに set cmdheight=2が。
で、$HOME/_vimrcに
set cmdheight=1 と書いたのですが、これも変化無し…

間違って前バージョンに上書きしたのがまずかったのかな?

349 :KoRoN :2001/07/31(火) 17:43
>>346-347
うそです。原因はちょっとだけ違っていました。

対処法は$VIM/_gvimrcの最後にcmdheightの設定を追加するか、
個人設定ファイル_gvimrcで行なってください。

350 :名無しさん@お腹いっぱい。 :2001/07/31(火) 18:27
>>343
あ、同じように考えたことがありました。
クリーンに設計しなおそうと思うと emacs になってしまうん
ですよね。
以後、vi は kiss であってこそと nvi にとどめ
たまに emacs 使います。
ただ、左脳的にきれいな emacs が必ずしも使いやすさと直結するかと
思うとまた懐疑的なのが不思議な所であったりします。

351 :名無しさん@お腹いっぱい。 :2001/07/31(火) 18:47
OKです。直りました。
やっぱりKoRoNさん、vim6本を執筆しなきゃ。
出版されたら絶対買っちゃうから(wara

352 :KoRoN :2001/07/31(火) 19:01
では出してくれる出版社募集中ということで(藁

353 :KoRoN :2001/07/31(火) 19:01
では出してくれる出版社募集中ということで(藁

354 :emacser :2001/07/31(火) 19:03
>>343
いーなー、LISP な vi。

355 :名無しさん@お腹いっぱい。 :2001/07/31(火) 19:09
オライリーでいいんじゃない?
でもVi本が7月に出る予定だったしな。

356 :KoRoN :2001/07/31(火) 19:18
>>343,>>350,>>353
実はこの話には後日談があります。実際にやってみようかと思ってしまったんです。
ベースは当時のめりこんでいたScheme処理系から自作ということを考えちゃいました。
でも、既存のものを再発明しても無駄ですからターゲットをemacs-lispに変更しリサーチに入ったのです。
viper-modeのimproved版でも作るかね〜ってな勢いです。

が…Emacsの厚い本も買ったのですが3日でプロジェクトはクローズしました。
指がviを愛してしまっているのでまともにMeadowを扱うことができませんでした。
# 昔はもうちょっとなんとかなったものですが。
どうせ続けていたってvimに及ばないものになっていたでしょうけどね。

357 :emacser :2001/07/31(火) 19:20
>>356
期待 age (藁

358 :関係ないが :2001/07/31(火) 22:44
>>355
オライリーって訳本のイメージしかないんだけど
原著者が日本人の奴ってあるん?

359 :名無しさん@お腹いっぱい。 :2001/07/31(火) 23:15
>>358
http://www.oreilly.co.jp/BOOK/jlinux/
http://www.oreilly.co.jp/BOOK/rubydkr/
など。

360 :名無しさん@お腹いっぱい。 :2001/08/01(水) 09:33
http://www.ruby-lang.org

361 :名無しさん@お腹いっぱい。 :2001/08/01(水) 09:37
vim-6.0ap

362 :名無しさん@お腹いっぱい。 :2001/08/02(木) 04:51
vim6ap 恐らくバグ

'statusline' で %*{number} … %*
で囲ったところが
hi User{number}
でのハイライト表示が効かなくなっている。

363 :KoRoN :2001/08/02(木) 07:59
>>362
どのOSのどのバージョン(ターミナルかGUIか)なども書いてくれると嬉しいです。
配布しているgvim6.0apのWinとMac版でhelp 'statusline'にある例を試した限りではちゃんと働いているようです。
  :set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b'
  :hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red gui=inverse,bold guifg=red
あと実際にうまく行かなかった設定例も書いてくれるとありがたいです。

364 :362 :2001/08/02(木) 11:17
スマソ。
勘違いでした。
colorscheme で hi clear されていた。

365 :362 :2001/08/02(木) 16:43
どうも hi clear の挙動が変わったみたいやね。

366 :KoRoN :2001/08/02(木) 17:18
むしろ今までちょっとおかしなところがあった、と考えたほうが良いかもしれません。

367 :名無しさん@お腹いっぱい。 :2001/08/07(火) 10:23
まげ

368 :名無しさん@お腹いっぱい。 :2001/08/07(火) 22:42
aq あげ

369 :名無しさん@お腹いっぱい。 :2001/08/08(水) 10:18
どこかに Vim5 や 6 の使い方、設定等を詳しく解説している webpage
はありませんか? Syntax highlighting や拡張子別に設定を変更する
方法とか、C tags までも包含しているとありがたいです。

要はこのスレや vi スレを体系的にまとめてあるようなページを
探しているのですが、どうでしょう?

370 :344 :2001/08/09(木) 21:36
遅ればせながら自己解決。

> :autocmd や :map や :command
> などの結果を別ウインドウで表示ってできませんか?
> ただ、ドバーっと流れるだけじゃ不便です。

http://vim.sourceforge.net/
の tip#95 より

:redir @a
:au
:redir END

で @a に :au の結果が入る
:au の代わりに :silent au
だとレジスタにしか出力されない。

371 :名無しさん@お腹いっぱい。 :2001/08/10(金) 02:17
全角空白を明示的に示すにはどうすればよいですか?

372 :emacsのちvim :2001/08/10(金) 04:12
>>371
listcharsみたいなのは無いのではないかと。
常に明示的に表示しておきたいなら却下だけど、
簡単な方法として、hlsearchして'/'や'?'で探すってのはどう?
これで気に入らないなら、scriptかsyntax highlight
ってところに落ち着くかと。

373 :371 :2001/08/10(金) 09:30
> これで気に入らないなら、scriptかsyntax highlight
そう思って、
syntax match DoubleSpace " "
hi DoubleSpace guifg=fg guibg=#eeeeee
っていう記述を _gvimrc に書いたんだけど
どうもこれって最初に開いたバッファにしか適用されないみたい。
どうすればよいの?

374 :emacsのちvim :2001/08/10(金) 18:50
>>371=>>373
autocmdを使って、ファイルの読み込みや名無しバッファ作成のタイミングで、
目的のsyntaxをカレントバッファに設定しましょう。

function! ActivateDSindicator()
  syntax match DoubleSpace " "
  hi DoubleSpace guifg=fg guibg=#eeeeee
endf
augroup invisible
  autocmd! invisible
  autocmd BufNewFile,BufRead *.txt call ActivateDSindicator()
augroup END

詳しくは、:he :autocmd, :he :syntax, :he mysyntaxfile,
$VIMRUNTIME/syntax/syntax.vimなどを参照のこと。

375 :371 :2001/08/10(金) 23:43
>>374
ありがとう。が、もうひとつ問題が…

syntax match DoubleSpace " " containedin=ALL
がなぜか
hi SpecialKey term=bold ctermfg=DarkBlue gui=bold guifg=#4400ff guibg=#f4f4f8 " FileType=vim
という行で全角空白が2個並んでいるとき2個目以降しか highlight 表示されない。
FileType が vim じゃないときや、行頭の hi を変更すると正しく highlight されるのだが…

376 :KoRoN :2001/08/10(金) 23:56
>>375
今ひとつ意図が理解できていないのですがこうしたらどうなりますか?。
syntax match DoubleSpace " \+" containedin=ALL

377 :371 :2001/08/11(土) 00:13
>>376
\+ つけてもダメみたいです。

要は何がしたいのかというと、全角空白を Comment の中にあろうが
Constant の中にあろうが問答無用で hightlight 表示( 半角空白と区別 )したいということです。

でなんとか syntax.txt を読んで
syntax match DoubleSpace " " containedin=ALL
すればよさげだぞ、ということが分かったのですが、( なぜか keyword ではうまくいかず )
filetype=vim の時、行頭に hi やら s やらあるときに正しく highlight されなくて困っているというわけです。

例えば、
hi SpecialKey te   rm=bold ctermfg=DarkBlue gui=bold guifg=#4400ff guibg=#f4f4f8 " FileType=vim
の3つの全角空白の内後ろ2つしか highlight されないでいる。

378 :名前いれてちょ。。。 :2001/08/11(土) 02:45
windowの画面分割で、Ctrl-W s だと上下に半分ずつにしかならない。
それだとソースコードを追っかけるときとかちょっとつらいから、
出きれば左右に分割できると嬉しいんだけど。

webで散々調べたけど、上手く hitせず。
スクリーンショットでは出来るみたいなんだけどなぁ。

379 :emacsのちvim :2001/08/11(土) 03:14
>>378
vim6使ってC-w v。
なぜ、まず:helpしないのかが理解できん。

380 :emacsのちvim :2001/08/11(土) 05:10
>>371
同様の現象が、6.0apjで確認できました。
teにつづく全角スペースまでが、teで始まるキーワード(hiの引数)
の一部として、DoubleSpaceより優先してマッチングしている感じです。
試しに、行頭に"を挿入してコメントとしたところ、3つ分のDoubleSpaceが
highlightされます。
ちなみに、hi、highlightのいずれでも上記症状に変化は見られませんでした。
もう少しvim.vimあたりを見てみます。

381 :KoRoN :2001/08/11(土) 06:48
>>378

highlightは詳しくないのでなんともいえませんが、随分昔にMLに流れた次のようなスクリプトが役に立つでしょう。
適当な名前で保存して:soしてみて下さい。

function! s:HiDiHi()
let l = line(".")
let c = col(".")
let id = synID(l, c, 1)
let attr_hi = synIDattr((id), "name")
let attr_trans = synIDattr(synID(l, c, 0), "name")
let attr_lo = synIDattr(synIDtrans(id), "name")
echo "hi<" . attr_hi . '> trans<' . attr_trans . "> lo<" . attr_lo . ">"
endfunction

nnoremap <silent> <F6> :call <SID>HiDiHi()<CR>

382 :KoRoN :2001/08/11(土) 07:30
>>378,>>380-381

:set isident=@,48-57,_
と設定してみてください。正しい対処法かはまったくわかりません。
'isident'がデフォルトの"@,48-57,_,128-167,224-235"だと、
vimHiGroupが"\i\+"に設定されていて全角空白の1バイト目0x81(==129)が\iにマッチします。
2バイト目は0x40(==64=='@')であるので\iにはマッチしません。
つまりsyntax解釈上、全角空白が分断されてしまったため起こった現象でしょう。

'isident'にMBが含まれる必要はないと思いますけど、なんかスッキリしてない状態であることは認めます。

383 :KoRoN :2001/08/11(土) 07:31
# ううう。さげ癖がついている
age

384 :371 :2001/08/11(土) 11:10
>>382
isident,iskeyword を "@,48-57,_" にしたら、hi のあとでも正しく highlight されるようになりましたが、
s のあとや、let の後ろでは以前として表示が思ったようにされません。
( let については2つ目以降どころかまったく highlight されず )

やっぱり素直に、/  して、:set hls の方がよいですかね?

385 :KoRoN :2001/08/11(土) 12:56
>>384
letは\kの問題です。全角文字は無条件でiskeyword(/\k)に引っかかるという
素晴らしい仕様のおかげですね。これについては修正パッチ作りました。
sは現在調査中で、[^a-z...]が全角にマッチしてしまうことが原因らしいけど…
ハッキリとはわかっていません。\z(\)との絡みもあるかと調査中。

386 :KoRoN :2001/08/11(土) 14:14
>>385
sについてわかりましたので補足。syn regionの指定にrs=s+1が付いてます。
これは検索の//{offset}と同じ意味ですが、syntaxのほうはMB非対応になっていました。
こいつが結構、修正に一苦労するかもしれません。

387 :名前いれてちょ。。。 :2001/08/11(土) 15:01
>>379
thanx!

もちろん :help したYO!
けど、いまいンストールされてるのが vim5.x だったと思った。
ひょっとしたら vim6 からじゃないとダメ?
まぁいいや。夏休みが終わったら確かめてみよう。

388 :KoRoN :2001/08/11(土) 17:20
>>387
横分割はvim6の機能です。っていうかココ、vim6のスレだし…


次100 最新50 (10:00PM - 03:00AM の間一気に全部は読めません)
名前: E-mail (省略可) :

read.cgi ver5.26+ (01/10/21-)