1 名前:名無しさん@お腹いっぱい。 [01/12/17 12:15] みんなでスクリプトを覚えよう
545 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/05 01:18] カレント行をゲット。 カーソルが何桁目がをゲット。 カーソル位置より前と後にわけて、 前の部分の最後の"をbとする。 後の部分の最初の"をeとする。 長さはe-b-1。 複数行にわたってると無理だし、\のエスケープもわからない。 あんまり信用しないでね。
546 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/05 20:51] 僕は、カーソルの下の文字列を取得する関数を書いて let len = strlen(UnderCursorString()) こんな感じのほうが好みかな。
547 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 17:41] " の正規表現は \ を考慮して \(\\\@<!\(\\\\\)*\\\)\@<!" でどうか
548 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 21:04] 二つほどお聞きしたいのですが 行頭からカーソル位置を含む位置までの文字列を取得したいとき strpart(getline('.'),0,col('.')) としてみたところカーソル位置が日本語だとうまくいきません。 指定した行を削除したいのですが exec lnum.'d _' としたのですがfoldingされている行だとfoldingごと纏めて消えてしまいます。 何か方法はありませんか?
549 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 21:52] function! DelLine(num) if &foldenable != 0 set nofoldenable exec a:num.'d _' set foldenable else exec a:num.'d _' endif endfunction 縺薙s縺ェ諢溘§シ
550 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 21:54] 化けた・・・ 最後の行は無視してください
551 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 22:12] function! GetPart() let lnum = line('.') let cnum = col('.') let line = getline(lnum) let cur_char = matchstr(line, '.', cnum - 1) let part_len = cnum + strlen(cur_char) - 1 return strpart(line, 0, part_len) " 一行で書くと "return strpart(getline('.'),0,col('.')+strlen(matchstr(getline('.'),'.',col('.')-1)) - 1) endfunction これでどうよ
552 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 22:51] >>547 解説プリーズ
553 名前:548 mailto:sage [04/06/07 00:12] >>549 >>551 ナルホド、参考になりました。 foldenableなんて知らなかったし matchstrをそんな風に利用するとは思いつきませんでした。 まだまだ、修行不足ですな、精進します。
554 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/06/07 00:21] >>547 \によるエスケープを考慮した""文字列にマッチする正規表現は慣用句でして /"\(\\.\|[^"]\)*" と書くことが多いです。これは、クォーテーションで始まってクォーテーションで終わ る文字列のうち、エスケープされた文字「\\.」、もしくはクォーテーション以外の文 字「[^"]」のみで構成されるもの、という意味になります。 >>548 echo matchstr(getline('.'), '^.*\%'.col('.').'c.') こんな風にひとつのmatchstr()で行うのが速度面から有利です。わかりやすさであれば 551さんの方法が優れています。
555 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/07 01:50] つまりこういうことか! "エスケープバージョン function! UnderCursorStringLength() let line = getline(".") let cur = col(".")-1 let l = strlen(line) let backward = strpart(line, 0, cur) let b = matchend(backward, '.*\\\@<!"') let str = matchstr(line, '\(\\.\|[^"]\)*', b) echo strlen(str) endfunction
556 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/07 02:09] ちなみに >>547 の意味は直前に奇数個の \ が存在しない "
557 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/07 11:23] >>555 こうだね ! let b = matchend(backward, '.*\(\\\@<!\(\\\\\)*\\\)\@<!"')
558 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/06/07 11:49] >>555 カーソルの下にある特定の正規表現にマッチする文字列を取得する方法はChaliceに含 まれるplugin/alice.vimに含まれるAL_matchstr_undercursor()が参考になります。 > function! AL_matchstr_undercursor(mx) > let column = col('.') > let mx = '\m\%<'.(column + 1).'c'.a:mx.'\%>'.column.'c' > return matchstr(getline('.'), mx) > endfunction この/%cを使う方法であれば、正規表現を前半と後半に分けたためにわかりにくくなっ てしまう、ということを回避できます。 let quoted = AL_matchstr_undercursor('"\(\\.\|[^"]\)*"')
559 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/21 22:27] 質問があります。 VIM上でファイル検索>>リスト出力>>選択>>編集 が行えるようなスクリプトなどはあるでしょうか? winmanager.vim や explorer.vim では subディレクトリまで 検索してくれないので困ってます。タスケテ
560 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 04:54] よく分かりませんが > VIM上でファイル検索>>リスト出力 :new | read !find ./ -name "*.txt" or :new | read !dir /s /b "*.txt" > 選択 ご自由に > 編集 :execute 'edit! ' . getline('.')
561 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 06:26] >>560 ありがとうございます。 winmanagerみたいなToggle型(?)で実装してるスクリプトがあればうれしかったんですが、 ちょっとがんばって組んでみまふ ノシ
562 名前:561 mailto:sage [04/06/22 10:20] スクリプト書こうと思ってましたが、mapで済ませてしまいました。 map <F5> :let obufclnline = getline('.')^M^W^W:execute 'e ' . obufclnline^M :new | read !dir /s/b *.txt 等でリストを作成し、2つ以上ウィンドウがあることが 前提の仕様にしてます(´Д⊂グスン (本心は"ウィンドウが無かったら作る"というのをやりたかった) e! にしてないので、安全です^^ もっと良い方法ってありますかね? 微妙にスレ違いですか…そうでつか or2゜
563 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 10:46] >>562 ファイル名の上で <C-]> もしくは <C-W><C-]>
564 名前:561 mailto:SAGD [04/06/22 17:54] >>563 ありがとうございます。・゜・(ノ∀`)・゜・。 そんな簡単な方法があったとは… vimは最近始めたのですが、viを長年つかっていた身としてなんか 妙にクヤシクなったので、スクリプト書いてみました。 処女作ですが、みなさんの忌憚の無いつっこみおまちしてます。 command! -nargs=1 Findmode :call s:StartFindMode(<f-args>) function! Findg() let obufclnline = getline('.') if filereadable(obufclnline) normal ^W^W execute 'e ' . obufclnline endif endfunction function! Finding(...) let startcmd = "read !dir /s/b ".a:1 normal 1GdG silent execute startcmd endfunction function! s:FindWindow() nnoremap <buffer> <CR> :call Findg()^M nnoremap <buffer> <ESC> :bd!^M command! -buffer -nargs=1 Finding :silent call Finding(<f-args>) endfunction function! s:StartFindMode(...) let startcmd = "10new __findlist__ | read !dir /s/b ".a:1 silent execute startcmd endfunction au BufEnter __findlist__ call s:FindWindow()
565 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 18:02] >>564 :help gf :help :cfile :help :copen :help errorformat
566 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 22:56] >>565 無駄のない簡潔なメッセージだが何を言いたいのか分からない。 >>564 command! -nargs=1 Findmode :call s:StartFindMode(<f-args>) function! Findg() let obufclnline = getline('.') if filereadable(obufclnline) " ポータビリティーのため execute 'wincmd w' execute 'e ' . obufclnline endif endfunction function! Finding(...) let startcmd = "read !dir /s/b ".a:1 " 好み。俺はこの方が分かりやすい。 execute '1,$delete _' silent execute startcmd endfunction
567 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 22:59] 続き function! s:FindWindow() " ポータビリティーのため。^Mより<CR>がいい。 nnoremap <buffer> <CR> :call Findg()<CR> nnoremap <buffer> <ESC> :bd<CR> command! -buffer -nargs=1 Finding :silent call Finding(<f-args>) endfunction function! s:StartFindMode(...) let startcmd = "10new __findlist__ | read !dir /s/b ".a:1 silent execute startcmd " 好み normal gg " 一時的なバッファにする。よく知らない。|special-buffers| set buftype=nowrite set bufhidden=delete set noswapfile endfunction au BufEnter __findlist__ call s:FindWindow() 感想:使ってみたら意外と便利だった。
568 名前:561 mailto:sage [04/06/22 23:53] >>564 errorformatにならって、findファイルリストをつくって cfileで読み込んで、copenで開いて gfで開けってことかな? いろいろためしてみたけど、いまいちうまくいきません(´Д⊂グスン つかえたら、copenは便利そうですね。 >>566 丁寧にありがとうございます^^ あと感想ありです。誉めてもらったヽ(´ー`)ノ なるほど wincmdかぁ、ほんとは__findlist__があるか判定して、 バッファ名でやりたかったんですが、よくわかりませんでした(´ヘ`;) setはカレントバッファにしか影響をおよぼさないんですね? 勉強になります。 あと、modifiableとかをオフにしておいたほうがいいのかな windowsでしかうごきませんが、使ってみて要望とかありましたらお願いします。 できるかぎり、、がんばってみます(;・∀・)
569 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/23 16:25] >>568 バッファがあるかどうかはbufexists()とかbufloaded()とかかな? 余裕があるならプラグインの形にまとめてどこかにうpしとくと誰かが喜ぶと思います。 なんならvim.orgに…。 あとこんぐらいしか思いつかないが ファイル検索コマンドを変更可能に。これだけでマルチプラットフォーム。 ウインドウを縦分割に変更可能に。 ファイルを開く時に新しいウインドウを作ったり作らなかったり。 あとこんなの nnoremap <buffer> <Space> :call Findg()<CR>:execute 'wincmd W'<CR>j nnoremap <buffer> <S-CR> :call Findg()<CR>:execute 'wincmd W'<CR>
570 名前:561 mailto:sage [04/06/26 10:24] >>568 プラグインっぽくしてみました。 使用方法は、ファイルのヘッダに簡単に記載してます。 ttp://rupan.zive.net/~kain/cgi-bin/up/src/up1193.zip
571 名前:561 mailto:sage [04/06/26 10:26] s/568/569/ まちがえました(´Д⊂グスン
572 名前:名無しさん@お腹いっぱい。 [04/06/26 14:03] Findmode便利 まったりだけど良スレ
573 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/01 14:05] " modelineの拡張 if !exists('g:MX_mx') let g:MX_mx = 'vimex:\(.*\)' endif command! ModeLineEx :call s:DoModeLineEx() function! s:DoModeLineEx() let mx = g:MX_mx if exists('b:MX_mx') let mx = b:MX_mx endif let lnum = line('.') let cnum = col('.') if search(mx, 'w') > 0 normal G$ let flags = 'w' let fname = tempname() execute 'redir > ' . fname while search(mx, flags) > 0 let l = matchstr(getline('.'), mx) let cmd = substitute(l, mx, '\1', '') silent! echo cmd let flags = 'W' endwhile redir END
574 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/01 14:07] if filereadable(fname) execute 'source ' . fname call delete(fname) endif call cursor(lnum, cnum) endif endfunction " 自動化するならセキュリティー的にはこんな処置でいいと思う au BufReadPost * if getline(1) =~ 'vimpass:MYPASSWORD' | \ silent! ModeLineEx | \ endif " と、書いてみたが有効な使い道が思いつかない...orz
575 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/01 14:17] ちなみに使い方はファイルのどこでもいいので vimex: function! SayHello() vimex: return 'Hello' vimex: endfunction vimex: let test = SayHello() このようにスクリプトを書いておくと、その部分だけ抜き出して実行します。 フォーマットは g:MX_mx か b:MX_mx を書き変えて変更します。
576 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/20 17:19] 2つ以上の name spaces を同時に指定するのはできないんですよね b:s:hoge とか bs:hoge みたいなかんじで
577 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/08/20 18:37] >>576 たしか、SIDをmapargを使って取得して、curly-braces-namesで擬似的にb:s:を実現す ることは可能です。 map <SID>xx <SID>xx let s:sid = substitute(maparg('<SID>xx'), 'xx$', '', '') unmap <SID>xx let b:somename_{s:sid} = "buffer script local variable"
578 名前:576 mailto:sage [04/08/21 06:48] >>577 そんな方法が。参考になりました。
579 名前:名無しさん@お腹いっぱい。 [04/10/19 12:36:56] "レジスタに値が入った時点でなんだかの動作を起こすことって可能でしょうか? 具体的にはレジスタの履歴をyyした時点で保存したいのですが。
580 名前:名無しさん@お腹いっぱい。 mailto:sage [04/10/20 00:22:22] >>579 :help event 見てもそれらしきイベントは無いねぇ map yy とかするしか無いんじゃない? ちなみにviminfoファイルにレジスタ履歴その他を保存しておくことができるけどね どういうものを残すかはオプションで指定できる :help 'viminfo'
581 名前:579 [04/10/21 12:05:35] >>580 返信ありがとうございます。 やっぱりひとつひとつキーマップしかないのですかねぇ。 viminfoでの履歴は、a-z 0-9なんかのレジスタしか保存できませんよね? かたっぱしからレジスタにつっこんだ履歴を保存したので…。
582 名前:名無しさん@お腹いっぱい。 mailto:sage [04/10/22 00:45:29] スクリプトで、他のファイルに退避して、 使うときに読み込むのはどうかな?
583 名前:名無しさん@お腹いっぱい。 [05/01/03 05:39:50] Vimって:wを連続で行ったときもバックアップを作ってくれちゃうから、 一定時間経過したときのみバックアップするようなスクリプトを 考えてみた。つっこみ頼みます。 " 指定したファイルのバックアップが一定時間以上古ければバックアップを作り直す。 " 例: call MyBackup("%") " この値以上古ければ更新(単位:秒) let g:my_backup_interval=1800 " バックアップファイルの拡張子 let g:my_backup_ext=".bak" " バックアップを作るディレクトリ let g:my_backup_dir="~/.bak" function! MyBackup(orgfile) let fn = substitute(expand(a:orgfile), ".*/", "", "") let bakfile = glob(g:my_backup_dir) . "/" . fn . g:my_backup_ext let baktime=getftime(bakfile) if (localtime() - baktime) > g:my_backup_interval exe "w! " . bakfile echo "Backup: " . bakfile endif endfunction
584 名前:名無しさん@お腹いっぱい。 [05/01/04 01:44:42] 時間よりも内容の変化で区切ってバックアップしたほうがいいと思う。 バックアップというよりバージョン管理か。 転ばぬ先の杖としてならそういう仕組もありかもね。 スクリプトは特に問題ないような気がします。 #autocmdを使って #BufWritePre: 時間が経っていなければset nobackup #BufWritePost: &backupを復元 #って手もあるけど、別口で保存しといたほうが安心か。
585 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/04 03:29:23] 保存するごとに、バージョン番号を付けたコピーを作成する スクリプトがあったよ。確か。 ふと、バックアップディレクトリを覗くと、そこにはっ、、、!!
586 名前:名無しさん@お腹いっぱい。 [05/01/15 15:47:37] vimonline.vim に current version の 表示を加えてみました <br> <br> begin 644 vimonli ne.diff <br> M+2TM('9I;6]N;&EN92YV:6TN;W)I9PE4:'4@2F%N(#$S(#`T.C0V.C,W(#(P <br> M,#4**RLK(' 9I;6]N;&EN92YV:6T)4V%T($IA;B`Q-2`Q,SHU.#HQ-B`R,#`U <br> M"D!`("TR-2PV("LR-2PW($!`"B`@('-I;& amp;5N="$@)7,O+R]G"B`@('-I;&5N <br> M="$@)6<O/'-P86X@8VQA<W,](FYE=W-D871E(B?L+UY<& lt;RH?"]P/B0O:F]I <br> M;@H@("!S:6QE;G0A("5G+SQT9"!C;&%S<STB;F5W<V1A=&4B+RPO/%PO =&0^ <br> M)"]J;VEN"BL@('-I;&5N="$@)7,O7EPH7&1<9"I<+EQD7&0J7"Y<9%QD*EP I <br> M)"??:#$^5FEM(%PQ(&ES('1H92!C=7)R96YT('9E<G-I;VX?"]H,3XO"B`@ <br> M(&-A;& ;P@04Q?97AE8W5T92@G)7,O+BI<*$YE=W-<*3Q<+W-P86X^+BHO7U]? <br> M)RYG.FAE861L:6YE36%R:T-A =&5G;W)Y+B=<,2]I)RD*("`@8V%L;"!!3%]E <br> M>&5C=71E*"<E<R?N*EPH4F5C96YT(%-C <FEP="!5<&1A=&5S7"D?"]S<&%N <br> M/BXJ+U]?7R<N9SIH96%D;&EN94UA< FM#871E9V]R>2XG7#$O:2<I"B`@(&-A <br> M;&P@04Q?97AE8W5T92@G)7,O+BI<*%)E8V5N="!4 :7`@061D:71I;VYS7"D? <br> M7"]S<&%N/BXJ+U]?7R<N9SIH96%D;&EN94UA<FM#871E9V]R> ;2XG7#$O:2<I <br> !"@`` <br> ` <br> end<br><br>
587 名前:& ◆h9Bn.Lr5Ro [05/01/15 15:54:13] 失敗しました。>>586 begin 644 vimonline.diff M+2TM('9I;6]N;&EN92YV:6TN;W)I9PE4:'4@2F%N(#$S(#`T.C0V.C,W(#(P M,#4**RLK('9I;6]N;&EN92YV:6T)4V%T($IA;B`Q-2`Q,SHU.#HQ-B`R,#`U M"D!`("TR-2PV("LR-2PW($!`"B`@('-I;&5N="$@)7,O+R]G"B`@('-I;&5N M="$@)6<O/'-P86X@8VQA<W,](FYE=W-D871E(B?L+UY<<RH?"]P/B0O:F]I M;@H@("!S:6QE;G0A("5G+SQT9"!C;&%S<STB;F5W<V1A=&4B+RPO/%PO=&0^ M)"]J;VEN"BL@('-I;&5N="$@)7,O7EPH7&1<9"I<+EQD7&0J7"Y<9%QD*EPI M)"??:#$^5FEM(%PQ(&ES('1H92!C=7)R96YT('9E<G-I;VX?"]H,3XO"B`@ M(&-A;&P@04Q?97AE8W5T92@G)7,O+BI<*$YE=W-<*3Q<+W-P86X^+BHO7U]? M)RYG.FAE861L:6YE36%R:T-A=&5G;W)Y+B=<,2]I)RD*("`@8V%L;"!!3%]E M>&5C=71E*"<E<R?N*EPH4F5C96YT(%-C<FEP="!5<&1A=&5S7"D?"]S<&%N M/BXJ+U]?7R<N9SIH96%D;&EN94UA<FM#871E9V]R>2XG7#$O:2<I"B`@(&-A M;&P@04Q?97AE8W5T92@G)7,O+BI<*%)E8V5N="!4:7`@061D:71I;VYS7"D? M7"]S<&%N/BXJ+U]?7R<N9SIH96%D;&EN94UA<FM#871E9V]R>2XG7#$O:2<I !"@`` ` end
588 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [05/01/15 16:49:59] >>587 なんかその diff 微妙におかしくありませんか? あ、全角「?」が含まれている?
589 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/15 17:05:54] そろそろuuencode.vimほすい鴨 ↓がんがれ
590 名前:586 mailto:sage [05/01/15 18:49:10] やっぱり失敗してます。>>587 もう1回挑戦 --- vimonline.vim.orig Thu Jan 13 04:46:37 2005 +++ vimonline.vim Sat Jan 15 13:58:16 2005 @@ -25,6 +25,7 @@ silent! %s///g silent! %g/<span class="newsdate"/,/^?s*<?/p>$/join silent! %g/<td class="newsdate"/,/<?/td>$/join + silent! %s/^?(?d?d*?.?d?d*?.?d?d*?)$/<h1>Vim ? is the current version<?/h1>/ call AL_execute('%s/.*?(News?)<?/span>.*/___'.g:headlineMarkCategory.'?/i') call AL_execute('%s/.*?(Recent Script Updates?)<?/span>.*/___'.g:headlineMarkCategory.'?/i') call AL_execute('%s/.*?(Recent Tip Additions?)<?/span>.*/___'.g:headlineMarkCategory.'?/i')
591 名前:586 mailto:sage [05/01/15 19:21:50] すみません。 590も変。 全角?を半角backslashにしただけじゃ直りませんね。 1行足しただけです。 あと、"Vim ? is"の所はbackslashの後に1を足して下さい。 顔を洗って寝直して来ます。
592 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [05/01/15 20:10:56] >>589 www.kaoriya.net/testdir/base64.vim 既にあるかも。 :call Uudecode() でカーソル行以降の最初のbegin〜endブロックをデコードしてカレントディレクトリ に保存します。Chaliceのバッファに対しても使えます。一応 :call Uuencode(filename) もあるみたいだけど、なんかうまく動いてないかも。
593 名前:586 mailto:sage [05/01/16 23:20:25] 悔しいので再挑戦させてください。 begin-base64 644 vimonline.diff.gz H4sICEfG6kEAA3ZpbW9ubGluZS5kaWZmALWQwU+DMBjFz9tf8bnMMMZoYWMjI0hYvBn14KanZoTQ BqqskLZM/e8tmR5mjIkHD22aL+/33vfqui4c+aERNRcMmRdqJC8Hu6qDm1yAvwAviIJVtAhh7nnL oeM45/rBthMn6Qr8dRSEkb8+SdMU3PlytgLH3CGk6RAAFK+Z0BdwqTDG5dmkxLFqjVFR50pdjQR7 VTTXbIRneE/UNCa4Tcb4ueHiO6bpT5ABNP0inLPoPZkQStDncYg9xnHlJ0/8AMQHrkBXDIpOSgPA kUnFG2HsjAT32UVe17C5zdgbKzrNJpaxRFMyuTfpxDbCvkeCpjjLMguVUcVy2v/XXS5frs12ZSPf kUV8zC37N78HVvQLbAvJWw2Pbd/sPwJ2vIUNpVybmn/3/wAkbgcXQwIAAA== ==== 少し変更しました。
594 名前:586@Vim%Chalice mailto:sage [05/01/23 11:41:11 ] headline/sankei.vimを 記事のタイトルを左に、 urlを補完して右に移動するように 変更してみました。 begin-base64 644 sankei.vim.diff.gz H4sICKwH80EAA3NhbmtlaS52aW0uZGlmZgCdUtuK2zAQfY6/YmxafIvl2Lm0NY5JWFpKm1Do7tKH KFm0tmJrY8vBlkv7mD+vFGeX0FIKBXmYkc7xnDmS53nQEn6gDH1nFaoblg/uig4+EQ7BWK5oMo0m MwhHo6nmuu4VeHDb8TMulLggGs2i6dset1iANx6+AVeFxUID44oGHtyeC/hGH+FYdjnjsK8bKCjJ SsapAkmKYq0J40J+tIkG6/uvyy+fl3BHmhriQ93UfCEOBBEhkCQ9HRPNM2BFWgE3BeE5jQZB6El9 ntQ0QZr722E4fj6cIg00aNOGHQXlaZ0xnkN6fDcO5b6aZRIOJ+DK2E8D0LKScqHD61bH1S5mVb7Z JVsniQkUDd3PDWxtdsYWu9g2EpXHWwfbsU8S5LzS8fzjZdQPdVMRsZKZ1XaPMk0LK7SH8FIEsjBN W/+z6en9v5ttdie2dU4MWzjDma8CqBCpgO3T03+oeSnGdi8rJWUJy9UD/UHTTlDLvJgiMnmjLC/E 3AhmRqJMQk68r7noveqVKtWxr3alNbqJ8uj5GaxJc7ghguZ18xOZONBNW3P/0s66GGHrOLj+x31T PvSP7cztoUIcI+RgVIgK29iSqS1dCEG2yHuUH/cSfT/XgPJs3/FUsJprvwDOsrrWLgMAAA== ====
595 名前:586@Vim%Chalice mailto:sage [05/01/23 18:08:57 ] >>594 を再考し 日付、記事タイトル、url の順番にしてみました。(diffの後半) 後、トップニュースが、表示されるようにしてみましたが、 今日の紙面?でしか試していません。(.diffの前半) begin-base64 644 sankei.vim.diff.gz H4sICCFm80EAA3NhbmtlaS52aW0uZGlmZgCdVF2PmlAQfV5+xUB2g4qA4EcTg4Sm2aZpbPuw9smr BuUKt4uXBq52N+mL/6M/tnfED/zYNGmil2E4nDlzZoJpmlCE/Jkya8NWVpaz+G6UrOFzyMFpy1+/ 0+13euC2Wl3FMIwK+O5pzXc4V+LeSVC/1S5xQQCm0206DhjlJQgUANDg21yEjIPIfnL6q8BcSoWk 3NBZTmMYQKBhkmf5KkxViGPFBChYSrlQwZ56qmlu/8i3iVWI0DR9u/rcakpExDYQpizmAy2lS6H5 9qsUrBiXNGckxgXJMuOifG+vcN5PaBiljNNRKX3EREql3mI9LwQTa0Frt8NAa4JGvK9DXwa6Lv+x Xpcpb57vMoAphindG0/9CTF8/QTE+hXd181d9X9yiPIIm7ts/4C6whyGIfLzvm52cECvXhyJ1rEb UrMapL5lpEYiEtl4AB59PMjv3cMfXghJTpcDjdTGU012S+qar5/Y3HO2N+C4Xx232QFDnr39dh0a fChUspp6bBWjnw3/JgfG3gQr2KFvNe5VMvi0n/BHXD4xlBHOUYaLpObK+RxvHByWXlevi24f/11s PN2ySeMtm6RF/6HmeNOul7IWYZrC++GMvtAFzlDfmyIiSCiLEzHQnJ7mo0lWY7fupVelUlTt2ZiV 1qi6FR+3/0uYP38IBY2z/NXSiaPKTajs1r4cYLkbDmAs54qXe9UnbSAuVNm/5+nsqfy87Lir1A+F 7ZUabTtWQC7ucs0XgmVc+QuinupGwwQAAA== ====
596 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/26 19:57:33 ] あ・・・あのですねあの・・ this->hoge[ i ]なんてなってるのが200行くらいあるんですよ これら全てを急遽 (*(this->hoge + i)) に変更したいんですよ あのよろしかったら・・・その・・・・ねそのぉ・・・教えて下さい.
597 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/26 20:49:34 ] >>596 なぜ変更したいの?
598 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/27 09:53:59 ] そのままポインタ参照したらいいやん
599 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/27 12:46:10 ] こんな感じ? s@\(\k\+\)->\(\k\+\)\[\s*\(\k\+\)\s*\]@(*(\1->\2 + \3))@ これでダメならPerlスレとかで聞いた方がいいかも.
600 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/12 11:40:41 ] 要望: 1. hz_ja.vimに変な文字を全部正規化する関数が欲しいなぁ。具体的にはgHA, gZJ 2. あるフォルダ内のファイルを再帰的に検索するプラグインが欲しいなぁ。 grep -r とか find . -type f | xargs grep みたいなやつ。 Windowsでgrep.exeやcygwin用意するのが面倒な場合があるんで。 あと符号化方式の自動認識を考えたらvimでやっちゃうのも悪くないだろうし。 一個、そういうプラグインを見つけたんだけど、やたら遅くて使い物にならなかった。 それから、検索だけじゃなくて置換も出来ると良いな。リファクタリングするとき便利なんだよね。
601 名前:名無しさん@Vim%Chalice mailto:sage [05/02/12 15:13:46 ] 自分で書け
602 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/12 20:57:04 ] WinのCygwin上でvim使ってる人いる? 見ためがいいからgvim使ってるけど,ちょっとしたとき<C-z>で シェルに降りられるのも便利なんだよねえ.
603 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/14 08:38:41 ] >>601 やはりそうなるのか。 「同じ事考えてますねー。ボクは作っちゃいましたよ!」という人が現れるのを期待してたんだが。
604 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/14 09:34:10 ] > あるフォルダ内のファイルを再帰的に検索 project.vim で出来るかな。
605 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/15 00:56:08 ] >>604 ありがとー。試してみるよ。これでダメなら書くか...
606 名前:586@Vim%Chalice mailto:sage [05/02/15 21:44:24 ] ttp://cvs.kaoriya.net/svn/kaoriya/vimscript/headline/trunk/plugin/headline/ から 2/13 に頂いた sankei.vim にジャンルの表示を加えてみました。 --- sankei.vim.origSun Feb 13 00:37:00 2005 +++ sankei.vimTue Feb 15 21:37:33 2005 @@ -36,14 +36,12 @@ let @" = save_reg " Format headlines silent! %s/<br>/\r/g - silent! g/\m^<td height="16"><img.*Special/delete _ - silent! g/\m^<td height="16"><img.*お知らせ/delete _ - silent! g!/\m^<img[^>]*><a href="[^"]*.htm"\|^・<a href="[^"]*.htm"\|^<td height="16"><img[^>]*><b>/delete _ + silent! g!/\m^<img[^>]*><a href="[^"]*.htm"\|^・<a href="[^"]*.htm"\|^<td width="110">/delete _ silent! %s!\m^<img[^>]*><a href="\([^"]\+\)">\([^<]*\)</a>(\(\d\d/\d\d \d\d:\d\d\)).*$!\=HeadlineFormatLine(submatch(2), submatch(1), submatch(3))! silent! %s!\m^<img[^>]*><a href="\([^"]\+\)">\([^<]*\)</a>.*$!\=HeadlineFormatLine(submatch(2), submatch(1), '')! silent! %s!\m^・<a href="\([^"]\+\)">\([^<]*\)</a>[^(]*(*\(\d\d/\d\d \d\d:\d\d\))*.*$!\=HeadlineFormatLine(submatch(2), submatch(1), submatch(3))! silent! %s!\m^・<a href="\([^"]\+\)">\([^<]*\)</a>.*$!\=HeadlineFormatLine(submatch(2), submatch(1), submatch(3))! - call AL_execute('%s!\m^<td height="16"><img.*<font[^>]*>\([^<]\+\)</font>.*!'.g:headlineMarkCategory.'\1!') + silent! execute '%s/^<td width=.*alt="\([^"]*\)".*$/'.g:headlineMarkCategory.'\1/' silent! execute '%s!"\([^"]\+\)">\([^<]\+\)\(.\+\)$!>\3 \2 '.g:headlineUrl_Sankei.'\1!' silent! %s/<[^>]*>//g endfunction
607 名前:名無しさん@お腹いっぱい。 [05/02/17 14:15:23 ] :syntax match と :match は、どういう風な違いがあるんですか? 一緒??
608 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/17 14:32:38 ] >>607 matchは1つしか定義できないし、複雑な条件を付加することもできない
609 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/17 15:15:21 ] ありがとう。 そっか、だから match none でも動くのか。
610 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/18 03:03:35 ] :match yocchan toshichan
611 名前:名無しさん@お腹いっぱい。 mailto:sage [05/02/21 09:30:55 ] >>610 で「tanokin torio」がマッチするようになりました。 ありがとうございました。
612 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/03/21(月) 04:20:16 ] windows環境でgtags.vimを利用している方はいますか? 私の環境だとエラーがでて動かないのですが
613 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/04/23(土) 11:54:58 ] SuperTab.vim、(GTKの)ximと相性悪くない? <C-X>押すとximがonになるからいちいちoffにしないと次の操作を受け付けない。
614 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/01(水) 14:07:44 ] Vim7のスクリプトがだいぶ強まってるので 無意味にベイジアンフィルタを書いてみた ttp://tokyo.cool.ne.jp/hopper2/is_spam.vim そのうちpythonになっちゃいそうないきおいだ
615 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/05(日) 06:54:04 ] どんなとこが強まってるのかちょっと紹介してもらえるとうれしいです。
616 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/05(日) 08:15:44 ] 配列や連想配列が実装された
617 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/05(日) 11:37:39 ] スクリプト勉強中です。環境はWin2K + Kaoriya版Vim6.3です。 自力では解決できなかったので教えてください。 これは動作しますが、Dos窓を閉じる必要があり面倒だなと思い execute "! dir > C:\\test" 以下の方法を試しましたが、うまく動作しません。 let value = system("dir > C:\\test") "test.txtは作成されない echo value "エコーは出力される 何故・・・
618 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/05(日) 13:38:25 ] system()は出力をリダイレクトで受け取るから実際に実行するコマンドが dir > C:\test > tmpfile 的なことになってるとおもわれ :9verbose echo system("dir > C:\\test") とかすれば確認できる。出力を直接受け取る必要がないなら :silent execute "! dir > C:\\test" で、目的の動作になると思う
619 名前:617 mailto:sage [2005/06/05(日) 21:57:30 ] >>618 ありがとうございました。期待の動作になりました。 >>612 618さんのアドバイスのおかげで、Win2Kではgtags.vimに以下の変更を加えたらとりあえず動きました。 オプションの変更は正直よく理解してません。 "let cmd = 'global' . sep . '-tq' . option . sep . pattern let cmd = 'global' . sep . '-tq' . sep . pattern "let stuff = system(cmd . " > " . tmpfile) :silent execute "!" . cmd . ">" . tmpfile ところでglobalってC++のオーバーロードも判断してくれるんですかね?期待して調べたんですが。 なんか無理っぽくてちょっとがっかり気味。 全体で数百万ステップを超えるソフトの改造に入ったんですが、でかすぎてさっぱり分からんのです。 オーバーロードを認識しないctagsでは役に立たない。 VC++で定義位置とかを追うとビルドばっかりで時間がかかり使い物にならず。 助けてくだされ。
620 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/05(日) 23:36:16 ] globalはオーバーロードした関数ごとにタグ作ってるみたいだから 普通に使えるんじゃないの。さすがに文脈を判断してジャンプする とかむりだろうけど、複数候補から自分で選ぶくらいはできそう。
621 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/07(火) 23:32:27 ] >>615 直接ファイルの入出力ができるようになったのが便利。 あと、まだ実装されてないみたいだけど文字列をforループで処理できるようになるらしい。 つーかリストはやっぱり強力やなぁ。
622 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/07(火) 23:52:46 ] ショパン最強
623 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/08(水) 12:51:36 ] Vim7はこんな風にluaやjavascriptみたいなクラスが書けるのもおもしろい let counter = {} let counter.count = 0 function counter.next() dict let self.count += 1 return self.count endfunction echo counter.next()
624 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/10(金) 23:02:05 ] 言語の強化よりも、もっとvim内部をいじれるように してほしいんだけど。 そういう改良はないの?
625 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/10(金) 23:26:33 ] >>624 ソースがある。
626 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 01:05:50 ] いい加減そういう反応はやめましょうよ…
627 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 01:09:13 ] 改良を望む人自身が改良するのが一番いいだろ。
628 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 01:29:23 ] 624の言ってるのは、スクリプトそのものの言語仕様をいくら高めたところで vim側がスクリプトに委ねてくれるものが今のままでは どのみち大したことはできないってことなんじゃないの。 スクリプトで出来ることを増やそうと言っているのに その答えがソース弄れというのは頓珍漢。
629 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 01:34:56 ] これは凄いエスパーだな。
630 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 02:09:28 ] ソース弄らなきゃその「スクリプトで出来ることを増やす」こともできないだろ 問題は誰がどのように弄るかなの だったらどうしたいかアイデアを持っている人がやるのが手っ取り早い
631 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 02:34:21 ] 外部でそういう部分を弄って持ち込んでも某mattn氏の二の舞になるだけだからなあ。 hackするのと、開発の方向性を変えるのとは別次元の問題だよ。
632 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 03:00:32 ] とはいえ、開発の方向性を変えるのにパッチを送る以外に有効な方法ある? まぁ、コミュニティの方向性を変えたいならパッチを送るだけじゃなくって そういう方向に向くように開発者を説得するのも必要かもしれないが、 それにしたってまず最初にパッチは必要だよね。
633 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 03:32:00 ] こういう件に関しては、あまりそうは思わないな。 単なるhackならとりあえず自分の役には立つが、 scriptingのようなものは正式に取り込まれて初めて意味を持つ。 方向性も定まらないうちに闇雲に書いてみても労力が無駄になるだけだ。 socialを先にすべき問題だろう。
634 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 03:33:33 ] ま、一つ二つ見本くらいは作ってみせてもいいだろうけどネ patch出して取り込んで、というものとは少々違うわけですよ。
635 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2005/06/12(日) 10:34:46 ] 一応参考まで。 私の経験で言うとscriptingの拡張としては、User Defined CompletionがVim7で取り 込まれました。パッチはBram氏には相談せずに書き始めました。書き始めた時には無 駄になることも覚悟の上でしたが、ちょうどWin専用で無理矢理Intellisenceを行う スクリプトが発表された直後だったこともあり、コンセプトは受け入れてもらえると 確信はしていました(まさか関数の定義方法とか殆どそのままだとは思いませんでし たがorz)。仕様が小さくなかったのでVim6には見送られましたが、Vim7で日の目を見 たというわけです。 逆に言えばVim7開発中である今なら、比較的取り込んでもらいやすいでしょう。もち ろんパッチの形のほうがBram氏の手間が低くなるので取り込んでもらえる確率は高い のですが、海外の方はたとえ信義に反しても理に適っていれば納得する傾向があるの で、コンセプトだけでも背景や考え方つまり説得力があれば、採用される可能性は高 くなるでしょう。 特にMzScheme用のマルチスレッドや、関数ポインタが導入された今ならば、上手くす れば相当に面白い機能を突っ込める気がしています。
636 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 15:17:25 ] 文字コード判定スクリプト。gaucheのguess.cを移植してみた。 ttp://tokyo.cool.ne.jp/hopper2/guess_enc.vim こっちはlibiconvの移植。(要vim7) ttp://tokyo.cool.ne.jp/hopper2/vimiconv.tar.bz2 ありえないほど遅いです。 ...とんだ無駄足だったよorz
637 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/12(日) 15:22:53 ] >>636 いやいや、興味深い。 今日の夜にでも試させてもらうよ。
638 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2005/06/12(日) 15:44:21 ] >>636 > ありえないほど遅いです。 {}による名前の解決が多いのが原因かもしれないですねぇ。だとすればC++のテンプ レートみたいに、functionの中でfunctionを定義する、ジェネリックなことができれ ば解決できるかもしれません。 libcall()使っちゃうのが王道だとは思いますけど。
639 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/13(月) 01:20:26 ] >>636 試してみた。 500行くらいまでなら、ありえないってほどには遅く感じなかったよ。 10000行のファイルは帰ってこねぇ、、、
640 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/17(金) 23:53:41 ] synID(line,col,flag)のflagって0でも1でも同じに感じるんですが どう違うんでしょうか?いまいちわからない…
641 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/19(日) 23:02:44 ] transparent 属性がついてる構文アイテムの上では違う結果を返すんじゃない。 :set ft=c として ( の上で :echo synID(line("."),col("."),1) :echo synID(line("."),col("."),0) すると違う結果になるよ。
642 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/06/20(月) 21:13:20 ] ttp://tokyo.cool.ne.jp/hopper2/undo_ex.vim undoのシリアライズとemacsのselective undoもどき(要vim7)
643 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/08/02(火) 05:10:24 ] ttp://tokyo.cool.ne.jp/hopper2/kanaconv.vim 簡易ローマ字入力メソッド(要vim7) まともな辞書を用意すればなんとか使いものになる...かも?
644 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/08/02(火) 12:08:37 ] それよりim_customの強化きぼんぬ
645 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/08/03(水) 03:48:22 ] ttp://tokyo.cool.ne.jp/hopper2/kanaconv.vim.gz とりあえず、 かんな辞書の取り込み 変換リストのプレビュー 文節区切りの変更 MeCabや茶筌などの形態素解析器との連携 を実装した。 初期変換の制度を上げるのは難しそうだなぁ。