1 名前:名無しさん@お腹いっぱい。 [01/12/17 12:15] みんなでスクリプトを覚えよう
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や茶筌などの形態素解析器との連携 を実装した。 初期変換の制度を上げるのは難しそうだなぁ。
646 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/26(月) 19:30:09 ] DLLの扱いが libcall() -> DLLロード -> 関数呼び出し -> DLLアンロード じゃなくて libopen() -> DLLロード libcall() -> 関数呼び出し libclose() -> DLLアンロード とか、DLLのインスタンスを保持できるようになってないのがちょっと不思議。
647 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2005/09/26(月) 20:58:17 ] >>646 インスタンスを保持する変数が無いから。というより変数にはインスタンスを保持でき なかったから、と考えるのが正確かも。Vim7の変数は多少事情が違うので、うまく議論 できればそのようにすることは不可能じゃない、とは思います。
648 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/26(月) 21:46:15 ] 単純にDLLが状態保持できればと思ったんだけど、でもそうか、 どうせなら複数インスタンスを作れた方がおもしろそうだ。 それならlibopen()がDLLから関数リストをもらって、その関数をセットした ディクショナリを返すとかがいいな。ついでに引数の制限もゆるめてほしい。 まぁ議論なんてできないわけだが...on
649 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2005/09/27(火) 08:44:17 ] >>648 > それならlibopen()がDLLから関数リストをもらって、 DLL自体にはタイプライブラリ機能はありませんから。COMやXPCOMとかいうあたりがな いとダメでしょう。 > ついでに引数の制限もゆるめてほしい。 マーシャリングですねぇ。つい最近vim-devで、if_*で呼び出せるスクリプト言語か ら、Vim本体の変数を操作するようなジェネリックな方法がどうとか、そういう議論が ありました。ガンバレばその流れで関連技術を滑り込ませられるかもしれません。 とはいえ、なんかそれって.NETだよなぁ。
650 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/27(火) 20:06:51 ] おれはVim専用のDLLを考えてました。 char* vim_getfunclist() という関数から"1,1,func1,1,3,func2" みたいな文字列が返ってきて、この場合なら引数を一つ取るfunc1()と、 一つから三つまでの引数を取るfunc2()を、DLLは持っている。 関数のプロトタイプは char** func(int argc, char* argv[]) で、文字列のリスト(NULL終端)を返す。みたいな簡単なの。 あとはVimの関数をDLLに渡して、pVim->eval("@a")とかできるようにしたり。 あんまり深くVimの内部まで操作出来るようにすると、お手軽じゃなくなりそうなんで、 Vimへのアクセスは他のスクリプトと同程度になりそうだけど、DLLをC言語で書くなら Vimの内部表現を直接いじりたいかも。 うーん…欲しいなぁ。
651 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/27(火) 21:38:28 ID:0] あー、でもどうせvimスクリプトでDLLをラップするだろうから DLLの扱いはシンプルでいいのかも。
652 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2005/09/27(火) 22:01:32 ID:0] 内部表現をいじるなら、先ずはソースコードを直接触っちゃったほうが速いでしょう。 難しいところなんですが、エディタとしての価値を直接高めるのに必要な拡張であれ ば、思いの他すんなり通るものです。一方、間接的なもの、スクリプトの表現力を上げ てそれが結果的に、というのはなかなかに難しそうです。
653 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/28(水) 03:33:56 ] どうもDLLをロードするたびに新しいインスタンスが作られるわけではないようで、 複数インスタンスを作るのは難しそう。 というわけで、DLLのインスタンスを保持するだけの最低限のものを作成。 これでもけっこう遊べるかな。 www.uploda.org/file/uporg203304.zip.html こんな感じで使う :call libopen('sum.dll') :echo libcallnr('sum.dll', 'add', 1) => 1 :echo libcallnr('sum.dll', 'add', 32) => 33 :call libclose('sum.dll') :echo libcallnr('sum.dll', 'add', 43) => 43 "いままでどおり使うこともできるが :echo libcallnr('sum.dll', 'add', 32) => 32 "毎度初期化される これだけでだいぶ幅が広がると思うんだけど… GUIのウィンドウとか、通信とか...
654 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/28(水) 04:22:52 ] そういうのは今でも出来るけど、ちょっとしたサーバ(daemon?)を作るのが面倒くさいな。
655 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/09/28(水) 06:02:12 ] > 6 Add support for loading shared libraries, and calling functions in it. > :libload internal-name libname > :libunload internal-name > ... 優先度は低いながらもいちおうTodoには入ってるようで、ver5.3のころから。 たぶんこれはlibcall実装前のTodoな気もしますが…。 libcallの引数を増やすのも、DLLからVimのコマンドを呼べるようにするのも Todoに入ってますね。
656 名前:名無しさん@お腹いっぱい。 [2005/11/14(月) 23:07:34 ] verilogの回路を、vimを使ってで記述しています。 で、vimだけ(一部、tag生成のためにperl)をつかって、ドライブ元を自動検索する スクリプトを作成中です。 そこで、質問ですが、以下の信号を検索するための正規表現をどうしたら最適だと思いますか? 正規表現が無理なら、関数でも可能です。 1. xxxxが入力ピンとして存在することを調べる input xxxx; や input yyyy, /*testdesu*/ xxxx; 2.xxxxが、ドライブされていることを検索 xxxx = yyyy ; や xxxx <= (zzzz <= yyyy) ; 3.xxxxが、接続されているピンを検索 .yyyy(xxxx) や、 .yyyy( // pin /* test */ xxxx ) 今の僕の検索は 1.input\_[^;]*\<xxxx\> 2.\<xxxx\>\_[ \t\[\]0-9:{}]*<\==\_[^;=]\+\_[^;]*; 3.(\_\s*\(\/\*\_.\{-\}\*\/\)\=\_\s*xxxx\> なんて感じです。結構適当ですが、まぁ、そこそこヒットします。 微妙にスレ違いかもしれませんが、いいアイディアがあれば教えてもらえればと思います。 結構コメントがいろいろ入る可能性があるので、本来は構文解析させるべきなんでしょうが、 それだと、リアルタイム性が薄れるので、なんとか、ベースは検索+関数って感じで やりたいと思っています。
657 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 08:30:23 ] Verilogというハードウェア記述言語のソースを書いていて、 それをサポートするツールをVimスクリプトで作っていて、 んで、C言語で例えるなら、ある変数の宣言位置や、代入されている位置や、 その変数を引数に取っているある関数を探したい、ということなんかな? なにが問題なのかよくわかんないからなんとも言えないけど、 そこそこの割り切りは必要じゃないかと。 検索するだけなら:g/xxxx/.-3number 6とかして目視とかョョョ
658 名前:名無しさん@お腹いっぱい。 [2005/11/24(木) 11:56:54 ] vim スクリプトで skk を実装してみました。 あやしいところが多々ありますが、 とりあえず動いているようです。 よかったら使ってみてください。 www.jt200x.com/uploder/src/up0272.zip
659 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/24(木) 16:12:56 ] >>658 すごいですね。
660 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/24(木) 16:14:05 ] たしかにあやしいw けどまっつんさんのskkim.vimより変換がかろやか
661 名前:名無しさん@お腹いっぱい。 [2005/11/25(金) 00:30:13 ] rate this script│(*)God ( )Life Changing ( )Helpful ( )Unfulfilling [rate] 再帰登録や補完にまで対応とは、凄いですね。さっそく使わせて頂いております。 ちょっとだけ改造してみました。検討して頂けると嬉しいです。 ttp://www.jt200x.com/uploder/src/up0293.zip ・▽を<C-H>で削除した後に挙動がおかしくなる現象を修正 ・gSで辞書を手動セーブ ・以下のオプションを追加 let skk_egg_like_newline = 1 " <CR>で確定しても改行しない let skk_show_annotation = 1 " skkinput2ライクなannotation表示 (ださい) " skkサーバなんちゃって対応 (設定するとL辞書は読まない) let skk_external_prog = "/usr/bin/env ruby -Ke ~/ruby/skkservcaller.rb -w" "let plugin_skk_disable = 1 " pluginの無効化 直せなかったもの: ・「. /./・/。/…;.../」のような . や \ などを見出しに含むエントリがおかしい。 search()が正規表現と解釈するため。(これはこれで/anno.* とかできて面白い?) ・タイプ速度が速いとキーを取りこぼす ・検索やコマンドラインなどで入力できない ・カタカナモードでの変換結果がかなを含む場合はトグルする必要がある(▽ヨミカタ→「読ミ方」) ・Chaliceでは[SKK:あ]が表示されない その他: mfdは200はないとダメみたいです。 Lisp対応は(concat "hoge")ってのだけあれば十分だと思います。 今後に大いに期待しておりますので、がんがって!
662 名前:658 mailto:sage [2005/11/25(金) 17:22:12 ] >>659 >>660 さっそく使ってみてくれてありがとう。 >>661 素早い手直しありがとうございます。 ほとんど使わせてもらいましたが、 > ・▽を<C-H>で削除した後に挙動がおかしくなる現象を修正 これがよくわからないので詳しく説明して! > ・gSで辞書を手動セーブ ここにすると skk_keep_state == 0 のときに map されないので、 グローバルにしてみました。skk_manual_save_jisyo_keys を 空にするとこのグローバルマッピングは行わないことにしました。 > " skkサーバなんちゃって対応 (設定するとL辞書は読まない) > let skk_external_prog = "/usr/bin/env ruby -Ke ~/ruby/skkservcaller.rb -w" これはskkサーバを動かしていないのでわからない。取り入れたけど。 > ・「. /./・/。/…;.../」のような . や \ などを見出しに含むエントリがおかしい。 これは直しました。これを直してるときに SkkSaveEnv のバグを 発見したのでここも直しました。 > ・タイプ速度が速いとキーを取りこぼす これは腕がないので再現できません。とりあえず screen の paste では 取りこぼしはないように見えるんだけど…。 > ・検索やコマンドラインなどで入力できない やる気はあるけどちょっと時間がかかりそう。 > ・カタカナモードでの変換結果がかなを含む場合はトグルする必要がある(▽ヨミカタ→「読ミ方」) これはわりとすぐにできそうです。 > ・Chaliceでは[SKK:あ]が表示されない これは確かに自覚症状があったので、ちょっと調べてみます。 とりあえず今日できたところまで ttp://www.jt200x.com/uploder/src/up0309.zip
663 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/25(金) 22:58:06 ] >>662 おお、ありがとうございます。良い感じです。 > > ・▽を<C-H>で削除した後に挙動がおかしくなる現象を修正 > これがよくわからないので詳しく説明して! 次の手順で再現できると思います。 / "▽|" <C-H> "|" / 'Already in ▽ mode' > elseif b:skk_henkan_mode == 1 && s:SkkCursorCol() < b:skk_hstart ここでのSkkCursorCol()はカーソル移動「前」の値なので "<"が成立せず、▽を消しても▽モードから抜けられない結果になります。 「消去後に、変換開始位置とカーソルが一致する」のが正しい条件なので: > elseif b:skk_henkan_mode == 1 && s:SkkCursorCol() <= b:skk_hstart + 2 > > ・タイプ速度が速いとキーを取りこぼす > これは腕がないので再現できません。 マシンがボロい(か、辞書がデカい)と再現するのかもです。 > > let skk_external_prog = "/usr/bin/env ruby -Ke ~/ruby/skkservcaller.rb -w" > これはskkサーバを動かしていないのでわからない。取り入れたけど。 あるといろいろ面白いですよ。複数辞書に対応できたりして。 本当はvim scriptで直接サーバと更新できるといいのですが。
664 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/25(金) 23:07:38 ] .vimrcの設定例を晒しておきましょう。 let skk_jisyo = "~/.skk-vim-jisyo" " .skk-jisyoだとemacsが起動してたら危険 let skk_show_candidates_count = 2 " これ気が効いてる let skk_keep_state = 1 let skk_egg_like_newline = 1 let skk_show_annotation = 1 let skk_special_midasi_keys = ">" " ?は普通に使いたい let skk_user_rom_kana_rules = "" \. "z<《\<NL>" \. "z>》\<NL>" \. "z \<NL>" let skk_user_rom_func_rules = "" \. ";SkkSetHenkanPoint1(kana)\<NL>" " 要はサーバさえ呼べれば何でもいい let skk_external_prog = "/usr/bin/env ruby -Ke ~/bin/skkservcaller.rb -w" set maxfuncdepth=200 実際このスクリプトはかなりのものだと思うので、 できるだけ早い段階で陽の当たる場所へ出してやってほしいです。 vim scriptのSKK! かなりインパクトありますよ。
665 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/26(土) 15:13:56 ] 置く所無いんだったら vim wiki にでも置かせてもらったら? つ ttp://vim.mydns.jp/?scripts
666 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/28(月) 17:26:12 ] tokyo.cool.ne.jp/hopper2/if_spidermonkey.diff VimのSpiderMonkeyインターフェース。 適当にmakefileを書き換えればコンパイルできます。
667 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/28(月) 19:01:41 ] >>663 なるほどよくわかりました。ただ skk_marker_white を変数に しているので strlen(g:skk_marker_white) としました。 ・カタカナモードでの変換結果がかなを含む場合 これは直しました。 ・Chaliceでは[SKK:あ]が表示されない これは調べてみたら Chalice は statusline を使っていて 親切にも chalice_status_line という変数があったので let chalice_statusline = '%{SkkGetModeStr()}' とすれば表示されるようになりました。 >>664 >>665 もうちょっとこの場所で続けさせてください。 ttp://www.jt200x.com/uploder/src/up0548.zip
668 名前:mattn@Vim%Chalice mailto:sage [2005/11/28(月) 20:49:30 ] # skk.vim 良いっすね。 期待してまつ。
669 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2005/11/28(月) 21:55:18 ] >>666 それ、vim-devに投げてみたらどうですか? 結構賛同者は多い予感がします。
670 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/28(月) 23:55:14 ] >>669 まともに受け答えできそうにないのでやめときます。 いやほんとお恥かしい…。
671 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2005/11/29(火) 08:57:08 ] >>670 インストールの手順とかSpiderMonkeyのリソースなどについて、日本語で簡単に解説 してもらえますか? 何が必要で、どこから持ってきてどうすれば良いのかとかどんな 環境で動作確認できたとか。 # これだけの仕事量をうもらせてしまうのは忍びありません
672 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/29(火) 17:46:33 ] >>671 おお、代わりに投げてくださるんでしょうか。ありがとうございます。 ざっくりとコンパイル手順を書いてみました。 FreeBSD6とWindowsXP(+mingw)でコンパイル、動作確認しています。 tokyo.cool.ne.jp/hopper2/if_spidermonkey_make.html
673 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/29(火) 21:39:14 ] >>672 乙。でも使用方法や例といった本当のドキュメントも欲しいなぁ。 っちゅうか、ドキュメントなかったら、相手してくんないかも。
674 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/30(水) 03:37:00 ] tokyo.cool.ne.jp/hopper2/if_spidermonkey.txt でっちあげコピペヘルプ。 整理したらオブジェクト設計の迷いがうきぼりに...orz
675 名前:名無しさん@お腹いっぱい。 [2005/12/01(木) 19:08:05 ] あ…あの… カレントファイル名フルパスの文字列の長さを得るにはどうすればよろしいですか…?
676 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/01(木) 19:14:25 ] :echo expand("%:p")
677 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/01(木) 19:16:04 ] 違った... :echo strlen(expand("%:p"))
678 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/01(木) 19:21:29 ] >>676 ありがとうごさいました
679 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/01(木) 20:21:18 ] 最近やたら濃かったから、何か清々しくていいなw
680 名前:名無しさん@お腹いっぱい。 [2005/12/02(金) 12:30:57 ] 二行以上(表示が)になってしまう行は、背景を違う色にしたいのですが、どうすればよろしいですか?
681 名前:名無しさん@お腹いっぱい。 [2005/12/02(金) 13:07:17 ] ファイルパスの文字列からファイル名文字列のみ抽出するにはどうすればいいですか?
682 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/03(土) 21:03:55 ] >>681 :echo fnamemodify("/path/to/file.txt", ":p:t") >>682 ムリ。一時的に強調するだけならなんとか… function! MatchLongLine() let w = winwidth("%") let w = w - &foldcolumn if &number if v:version >= 700 let w = w - &numberwidth else let w = w - 8 endif endif if &list && &listchars =~ 'eol:' let w = w - 1 endif if has('signs') redir @a silent sign place redir END if @a =~ 'line=' let w = w - 2 endif endif execute 'match Error /^.*\%>' . w . 'v..*$' endfunction
683 名前:名無しさん@お腹いっぱい。 [2005/12/05(月) 01:31:37 ] ありがとうございました^^
684 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/05(月) 02:20:12 ] skk.vimの調子はいかがー?
685 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 14:20:19 ] skk.vim コマンドライン入力を可能にしました。 (concat "文字列")に対応しました。 試してみてください。 ttp://49uper.com:8080/html/img-s/98992.zip それとコマンドラインに入ったときは必ず off の状態になるように したんですが、ここら辺への意見を聞かせてください。
686 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 15:03:17 ] >それとコマンドラインに入ったときは必ず off の状態になるように >したんですが、ここら辺への意見を聞かせてください。 >>685 コマンドラインでは日本語を入力することはあまりないので問題な いと思います。 検索の場合は日本語を入力することも多いでしょうから前回の状態 を保存できるといいかもしれません。
687 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 20:49:13 ] >skk.vim 変換候補の先頭でのxと末尾でのスペースの挙動が変です。 例えば、 1) A:藹 S:姶 D:会 F:饗 [残り 0] 2) あい<space> となります。まぁホンモノのskkは知らないのだけれど。 あとできればESCで変換をキャンセルしたいです。 困ったときのESC連打が通用しないとパニくります。
688 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/07(水) 05:35:16 ] >>685 imapやcmapじゃなくてlmapを使うと 状態管理とかしなくていいし楽なんじゃなかろうか。 mapのバッティングとか気にしなくていいし、 カーソルの色も変るし。
689 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/07(水) 17:33:28 ] >>687 > 変換候補の先頭でのxと末尾でのスペースの挙動が変です。 第一候補で x 読みに戻す。 最終候補で <space> 登録モードに入る。 ということでしたらこれは正しい挙動だと思いますが…。 > 困ったときのESC連打が通用しないとパニくります。 困ったときは <C-g> を連打してください。
690 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/07(水) 17:34:29 ] >>688 > imapやcmapじゃなくてlmapを使うと > 状態管理とかしなくていいし楽なんじゃなかろうか。 あ、これいけるかも。 lmap = keymapファイルというイメージがあったので、 端から除外していました。 ちょっととりかかってみます。
691 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/07(水) 19:11:13 ] undoはなんとかしたいところだが、これはvimscriptの構造的な問題だな。 scriptをブロック化してundoの単位を指定する命令がないんだもん。
692 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 11:17:15 ] vimでプロセスを起動してそのプロセスと通信するにはどうすれば いいですか? emacsのstart-process, process-send-stringのようなものです。
693 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 13:47:29 ] >>685 コマンドラインや検索ではskk_egg_like_newlineが効いていないようです。 あと、コマンドラインや検索を<C-H>で抜けられなくなるようです。
694 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 15:23:51 ] >>692 if_perlとかif_rubyとか使うのが簡単じゃないすかね。 もしくはvimと他プロセスを仲介してくれるサーバーを書くとか。
695 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 15:47:12 ] if_rubyの実際の使用例やサンプルって:h ruby以外にはありませんか? ruby側と引数をやり取りする方法とかさっぱりわかんないっす。
696 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 16:43:53 ] >>695 rrb
697 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 16:45:27 ] >>694 >もしくはvimと他プロセスを仲介してくれるサーバーを書くとか。 そのサーバとどうやってやりとりするのですか?
698 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 16:56:56 ] skk.vimがないのですが。 再うpきぼんです。
699 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 17:27:08 ] >>696 ありがとうございます、読んでみます。
700 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 17:36:21 ] >>697 :!client send message > result とかlibcall()とか クライアントの中身はソケットでもSendMessage()でもなんでも
701 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/12(月) 17:42:00 ] >>700 どうも。if_{perl,ruby}使った方が楽そうですね。
702 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/13(火) 17:15:48 ] skk.vim >>693 とりあえず回避しました。 maxfuncdepthの件 おおよそ今までの半分ぐらいで大丈夫になったんじゃないかと思います。 (本当はループで回せればいいんだけど再描画がうまくいかなくて...。) 暫定バージョンです。 ttp://49uper.com:8080/html/img-s/99866.zip cmapの<c-\>eと<c-r>=の違いについて throwすると<c-\>eの方はすぐに反応が返ってくる(input()を抜ける)のに、 <c-r>=だと固まる(というかinput()を抜けずにそのままの状態でいる) わけを誰が知っていたら教えてください。
703 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/13(火) 20:17:43 ] c_CTRL-R_= の処理でエラーチェックしてないから この辺 *** ex_getln.c.orig Tue Dec 13 19:04:59 2005 --- ex_getln.c Tue Dec 13 19:28:15 2005 *************** *** 1048,1053 **** --- 1048,1054 ---- break; #endif + case_esc: case ESC: /* get here if p_wc != ESC or when ESC typed twice */ case Ctrl_C: /* In exmode it doesn't make sense to return. Except when *************** *** 1094,1099 **** --- 1095,1105 ---- save_cmdline(&save_ccline); c = get_expr_register(); restore_cmdline(&save_ccline); + if (get_expr_line() == NULL) + { + beep_flush(); + goto case_esc; + } } } #endif
704 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/14(水) 11:53:11 ] >>703 ありがとうございます。 ということは、現時点では <C-\>e を使うしかないということか…。 まぁ、登録の時だけなので cmap を切り替えてやってみます。
705 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/15(木) 20:56:05 ] skk.vimで▽モードのときに色を付けるのはvimスクリプトでは無理?
706 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/16(金) 02:09:37 ] 漢字変換の仕方がわからない、、、
707 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/16(金) 02:21:48 ] >>706 skkを勉強しなさい
708 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/16(金) 22:34:34 ] skk.vim をwindowsで使用しているのですが、 skk_jisyoに空白があるパスを指定するとエラーが出てしまいます。 この場合何か特別な書き方があるんでしょうか?
709 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/16(金) 23:49:43 ] skk.vim,便利に使わせて頂いてます. 2点報告と,1点要望です. その1 single-repeatの挙動 あほ あほ あほ 1. コマンドラインで /あほ (「あほ」を検索) 2. 最初の「あほ」の「あ」の位置で cwばか<esc> ばか あほ あほ 3. n.n. ばか ばか ばか となってほしいところが ばか bばkか bばkか となる
710 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/16(金) 23:52:18 ] その2 変換中に折り返しが来る場合の挙動 1. :set tw=20 (便宜上,少な目に) 2. 行頭から以下を入力(日本語モードで) choudoOrikaesi<spc><c-j>deHenkan ちょうど折り返しで▽ hへんかん となる その3 skk_imみたいにモード表示がほしい (これはただの要望なので,聞き流してください)
711 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/17(土) 00:03:45 ] >>710 モード表示ありますよ。 se stl&
712 名前:710 mailto:sage [2005/12/17(土) 00:32:16 ] >>711 ありがとう,知りせんでした. しかも skk_im ってなんだよ… im_customの間違いでした orz
713 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/18(日) 17:06:28 ] >>700 dllの中で自身をロードすれば、libcallの呼び出し後もdllは開放されないので、 状態を保持しなきゃいけないような拡張もlibcallとdllだけで可能。
714 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/19(月) 17:56:01 ] >>708 let skk_jisyo = 'C:\Program\ Files\hoge' または let skk_jisyo = "C:\\Program\\ Files\\hoge" >>709-710 うーん、どっちも悩ましい問題です…。 しばらく宿題とさせておいてください。
715 名前:708 mailto:sage [2005/12/19(月) 19:39:07 ] >>714 ありがとうございます。無事下記のようにして読み込むことができました。 let skk_jisyo = escape( $VIM ,' ').'\_skk-jisyo'
716 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/24(土) 03:21:17 ] tokyo.cool.ne.jp/hopper2/vimuim.c tokyo.cool.ne.jp/hopper2/uim.vim uimを使った文字入力。オモチャだけど...。今のところほぼ挿入モード専用です。 使い方: 1. vimuim.cを適当にコンパイルする。 $ cc -shared -o vimuim.so -I/usr/X11R6/include/uim vimuim.c -L/usr/X11R6/lib -luim 2. uim.vimとvimuim.soをruntime/keymap/にコピーする。 3. :set keymap=uim と設定する。 CTRL-^で言語を切り替えれば入力できるようになります。 オプション: g:uim_lang (デフォルト"ja") g:uim_engine (デフォルト"anthy")
717 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/24(土) 08:21:39 ] >>716 実は私もvim-uimをrubyで作ろうとしていたのでした。(まだ手をつけていないけど) 今後の開発に期待しております。
718 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/25(日) 23:48:41 ] みんな濃いなあ。。。 やっぱり日本語入力はvimmer共通の悩みなのね
719 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/26(月) 22:18:51 ] >>716 コマンドラインを使えば、プリエディットに色をつけれるのか。 バッファ内にプリエディットを表示させるときは色はつけれないで すよね?
720 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/27(火) 08:37:12 ] 例えば、2行3列目の文字を強調する :syn match Error /\%2l\%3c./ とか細かい指定もできるので一応できます。 ただ、C言語のコメントのような、syn-regionで範囲指定された 空間の中はどうがんばっても無理です。たぶん。
721 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/27(火) 11:59:07 ] skk.vim ・lmapを使うように変更しました。 ・>704 の問題を直しました。おまけとして undo がだいぶきれいになりました。 ・変換時の色付けを追加しました。 ・ウィンドウサイズが崩れなくなりました。 ttp://49uper.com:8080/html/img-s/101947.zip
722 名前:名無しさん@お腹いっぱい。 [2005/12/27(火) 13:13:46 ] s/>704/>709 の間違いでした...
723 名前:mattn@Vim%Chalice mailto:sage [2005/12/28(水) 09:09:36 ] # skk.vim vim.org の scripts に入れて見られてはどうですか? 結構日本人には、反響あると思いますし、防火壁内の人にも よいのでは? # もちろんそのあかつきには、「Life Changing」です。
724 名前:709+710 mailto:sage [2005/12/28(水) 16:31:09 ] >>709 に関してはバッチリ直っていることを確認しました. (前バージョンでは出なかった)以下のエラーが出ました. 例えば >>710 の操作で再現すると思います. Error detected while processing function <SNR>18_SkkKey..<SNR>18_SkkInsert..<SNR>18_SkkInsertKana..<SNR>18_SkkEraseRom..<SNR>18_SkkDeleteRange: line 23: E474: Invalid argument: backspace+=indent,eol Error detected while processing function <SNR>18_SkkKey: line 42: E171: Missing :endif …いつも報告ばかりでスミマセン. 大掃除が終わり次第自分でも中身を見てみたいと思いますが,取り急ぎご報告まで.
725 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/28(水) 17:33:26 ] >>724 こちらでは再現できません。 vim のバージョンはいくつでしょうか? また、set backspace=indent,eol か let &backspace = "indent,eol" でエラーは出ますか?
726 名前:725 mailto:sage [2005/12/28(水) 18:41:33 ] >>724 理由がわかりました。'backspace' の値が数値だとエラーが出るようです。 以下のパッチを当ててください。 1121c1121 < set backspace+=indent,eol --- > set backspace=indent,eol 1196c1196 < set backspace+=indent,eol --- > set backspace=indent,eol 1297c1297 < exe "lnoremap <silent> <buffer> " . g:skk_abbrev_to_zenei_key . " <C-r>=<SID>SkkKey(\"<C-v>" . g:skk_abbrev_to_zenei_key . "\")<CR>" --- > exe "lnoremap <buffer> " . g:skk_abbrev_to_zenei_key . " <C-r>=<SID>SkkKey(\"<C-v><C-q>\")<CR>" 1366c1366 < elseif a:key ==# g:skk_abbrev_to_zenei_key --- > elseif a:key == "\<C-q>"
727 名前:724 mailto:sage [2005/12/28(水) 20:00:54 ] >>726 素早い反応ありがとうございます. > 以下のパッチを当ててください。 修正(>>721 以前のスクリプトの挙動になっていること)を確認しました ♪
728 名前:名無しさん@お腹いっぱい。 [2005/12/29(木) 00:23:01 ] gvim は uim 1.0.0 以上の vim 協調モードでOKな気がする。 コンソールは uim-fep でこれまたOK
729 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/29(木) 00:43:00 ] 文章書きたい人には毎回offで始まる協調モードはあまりOKじゃないっす。
730 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/29(木) 01:52:54 ] onだったらコマンド送れないやん
731 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/29(木) 01:54:28 ] そりゃ当たり前。 だからコマンドモードではoff、挿入モードではonまたは前回と同じ状態という 制御が求められるのですよ。
732 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/29(木) 13:34:23 ] >>716 こりゃいーわ imcustomみたいで
733 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/29(木) 14:45:59 ] というかgvimのmbyte.cは腐ってるから、誰か書き直さない?
734 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/29(木) 17:13:53 ] 先生!アボートしますた。 *** glibc detected *** double free or corruption (out): 0x085089e8 *** Vim: 致命的シグナル ABRT を検知しました
735 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/30(金) 18:10:01 ] >>733 そういえば文字化けしまくるな
736 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/12(木) 20:58:14 ] インストールされているカラースキームを数秒ごとにスライドショーのように 表示するスクリプト、作成お願いします。
737 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/12(木) 22:06:03 ] let i = 0 let color_files = globpath(&runtimepath, "colors/*.vim") while i < strlen(color_files) let file = matchstr(color_files, "[^\n]*", i) execute "source " . file redraw echo g:colors_name let i = i + strlen(file) + 1 sleep 1 endwhile
738 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/13(金) 16:21:19 ] 神光臨! それにしても、colors_name を設定していない不届き者が何名がおるの。 自分がインストールしている範囲で、6カラースキームあった。
739 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/14(土) 13:23:56 ] skk.vim取れないよん 再うpよろ
740 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/16(月) 18:23:43 ] skk.vim ちょっとだけしか手を入れてないけど ttp://49uper.com:8080/html/img-s/105893.zip
741 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/18(水) 14:27:05 ] >>740 ありがとうございます。DLできました。
742 名前:739 mailto:sage [2006/01/20(金) 00:55:45 ] あー、ちょっとこのスレ覗かないうちに・・ うpしてくれたけど、もう落とせない・・ ガーソ
743 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/20(金) 17:28:40 ] skk.vim >740 とまったく同じ ttp://49uper.com:8080/html/img-s/106584.zip
744 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2006/01/20(金) 17:38:06 ] >>743 www.kaoriya.net/testdir/skkvim-20060116.zip にコピーを置いておきます。
745 名前:743 mailto:sage [2006/01/23(月) 09:25:21 ] >> KoRoN 様 お手数をおかけして申し訳ありません。 ありがとうございました。
746 名前:743 mailto:sage [2006/01/24(火) 02:27:19 ] >>744 やっと落とせた おおきに!
747 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/26(木) 16:44:31 ] vimスクリプトの関数って2つの値を返す、もしくは引数の値を書き 換えることってできないのですか?
748 名前:mattn@Vim%Chalice mailto:sage [2006/01/26(木) 17:40:25 ] >>747 function! Test() let l = [1, 2] return l endfunction let r = Test() echo r[0] echo r[1] では駄目ですか?
749 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/01/26(木) 17:53:16 ] >>748 それ、vim7ですよね。
750 名前:mattn@Vim%Chalice mailto:sage [2006/01/26(木) 18:00:43 ] そうですね。 vim6 では、セッション変数を利用するしかないと思われます。 # もしくは改行などのセパレータを使った文字列を返す等
751 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/02(木) 02:17:24 ] 知らんかった。感動した。 :let filename = "hoge.txt" :e `=filename`
752 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/03(金) 01:27:09 ] gvimでなくvim(GUIでなくターミナルでvimが起動している)という判定を vimscriptで書くとどうなりますか?
753 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/03(金) 01:34:09 ] :echo has('gui_running')
754 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/03(金) 01:37:35 ] >>752 if has("gui_running") "GUI else "CUI endif
755 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/04(土) 02:50:26 ] >>753-754 ありがとうございました。
756 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/05(日) 09:14:25 ] vim scriptだけでskkが動くのならmigemoもできるかも?
757 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2006/02/05(日) 10:22:44 ] >>756 1行の候補を探せば良いだけのSKKと、探し出した複数行の候補を正規表現へ組み立て なければならないMigemoでは少し事情が違い、大量のCPUとメモリを使ってしまうで しょう。回避策はいくつか考えられますが、実用になる速度+メモリで動くようにな るには少し時間がかかる気がします。
758 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/07(火) 21:23:34 ] scriptの中で % s/a/b/g を実行したときにaが見つからないと ↓ 処理中にエラーが検出されました。 E486: パターンはみつかりませんでした。: a ↑ のようなエラーメッセージが表示されてうるさいので try〜catch文で囲ってるんですがどうもcatchできない みたいです。パターンがなくてもエラーメッセージが 出ないようにしたい場合どうすればいいんでしょうか?
759 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/07(火) 21:26:54 ] %s/a/b/ge :h :s_flags
760 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/02/07(火) 21:59:59 ] >>759 うまくいきますた。謝呀
761 名前:名無しさん@お腹いっぱい。 [2006/02/24(金) 13:46:01 ] :let foo = "Hello World" :echo foo Hello World :let foo = 5 :let bar = "2" :echo "foo+bar=" . (foo + bar) foo+bar=7
762 名前:名無しさん@お腹いっぱい。 [2006/03/14(火) 10:56:49 ] skk.vim お久し振りです。 >>710 への一つの解として Auto Fill モードを付けてみました。 format.vim がロードされてないと自動で折り返しはしません。 デフォルトではトグルキーを <C-k> にマップしてあります。 ttp://aploda.org/dl.php?mode=pass&file_id=0000000092
763 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2006/03/14(火) 11:50:40 ] >>762 おつかれさまです。コピー置いておきます。 www.kaoriya.net/testdir/skkvim-20060314.zip
764 名前:710 mailto:sage [2006/03/15(水) 06:55:59 ] >>762 素晴らしいです.実用には十分です. 現在も100% skk.vimを常用しているので引き続きテストします. 本当にありがとうございます.
765 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/04/10(月) 22:31:47 ] skk.vim すげぇぇぇ!!!!
766 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/04/21(金) 19:51:55 ] 良スレ
767 名前:名無しさん@お腹いっぱい。 [2006/04/24(月) 00:54:56 ] >>751 えと、これはどう解釈したらいいのでしょ? `=foo` の部分がどういう意味の構文だかわからんす。
768 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/04/24(月) 03:46:40 ] :h `-expansion
769 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/05/03(水) 00:48:03 ] テキストファイルがたくさんあって中身に必ず"DT[YYYY-MM-DD]"という文字列が あります(YYYY-MM-DDは年月日)。これらのファイルのうち例えば1989年以降の ファイルだけカウントしたい場合どうしたらよいでしょうか? s/DT\[\([0-9]\{4}\)/\1/g の\1みたいにマッチした文字列を変数に取り出すみたいなことはできるのでしょうか。
770 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/05/03(水) 10:50:12 ] vimよりは、普通にegrep+wcでやっつけたほうが楽だとおもうけど...
771 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/05/03(水) 14:13:38 ] よくわかんないけどこういうの? function! Func() let year = matchstr(getline('.'), 'DT\[\zs\d\{4}\ze-\d\{2}-\d\{2}\]') if year >= 1989 echo "ウホッ" endif endfunction g/DT\[\d\{4}-\d\{2}-\d\{2}\]/call Func()
772 名前:769 mailto:sage [2006/05/03(水) 22:55:57 ] >>771 おおっありがとう。 function! CountPeriod( period ) let s:check_sum = 0 let s:period_sum = 0 bufdo call s:DoCounts( a:period ) echo a:period "以降のファイルは" s:period_sum "個でした。" echo "チェックしたファイル数 "s:check_sum endfunction function! s:DoCounts( period ) g/DT\[\d\{4}[0-9\-,]*\]/call s:Counts( a:period ) endfunction function! s:Counts( period ) let s:check_sum = s:check_sum + 1 let year = matchstr(getline('.'), 'DT\[\zs\d\{4}\ze[0-9\-,]*\]') if year >= a:period let s:period_sum = s:period_sum + 1 endif endfunction こんな感じで思っていた事ができました。
773 名前:名無しさん@お腹いっぱい。 [2006/05/11(木) 17:49:17 ] 不特定多数行の内、 folderの単語の無い行を取り去りたいのですが、どうしたらよいですか?
774 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2006/05/11(木) 18:13:37 ] :g/folder/d かな? 「folderの単語の無い」っていうのの意図がわかりません。
775 名前:名無しさん@お腹いっぱい。 [2006/05/11(木) 18:45:12 ] "folder"という単語が一度も登場しない行の事です。
776 名前:名無しさん@お腹いっぱい。 [2006/05/11(木) 18:53:00 ] 要するに、"folder"が登場する行をコレクトしたいのです。
777 名前:匿名希望@Vim%Chalice mailto:sage [2006/05/11(木) 21:19:53 ] :v/folder/d のことか
778 名前:名無しさん@お腹いっぱい。 [2006/05/11(木) 23:12:54 ] ありがとう匿名の人
779 名前:名無しさん@Vim%Chalice mailto:sage [2006/05/12(金) 23:08:03 ] :g!は:vとも書けるのか、はじめて知った でもスレ違い気味だね
780 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/05/14(日) 21:25:17 ] vim7にしてkaoriyaのパッチを当てたけど、migemoが効かない。 :versionでは+migemoになってるのに。
781 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/05/14(日) 21:26:43 ] スマン。書くスレ間違えた。
782 名前:780 mailto:sage [2006/05/14(日) 21:32:12 ] migemodictが設定されてませんでした。
783 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/08(木) 08:20:17 ] tokyo.cool.ne.jp/hopper2/vimproc.zip Vimスクリプトでプロセス間通信やソケット通信しちゃうライブラリ。 例えばこのように遊べます... let sock = g:vimproc.socket_open("www.yahoo.com", 80) call sock.write("GET / HTTP/1.0\r\n\r\n") let res = "" while !sock.eof let res .= sock.read() endwhile call sock.close() for line in split(res, '\r\n\|\r\|\n') " ... endfor
784 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/20(火) 17:05:11 ] >> 783 おもすれー。 ところで proc.vim の関数定義で書いてある dict ってどういう意味があるのでしょうか。
785 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/20(火) 23:52:54 ] dict を指定した関数では self という変数が暗黙的に使えるようになります。 c++ の this や python の self みたいなもんです。 ディクショナリとともに使い、オブジェクト指向っぽいコードが書けます。 :help Dictionary-function より :function Mylen() dict : return len(self.data) :endfunction :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")} :echo mydict.len() この例だと、selfにはmydictが代入されます。 普通の関数と同じようには呼べません。 :call Mylen() <- これはエラーになる 関数の定義とディクショナリへの設定をまとめてすることもできます。 :help numbered-function より :let mydict = {'data': [0, 1, 2, 3]} :function mydict.len() dict : return len(self.data) :endfunction :echo mydict.len() (この方法で定義した関数には名前ではなく番号が付けられるので、 エラーが起きたときに「関数 3 でエラー」みたいに表示されて泣けます)
786 名前:784 mailto:sage [2006/06/21(水) 11:35:50 ] いえ、dict を指定しなくても self が参照できるため、疑問に思ったのです。 :let mydict = {'data': [0, 1, 2, 3]} :function mydict.len() : return len(self.data) :endfunction :echo mydict.len() という dict を書かない書き方でも self が参照でき、 期待した値が帰ってくるので、dict 書かなくてもいいんじゃないかなぁ、 と思った次第です。
787 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/21(水) 22:03:00 ] あーホントだ。 It is not necessary to use the "dict" attribute for a numbered function. ですね。気づかなんだ。
788 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/22(木) 23:53:45 ] >>784 の vimproc を利用して簡単な HTTP クライアントを作ってみました。 www.bigbold.com/snippets/posts/show/2227 let h = HTTP.new('www.bigbold.com') let res = h.get('/snippets/') echo res.headers if res.code < 400 echo res.body else echo 'error ' . res.code endif などして使うことができます。 エラー処理周りは全くやってないのでお遊び程度にしか使えませんが…。
789 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/23(金) 11:14:41 ] むー、>>783 のやつ面白そうなんだけど、 Windowsでも使えるようにするには、どうやってコンパイルしたらいいんだろー
790 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/23(金) 19:52:23 ] Windowsでも使えるようにしたので適当にどうぞ。urlは同じです。dllも入ってます。 vimproc.dllはVisual Studioでコンパイル、vimproc_mingw.dllはmingwでコンパイル したやつです。たぶん大丈夫だろうけどダメなら交換してください。 pipeは怪しいけど他はそれなりに動くと思います。 ...ちゃんとマニアックな人がいて良かったw
791 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/24(土) 08:11:35 ] >>790 やーべー、言ってみるもんだw ありがとーです。遊ばしてもらいます。
792 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/29(木) 11:15:13 ] skk.vim 毎回毎回同じローマ字ルールを計算するのも無駄なので SkkAddRulesSection() というのを作りました。これはコンパイル済のデータを自分自身に書き込みます。 読み込み時間は多少増えますが、気にならないレベルだと思います。 削除するには SkkDeleteRulesSection() を呼んでください。 あと vim7 にも対応したつもりです。 それと、いつまでも KoRoNさんのところをお借りしているわけにもいかないので、 まっつんさんが言われたように vim.org の scripts に公開してみることにしました。 ttp://www.vim.org/scripts/script.php?script_id=1589
793 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/06/29(木) 16:28:04 ] キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
794 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/07/17(月) 07:31:45 ] function! g:GetHere() redir => str silent function g:Here redir END let lines = split(str, '\n')[1:-2] " 前後のゴミ(関数宣言)を削除 let lines = map(lines, 'v:val[3:]') " 行番号を削除 return join(lines, "\n") endfunction function! g:Here() ねんがんの ヒアドキュメント をてにいれたぞ endfunction let a = g:GetHere() function! g:Here() これは ヒアドキュメントです ウヒョヒョ endfunction let b = g:GetHere()
795 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/07/17(月) 16:25:04 ] >>794 これはどう使うものなんだい?
796 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/07/17(月) 18:39:23 ] どうって言われてもな。見たまんまだよ :fu! g:Here() : テキスト :endf :echo g:GetHere() テキスト
797 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/07/19(水) 22:07:18 ] >>794 うまいね。vimスクリプトでここまでトリッキーな 技は始めて見た。
798 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/08/01(火) 03:41:45 ] Vimの関数はグローバル関数と無名関数の二種類しかないという話。 fun Func() endf fun g:Func() <- Func()とは区別される endf fun g:func() endf fun b:func() endf fun w:func() endf fun s:func() endf fun hogehoge::func() endf 全部グローバル関数。 b:とかw:とかに特殊な意味はなくて、単に関数名にコロンが使えるってことでしかない。 s:func()は特別扱いだけど、<SNR>123_func()という特殊な名前のグローバル関数に 過ぎないので、スクリプト番号さえわかればどこからでも呼び出せる。 ちなみに関数と変数は名前空間が分かれている。
799 名前:カラーロゴなり (1/2) mailto:sage [2006/08/02(水) 11:21:56 ] let h = ["black", "darkblue", "darkgreen", "darkcyan", "darkred", "darkmagenta", "brown", \ "lightgray", "darkgray", "blue", "green", "cyan", "red", "magenta", "yellow", "white"] for i in range(16) execute printf('syn match _%x /\c%x/', i, i) execute printf('hi _%x guifg=%s guibg=%s ctermfg=%s ctermbg=%s', i, h[i], h[i], h[i], h[i]) endfor put =' A ' put =' A2A ' put =' 7777777777777AA222AA7777777777777777' put =' 788888888888822222227888888888888888' put =' 00888888888002222222008888888888000 ' put =' 888888888222222222278888888800 ' put =' 7888888882222222227888888880 ' put =' 788888888222222277888888800 ' put =' 78888888822222278888888802A ' put =' 788888888222277888888800222A ' put =' A7888888882227888888880222222AA ' put =' A2788888888277888888800222222222A ' put =' AA227888888887888888880222222222222AA '
800 名前:カラーロゴなり (2/2) mailto:sage [2006/08/02(水) 11:23:32 ] put ='22222788888888888888880022222222222222A' put =' 2222788888888888888008822222222222200 ' put =' 227888888888888002888222222222220 ' put =' 2788888888888022222222222222220 ' put =' 7888888888002222888228888828888 ' put =' 78888888802222228882288888888888 ' put =' 788888800222222288822882288 88 ' put =' 788888022222222888822882 88 88 ' put =' 788800 222222228882288 88 88 ' put =' 7880 22222228882288 88 88 ' put =' 780 222228882 88 88 88 ' put =' 00 2222888 88 88 88 ' put =' 220 ' put =' 0 '
801 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/08/09(水) 21:47:02 ] メールアドレスを補完する completefunc を作ろうとしたけど 完全なものにするのはかなり大変だとわかった。 誰か改良して。 function! CompleteMail(findstart, base) if a:findstart let line = getline(".") let start = col(".") - 1 while start > 0 && line[start - 1] =~ '[A-Za-z@\.\-]' let start -= 1 endwhile return start else let res = []
802 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/08/09(水) 21:47:57 ] while 1 let match = search('\<' . a:base, "bW") if match <= 0 return res endif let line = getline(".") let b = col(".") - 1 let e = match(line, '[^A-Za-z@\.\-]', b + 1) if e < 0 let e = strlen(line) endif call add(res, strpart(line, b, e-b)) if complete_check() return res endif endwhile endif endfunction set completefunc=CompleteMail
803 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/08/11(金) 16:40:31 ] こんなかんじだろうか function! CompleteMail(findstart, base) if a:findstart let str = getline(".")[: col('.') - 2] let start = match(str, '[[:alnum:]_.-]*\%(@[[:alnum:]_.-]*\)\=$') return start else redir => str silent g/[[:alnum:]_.-]\+@[[:alnum:]_.-]\+/ redir END let mx = '[[:alnum:]_.-]\+@[[:alnum:]_.-]\+' let i = match(str, mx) while !complete_check() && i != -1 let address = matchstr(str, mx, i) if stridx(address, a:base) == 0 call complete_add(address) endif let i = match(str, mx, i + len(address)) endwhile return [] endif endfunction
804 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/08/11(金) 21:04:47 ] >>803 すばらしい。とても勉強になります。 ありがとうございます。 ところでメールアドレスに使える文字の正規表現は けっこう複雑らしい。 www.tohoho-web.com/lng/199809/98090025.htm
805 名前:名無しさん@お腹いっぱい。 [2006/09/11(月) 10:54:33 ] ふと。skk.vim にも変換予測が付かないかと思ってしまった。
806 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/11(月) 18:41:32 ] >>805 変換予測って具体的にはどんなイメージですか?
807 名前:名無しさん@お腹いっぱい。 [2006/09/11(月) 23:22:16 ] 携帯の入力のように かな文を打つている片っ端から 候補が出でくるようなのがあったら良いな、と思いました。 具体的には、 UNIX系で 出ている予測入力システムだと PRIME と言うのがあるようです。 そこに出ている説明ページ taiyaki.org/prime/prime.html にあるような機能です。
808 名前:名無しさん@お腹いっぱい。 [2006/09/12(火) 01:50:44 ] >>807 pitecan.com/OpenPOBox/ POBOXとかどうよ
809 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/12(火) 11:34:21 ] >>807 そこまでいっちゃうと skk じゃないような気がします。
810 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/12(火) 11:46:51 ] skk-dcomp.el みたいなやつ?
811 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/12(火) 11:55:44 ] >>810 そうですね。そこらへんならそんなに操作性も変わらないし。
812 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/14(木) 04:59:12 ] タイマーっぽい set updatetime=1000 autocmd CursorHold * call Timer() function Timer() echo strftime("%c") let K_IGNORE = "\x80\xFD\x35" "特殊な内部コード call feedkeys(K_IGNORE) endfunction
813 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/17(日) 06:00:05 ] 一番でかいvimスクリプトってなんだろう。chalice?
814 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/22(金) 19:01:16 ] >>810 それならuimでできるし。
815 名前:高一 mailto:sage [2006/09/23(土) 10:50:13 ] タイムサービスに勝つスクリプトってありますか? 瞬時に住所、名前とかかけちゃうような・・・ なんでもいいので攻略法あったら教えて下さい
816 名前:名無しさん@お腹いっぱい。 [2006/09/24(日) 08:56:08 ] あげ
817 名前:名無しさん@お腹いっぱい。 [2006/09/24(日) 18:12:57 ] なんで?
818 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/26(火) 19:07:17 ] 外部ファイルから文字読込んで、ループで対象文字を検索して、 それを変数に代入するコードはどんな感じになるでしょうか?
819 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/27(水) 20:14:13 ] こんな感じ? function F(fname, pat) for line in readfile(a:fname) if line =~ a:pat let match = matchstr(line, a:pat) endif endfor endfunction
820 名前:名無しさん@お腹いっぱい。 [2006/09/28(木) 03:49:31 ] setで変数をオプションに代入したいのですがうまくいきません set fdc=3 と定数にするとうまくいきます fun! Outline#Set(...) let fdc_ = 3 if a:0==1 let fdc_ = a:1 endif set foldmethod=expr set foldexpr=Outline#FoldLevel(v:lnum) set fdc=fdc_ "E521: = の後には数字が必要です: fdc=fdc_ endf com! -nargs=? Outline call Outline#Set(<args>)
821 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/09/28(木) 11:34:01 ] >>820 let &fdc=fdc_
822 名前:名無しさん@お腹いっぱい。 [2006/10/02(月) 06:20:22 ] rubyで作った文字列とかvim scriptの変数にいれれるん? fu! Aaaa() let vimstr = "" ruby vimstr = "Hello Ruby!!" ....
823 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/03(火) 19:47:23 ] レジスタとか経由すれば
824 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/04(水) 07:08:18 ] rubydo VIM::command('let g:xyz=45')
825 名前:822 mailto:sage [2006/10/04(水) 22:17:44 ] >>824 できすまた ありがとうございます
826 名前:名無しさん@お腹いっぱい。 [2006/10/13(金) 10:08:09 ] snippetsEmu www.vim.org/scripts/script.php?script_id=1318 このスクリプトがかなり便利なんだけど使っている人いる?
827 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/13(金) 10:56:21 ] >>826 なにできるの?
828 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/13(金) 10:59:04 ] 10行コピーしたレジスタから、1行1行取り出して処理を加えるにはどうすればいいでしょうか?
829 名前:名無しさん@お腹いっぱい。 [2006/10/13(金) 12:25:57 ] >>827 iabbrevで指定位置へのカーソル移動と複数箇所の同時編集をできるようになる。 例えば :Iabbr class class <class><CR>{<CR>public:<CR><class>();<CR>virtual ~<class>();<CR><><CR>}; "class<space>a<S-Del>" と入力すれば class a { public: a(); virtual ~a(); <カーソル位置> } というテキストが入力される。
830 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/13(金) 17:18:03 ] TextMateのエミュか。 まえにTextMateのデモムービー見て感動したなぁ。 使い方も簡単だしけっこう良さげだね。
831 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/13(金) 21:37:19 ] >>828 let lines = split(@@, '\n') for i in range(len(lines)) let lines[i] = "hoge" endfor call setreg("@", join(lines, "\n"), getregtype("@"))
832 名前:名無しさん@お腹いっぱい。 [2006/10/28(土) 00:16:14 ] >>826 code.google.com/p/snippetsemu/source ここからソースを取ってくると最初から定義済みのスニペッツが付いてきて便利。
833 名前:名無しさん@お腹いっぱい。 [2006/10/28(土) 20:52:52 ] >>832 おぉ、
834 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/31(火) 11:28:33 ] こんなのつくってみた。+migemoでない人向け。 if has("migemo") finish endif let cmigemo_cmd = "cmigemo -q -v -d /usr/local/share/migemo/euc-jp/migemo-dict" fun! s:init_cmigemo() let s:in = tempname() let s:out = tempname() let cmd = 'touch ' . s:in . '; mkfifo ' . s:out . "\n" let cmd = cmd . 'tail -f ' . s:in . '|' . g:cmigemo_cmd . '|' let cmd = cmd . 'while read -r line; do ' let cmd = cmd . 'echo "$line" >' . s:out . ';' let cmd = cmd . 'done & jobs -ls' let s:pids = substitute(system("sh", cmd), "\n", " ", "g") au VimLeavePre * call system('kill ' . s:pids) endf fun! s:search_cmigemo(str) if !exists("s:in") call s:init_cmigemo() endif return system('sh', "echo '" . a:str . "' >>" . s:in . '; cat ' . s:out) endf
835 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/10/31(火) 11:29:53 ] 続き fun! s:query_cmigemo(dir) let str = input('migemo' . a:dir) if !strlen(str) return '' endif let str = s:search_cmigemo(str) return strlen(str) ? a:dir . str : '' endf nnoremap <silent> <expr> g/ <SID>query_cmigemo('/') nnoremap <silent> <expr> g? <SID>query_cmigemo('?')
836 名前:mattn@Vim%Chalice mailto:sage [2006/11/01(水) 00:56:47 ] たしかmigemo.vimにも+migemoでない場合の処理が書いてあったと思いますよ。
837 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/01(水) 17:33:40 ] そうなんだけど検索するたびにcmigemoを起動して辞書を読むのを避けて 2回目以降は前に起動したのと会話するようにしたつもりなんだけど...
838 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/09(木) 00:55:39 ] 文章整形プラグインを作ってみました。 yukihiro.nakadaira.googlepages.com/autofmt.vim ~/.vim/autoload/ にコピーして :set formatexpr=autofmt#FormatExpr() と設定すれば使えます。 あんまりテストしてません。細かい設定とかできません。
839 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/22(水) 06:01:20 ] gVimなんですが、ウインドウのサイズって取得できますか? やりたいのは 1. サイズ取得して変数x, y にいれとく 2. フォントのサイズを変える 3. winsize x y でサイズを戻す これだけなんですが。
840 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/22(水) 16:50:23 ] let x = &columns let y = &lines
841 名前:839 mailto:sage [2006/11/22(水) 20:21:12 ] >>840 ありがとうございます。 ちょっと勘違いしていました、winsizeはピクセルで指定するものだと・・ フォントのサイズを変えると、ウインドウのサイズも変わってしまうので それを防止したかったんです。
842 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/27(月) 13:07:08 ] vimにて、 :split FILE などで、別ディレクトリにあるファイルを開いたとき、 また、 ^W h などで、ウィンドウ(?)を切り替えたときに 自動でそのファイルがあるディレクトリにチェンジディレクトリするようにするには どうすればよいでしょうか?
843 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/28(火) 01:09:34 ] :set autochdir または :autocmd BufEnter * :cd %:p:h たぶん
844 名前:852 mailto:sage [2006/11/28(火) 09:30:37 ] >>843 思い通りの動作をするようになりました。 どうもありがとうございます。
845 名前:名無しさん@お腹いっぱい。 mailto:sage [2006/11/28(火) 15:35:25 ] let count = 1 E46: Cannot change read-only variable "count" (゚Д゚)
846 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/10(水) 04:17:20 ] vimwiki の incbufswitch.vim を使いやすくするべく改造 していたんですが、いつのまにか echo "\r" が効かなく、 候補リストが複数行にわたる場合、前の表示が残るように なってしまいました。どこを直せばいいでしょうか? command! ISwitchB :call ISwitchB() hi link ISWitchBCurrent Search hi link ISWitchBOnlyOne IncSearch function! ISwitchB_ShowList(buflist, partial_name, current) echon "\riswitch " . a:partial_name . "{" let i = 0 for fname in a:buflist if i != 0 echon "," endif if i == a:current if len(a:buflist) == 1 echohl ISWitchBOnlyOne else echohl ISWitchBCurrent endif endif echon fname if i == a:current | echohl None | endif let i = i + 1 endfor echon "}" endfunction
847 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/10(水) 04:18:39 ] function! ISwitchB() let orig_bufnr = bufnr("%") let altbufnr = bufnr("#") let lastbuf = bufnr("$") let allbuflist = [] " 代替バッファ # がリストの先頭に来るように if bufexists(altbufnr) != 0 && buflisted(altbufnr) call add(allbuflist, expand("#" . altbufnr . ":t")) endif let i = 1 while i <= lastbuf if bufexists(i) != 0 && buflisted(i) && i != altbufnr && i != orig_bufnr call add(allbuflist, expand("#" . i . ":t")) endif let i = i + 1 endwhile let buflist = allbuflist let partial_name = "" let current = 0
848 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/10(水) 04:20:21 ] while 1 call ISwitchB_ShowList(buflist, partial_name, current) let c = getchar() if c == 13 " <CR> 決定 exe "silent buffer " buflist[current] break elseif c == 27 || c == 3 " <ESC> or <C-c> キャンセル echon "\r " break elseif c == "\<BS>" let partial_name = strpart(partial_name, 0, strlen(partial_name)- 1) if partial_name == "" | break | endif elseif c == 9 " <tab> 次のマッチを選択 let current = current + 1 >= len(buflist) ? 0 : current + 1 else let partial_name = partial_name . nr2char(c) endif let buflist = ISwitchB_FilterBufList(allbuflist, partial_name) endwhile " Hit Enter が出ないように call feedkeys("\<left>\<right>") echo endfunction
849 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/10(水) 04:22:43 ] function! ISwitchB_FilterBufList(buflist, partial_name) let result = [] for fname in a:buflist if a:partial_name == "" || stridx(fname, a:partial_name) >= 0 call add(result, fname) endif endfor return result endfunction
850 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/10(水) 09:45:24 ] 別のやり方としてこんなのはどうかな? --- incbufswitch-color.vim.orig Tue Jan 9 17:36:31 2007 +++ incbufswitch-color.vim Wed Jan 10 09:26:21 2007 @@ -103,6 +103,7 @@ " Perform an incremental buffer switch " function! <SID>IncBufferSwitch() + let v:scrollstart = "" let origBufNr = bufnr("%") let partialBufName = "" let s:tabStop = 0 @@ -155,4 +156,7 @@ "echon ' {'.s:buflist.'}' call ShowBuflist(partialBufName, s:buflist) endwhile + if v:scrollstart != "" + call feedkeys("\<CR>") + endif endfunction
851 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/10(水) 23:03:32 ] ちらついても構わないなら毎回 :redraw! で再描画するとか 個人的にはwildmenuを使った標準的な方法をお勧めする (:buffer <Tab> および :help :command-completion)
852 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/11(木) 03:58:25 ] HIT ENTERはfeedkeysで解決できることわかったんですが、 なぜか846のバージョンだと、候補リストが全部消え切らず、残ってしまうんですよ。 一行だけの場合は\rで行頭復帰してそこに上書きするので 前回の候補リストが消えるのですが。 もとのincbufswitch-colorと表示の方法は変えていないし、 なぜこうなってしまったのか原因も気になるんですよね。
853 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/12(金) 00:49:05 ] redraw してないから
854 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/12(金) 02:12:33 ] >>853 ISwitchB_ShowList()の1行目にredrawをいれたら直りました。 ありがとうございます。 けど実用上はlookupfile.vimがあれば十分かもしれないですね。 ttp://subtech.g.hatena.ne.jp/secondlife/20070105/1167980175 このプラグインは本当にすごい。 >>851 確かにvim標準の方法で満足できるならベターですけどね。 しかし、そのためにはvim標準の設定・機能は利便性が低過ぎると いつも感じます。
855 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/12(金) 19:58:53 ] エコーエリアをクリアする関数と Press ENTER プロンプトを表示しない :echo は欲しいね
856 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/17(水) 20:41:00 ] 名無しに反応するオートコマンド :autocmd WinEnter {} :echo "hoge" オートコマンドで否定のパターンは使えないのかなぁ *.txt以外のファイルみたいな
857 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/18(木) 20:15:13 ] au WinEnter * if expand("<afile>")=~? '\.txt$'|echo|endif amatchとかafileで判定すればいいんじゃない?
858 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/23(火) 22:57:20 ] >>716 に出てた yukihiro.nakadaira.googlepages.com/#uim-vim これってvim7じゃ動かないのかなぁ? Error detected while processing function <SNR>16_input..10..22: とか E10: \ should be followed by /, ? or & Press ENTER or type command to continue Error detected while processing function <SNR>16_input..10..22: とかいうエラーがでまくるんだが
859 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/26(金) 19:04:59 ] >>858 むしろ vim7 でしか動かないです。 E10 エラーは行継続の \ が原因だと思います。 compatible モードで使ってたりするんでしょうか。 行継続を使わないように変更したので新しいやつを試してみてください。
860 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/27(土) 15:19:23 ] >>859 compatible モードで使ってました でも新しいやつ試したら日本語入力でキタ━━━━(゚∀゚)━━━━!!!!!! ありがとうございます でも今度は日本語入力モードでバックスペースすると ??b が入力される・・・ 文字コードUTF-8にしたら平気だった EUC-JPじゃ無理ですか?
861 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/27(土) 17:22:24 ] >>860 修正したので新しいの使ってみてください。
862 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/27(土) 18:57:02 ] >>861 できるようになりました ありがとうございます! これでnvi+canna捨てられるかも
863 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/02/04(日) 23:57:23 ] C言語のファイルを開いたときに適切なインデント設定をするスクリプト 単純だけどけっこう楽になった いろんな言語を認識できるようにしたら便利だろうなぁ だれかやってくんないかなぁ… autocmd FileType c,cpp call s:SetIndent() function! s:SetIndent() let pos = getpos('.') if search('{$') != 0 && search('^\s\+\S', 'W') != 0 let &l:shiftwidth = indent(line('.')) let &l:softtabstop = indent(line('.')) let &l:expandtab = (search('^\t') == 0) endif call setpos('.', pos) endfunction
864 名前:名無しさん@お腹いっぱい。 [2007/03/28(水) 21:41:19 ] getchar()の使い方が良く分からない。 下記のスクリプトでは、 Aで、"私の名前は"を表示する Bで、入力する Cで、入力した内容を表示して、その後に"です。"を表示する の様な処理をしたいのですが、実際は下記の様になります。 1. Bで入力をするまで、何も変化は発生しない。 2. Bで入力をすると一気にAとCを表示する。 どこが、まずいのでしょうか?そもそもが、出来ない事をやろうとし ているのだろうか? @function! s:Map(...) A execute "normal i私の名前は\<esc>" B let s:name=getchar() C execute "normal a" . s:name . "です。\<esc>" Dendfunction
865 名前:名無しさん@お腹いっぱい。 [2007/04/20(金) 19:23:18 ] libcallで呼び出されたCの関数のなかでvimの組み込み関数を呼ぶ仕組みは用意されてますか? 高速に補完用のリストを作るためにcall complete_add相当をCの関数の中から呼びたいです libcallの戻り値をcomplete_addに渡すと長い文字列のコピーが行われてしまうかもしれないのでCの関数から直接complete_addを呼びたいです
866 名前:名無しさん@お腹いっぱい。 [2007/04/20(金) 19:25:58 ] 沖縄県の方へ(命に関わる注意事項です) 沖縄県での選挙ですが、どうか民主党だけは避けてください。県民の生命に関わる可能性があります。 民主党の最大の公約は一国二制度(※)ですが、一度「一国二制度 沖縄 三千万」で検索をお願いします。 この際、民主党のHPで調べても良いです。以下の注釈↓と矛盾することは書いてないはずですから… ※一国二制度 簡単に言えば沖縄を中国と日本の共有物にし、そこに3000万人の中国人を入植させます。 (つまり沖縄人口の 96% を中国人にして、実質、沖縄を中国人の居住地とします。) さらに「自主」の名の下、沖縄で有事が起きても自衛隊は干渉できません。 3000万人の中国人が、少数派となった130万人の日本人に何をしても、です。 そして反日教育を受けた中国人の反日感情の強さは、ほとんどの日本人の理解を超えるものです。 今回の選挙で民主党が勝った場合、「自主」「発展」を連呼しつつ段階的に進めていくことになります。 自主と言っても、自主を認めるのが「住人の96%が中国人となった」後だということに気をつけてください。 発展と言っても、新沖縄の少数派となった「少数民族日本人」の発展ではないことに気をつけてください。
867 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/04/21(土) 10:20:51 ] >>865 pythonの拡張を作ってその中からでvim.eval()を呼ぶみたいな方法しかないとおもう はやいかどうかはしらん
868 名前:初心者 [2007/05/02(水) 13:44:56 ] GVim7で関数のリファレンスの使い方が良く分かりません。下記で次 の現象となります。どこが悪いのでしょうか? 最初にリストを送ります。 01 if exists("loaded_ShuffleB") 02 finish 03 endif 04 let loaded_ShuffleB=1 05 command! -nargs=? ShuffleB :call <sid>Map(<q-args>) 06 function! s:Map(...) 07 let b:pgname = ["<SID>This1","<SID>This2","<SID>This3"] 08 let b:Prg=function(b:pgname[1]) 09 imap <buffer> <silent> o O<c-o>:call b:Prg("O")<cr> 10 endfunction 11 12 function! s:This1(current) 13 exec "normal o" . a:current . "最初はグー" 14 endfunction 15 16 function! s:This2(current) 17 exec "normal o" . a:current . "最初はチョキ" 18 endfunction 19 20 function! s:This3(current) 21 exec "normal o" . a:current . "最初はパー" 22 endfunction
869 名前:初心者 [2007/05/02(水) 13:47:18 ] 先のリストで、下記のエラーが出ます。 どこが悪いのでしょうか? 1. pgnameに<SID>を付加した場合(7行目) oを入力した時にOを表示して下記のエラーが出る E120: スクリプト以外で<SID>が使われました:<SID>This2 2. pgnameの<SID>を外した場合(7行目) 起動時にE700: 未知の関数です: This2が表示される。 oを入力した時にOを表示して、下記のエラーが出る E117: 未知の関数です: b:Prg
870 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2007/05/03(木) 00:02:52 ] >>868-869 "<SID>This2"を"s:This2"という風に書き換えてみてください。
871 名前:初心者 [2007/05/03(木) 13:01:04 ] KoRoNさん、早速ありがどう御座いました。7行目のみ下記の様に変更 しました。 let b:pgname = ["s:This1","s:This2","s:This3"] 実行しましたら、今度は下記のエラーが出ます。 E120:スクリプト以外で<SID>が使われました: s:This2 Windows XP KaoriYaからのVim7.0.216 14-mar-2007を使っています。 頭の悪い初心者ですが、1つ宜しくお願いします。
872 名前:初心者 [2007/05/03(木) 13:14:31 ] 全体を下記の様に、修正したら今度は動作する。動いた理由と、前回 のが動かなかった理由が、さっぱり分からない。 下記に今回の内容を示します。 if exists("loaded_ShuffleB") finish endif let loaded_ShuffleB=1 command! -nargs=? ShuffleB :call <sid>Map(<q-args>) function! s:Map(...) let b:pgname = ["b:One","b:Two","b:Three"] let b:Prg = function(b:pgname[2]) call b:Prg(10) imap <buffer> <silent> o O<c-o>:call b:Prg(31)<cr> endfunction function! b:One(current) exec "normal o" . a:current . "最初はグー" endfunction function! b:Two(current) exec "normal o" . a:current . "最初はチョキ" endfunction function! b:Three(current) exec "normal o" . a:current . "最初はパー" endfunction
873 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2007/05/03(木) 15:49:43 ] >>872 function! s:MyFunc() return 321 endfunction let Fn = function('s:MyFunc') echo Fn() こういうスクリプトをtest.vimとして保存して、so test.vimをすると動きます。と いうことは、もしかしてfunction('s:...')の、s:の評価は実行時のコンテキストに 依存するのかもしれませんね。
874 名前:初心者 [2007/05/03(木) 16:36:43 ] KoRoNさん、返事有り難う。しかし、最初から実行時のコンテキス トと言われても、範囲が広すぎて途方に暮れる。この場合のコンテキ ストは、何でしょうか? エラーメッセージでは、スクリプト以外で<SID>が使われましたです が、他のスクリプトでは使っていません。実行時に何が影響するのだ ろうか?初心者は挫折しそうだ。
875 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2007/05/03(木) 18:02:35 ] >>874 挫折して済む話ならば、挫折しちゃったほうが良いかも知れませんよ。 まずb:の時に動くのは、それがバッファに対して定義された関数だからです。 ShuffleBを実行したのがそのスクリプトを読み込んだのと同じバッファであれば、特 定可能で呼出せることになります。逆にいうとスクリプトを読み込んだ後で、別の ファイルを開いてそちらにカーソルがある状態でShuffleBを実行すると、そのファイ ル用のバッファには関数が定義されていませんから動かないでしょう。 s:についてはちょっと実験してからもう一度書きます。
876 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2007/05/03(木) 18:09:07 ] >>874 っていうか、このスクリプトはどういう目的で何をしようとしているのですか? なんかいろいろ間違ってる気がしてきました。
877 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2007/05/03(木) 19:22:50 ] >>874-875 実験してみました。結論からいうと>>870 は誤りで、>>873 で示唆したように、s:や <SID>の評価が参照解決の実行時のコンテキストに依存している、ということになり ます。まずはこのスクリプトをみてください。 function! s:MyFunc() echo "MyFunc is executed" endfunction let g:FnRef = function('<SID>MyFunc') function! s:KickMyFunc() call g:FnRef() endfunction command! -nargs=0 KickMyFunc :call <sid>KickMyFunc() このスクリプトを実行するとグローバル変数g:FnRefにs:MyFuncへの関数リファレン スが格納されます。コマンドKickMyFuncを実行した際には関数s:KickMyFuncを経由し てg:FnRefが呼出され、正しくs:MyFuncを呼出すことができます。一方、コマンドラ インで:call g:FnRef()と直接呼出した場合にはE120が発生します。これはつまり、 関数の参照解決はfunction()ではなく実際の関数の呼出し時に行われるので、<SID> を含むFuncRefは同じスクリプト内からでなければ使えない、ということです。 >>868 の例で言えば、imapで実行されるb:Prgは、Vimにとってスクリプト内の出来事 ではありませんから<SID>を含む参照が解決できていないのでしょう。なおmapであれ ば:help :map-scriptにあるとおり<script>を使うことで解決できそうです。でもス クリプトローカルな関数のFuncRefを別のスクリプトに渡して実行させる、というこ とはちょっとできそうにないですね。
878 名前:初心者 [2007/05/08(火) 20:32:57 ] 休暇で岩登りの為、両手両足が使えず。返事が遅くなりました。懇 切丁寧な回答有り難う。良く分かりました。頑張ってみます。
879 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 19:21:33 ] 日本語全角モードになってたとき ESC押せば、全角モードも同時に消えるようにするには、 どうしたらいいのだろうか
880 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/05/21(月) 20:30:27 ] >>879 gvimならこれでいけるけど、コンソールのvimだとむりぽ? 香り屋氏のgvimrcより抜粋 " 日本語入力に関する設定: " if has('multi_byte_ime') || has('xim') " IME ON時のカーソルの色を設定(設定例:紫) highlight CursorIM guibg=Purple guifg=NONE " 挿入モード・検索モードでのデフォルトのIME状態設定 set iminsert=0 imsearch=0 if has('xim') && has('GUI_GTK') " XIMの入力開始キーを設定: " 下記の s-space はShift+Spaceの意味でkinput2+canna用設定 "set imactivatekey=s-space endif " 挿入モードでのIME状態を記憶させない場合、次行のコメントを解除 "inoremap <silent> <ESC> <ESC>:set iminsert=0<CR> endif
881 名前:名無しさん@お腹いっぱい。 [2007/06/04(月) 08:58:22 ] Hacking Vim: A Cookbook to get the Most out of the Latest Vim Editor (Paperback) by Kim Schulz (Author) www.amazon.com/Hacking-Vim-Cookbook-Latest-Editor/dp/1847190936/ref=sr_1_1/104-7688553-6715938?ie=UTF8&s=books&qid=1180914185&sr=8-1 題名のとおり、Vimスクリプトによる拡張やカスタマイズ、その他のディープな機能に的を絞った本らしい。
882 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 17:00:40 ] vimのscriptの勉強をしてます。 :lsした時に取れる、各bufferのstatusってどうやったらvimのscript上から取れるのでしょうか? 例えばイジってあるbufferである+のstatusとか。 一応次ぎのようなscriptで、一覧を取得出来る所までは出来ました。 続く
883 名前:882 mailto:sage [2007/06/04(月) 17:02:26 ] 続き command! -nargs=? EnumBufs :call <SID>EnumBufs(<f-args>) function! s:EnumBufs(...) let arg = "^.*$" if a:0 == 1 let arg = a:1 endif let buf_idx = bufnr("$") let bufnames = [] while buf_idx > 0 try if ! bufexists(buf_idx) || ! buflisted(buf_idx) continue endif let bufname = bufname(buf_idx) let bufnum = bufnr(buf_idx) if bufname =~ arg call add(bufnames, [ bufnum, bufname ]) endif finally let buf_idx -= 1 endtry endwhile echo s:list2str(bufnames) endfunction 続く
884 名前:882 mailto:sage [2007/06/04(月) 17:03:21 ] 続き function! s:list2str(list) let output = "" for buf in a:list let output .= buf[0] . ":" . buf[1] . "\r\n" endfor return output endfunction 以上
885 名前:882 mailto:sage [2007/06/04(月) 17:06:12 ] あー、indentが崩れてる。ごめんなさい。。。
886 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/04(月) 23:51:12 ] >>882 + &modified = &modifiable bufloaded() &buflisted h bufwinnr() statのような便利なものはないのでヘルプを見ながらがんばりんさい。 バッファエクスプローラプラグインはたくさんあるから参考にするといいかも。
887 名前:882 mailto:sage [2007/06/05(火) 23:43:00 ] 出来ました。thx。 ずっと関数だと思って、optionは探していなかったよ。
888 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 14:46:24 ] >>881 amazon.co.jpだと 通常3~5週間以内に発送します なんだが、もっと早く手に入るところってないかな?
889 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/06(水) 17:58:43 ] >>881 ebookで買ってみた。 内容は、ディープとまでは感じなかった。Vimスクリプトバリバリ書いてる人は必要なし。 ヘルプにも書いてあるような解説+こう使うと便利になるよというサンプル少々。 >>803 のCompleteMailやvim wikiのAutoSaveSessionに似たスクリプトも書いてあった。 やはりこれを買うよりヘルプ、vim wiki、vim onlineのTipsを熟読した方がいいと思う。
890 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/14(木) 12:50:55 ] 質問です. 「文章中にある文字列をもとに 辞書を引く」…というような スクリプトを書こうとしています. 「カーソル位置の単語を拾い出す」のは expand("<cword>") で…簡単に作ることができたのですが でも 調べたい(拾いたい)文字列が 丁度 単語単位とは限らないので 「自分で範囲選択した箇所を スクリプトに渡せるようにしたい」と 考えています. (小文字の)v キー&範囲選択直後に, その「選択中の文字列」を 取り出すには どうしたらよいのでしょうか? <cword> 同様に, 範囲の中身が取り出せるキーワードが あるような気がするのですが…なかなか探せない.... あるいは 選択範囲の 開始&終了の文字位置 が分かれば それを手がかりに 取り出せると思うのですが これもわからない... (どちらも「行単位」なら楽勝なのですが) …というわけで 何か分かるかた 以上よろしくお願いします.
891 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/14(木) 21:21:08 ] いったんレジスタにヤンクするのが定石だと思う。 function! Select() let a_save = @a normal! gv"ay let selected=@a let @a=a_save return selected endfunction function! Dict(word) echo "「". a:word . "」の意味はわかりません" endfunction vnoremap \d <Esc>:call Dict(Select())<CR>
892 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/14(木) 21:34:49 ] expand('<selected>') みたいなものがあればいいのにな と思う。
893 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/14(木) 22:43:06 ] >>891 normal! gv"ay だけで もう満足です(笑)なるほど gv って コマンドも 今,知りました 以上 ありがとうございました.
894 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/06/29(金) 16:49:21 ] >>795 いまさらなんだけど このヒアドキュメントで関数名と関数定義をとりだして、 関数名をごにょごにょして、スクリプト内の関数にevalさせれば、 外部から動的に関数できる function! pluginHoge#eval(source_func_name,new_define_name) let savelist=&list setlocal nolist redir => str exec "silent function " a:source_func_name redir END let &list=savelist let lines = split(str, '\n') let lines[0]=substitute(lines[0],'function[^(]\+',"function! ".a:new_func_name,'') let lines = map(lines, 'v:val[3:]') let str = join(lines, "\n") exec str endfunction
895 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/18(水) 03:28:53 ] VimのrangeとPythonのrangeって違うのね。 Vim: range(2, 3) => [2, 3] range(2, 2) => [2] range(2, 1) => [] range(2, 0) => エラー Python: range(2, 3) => [2] range(2, 2) => [] range(2, 1) => [] range(2, 0) => []
896 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 00:45:26 ] 関数名はけっこうアバウト fun! <SNR>99_func() endfun fun! <SNR>func() endfun fun! hoge:func() endfun fun! hoge::func() endfun fun! foo:bar:func() endfun
897 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/29(日) 23:48:10 0] >>896 解説キボン
898 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/30(月) 19:37:54 ] スクリプトのローカル関数(s:func() or <SID>func())はVim内部では <SNR>99_func()という名前(数字はスクリプト番号)のグローバル関数になってるんだけど 実は直接 :function <SNR>99_func() と書いて関数を定義できる。(:callもok) だからスクリプトのローカル関数を外部から変更できてしまう。(ただしs:var変数にはアクセスできなさそう) let sid = GetSid("plugin.vim") " redir + scriptnames で番号取得 function! <SNR>{sid}_func() ... endfunction 名前が正しいかどうかはチェックしてないみたいなので存在しないスクリプト番号が使えたり番号指定がなくても大丈夫だったりする。 そんで、おそらくs:func()とかが使える関係で関数名にコロンが使えるようになってるけど その辺の処理は適当らしくてhoge:func()とかfoo:bar:func()とかいう名前も使える。(変数名はダメらしい) どちらもundocumentedな動作。
899 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/07/30(月) 23:12:59 ] >>898 解説サンクス。 スクリプトローカル関数を外部から変更する方法は欲しいね。 Vim onlineにあるスクリプトはどうもイマイチなのが多くて 手を加えたくなってしまう。 あと話はずれるけど、プラグイン内で勝手にマッピングを 作るのはやめてほしい。 プラグインでは関数定義だけを提供して、.vimrcでそこへのマッピングを 作るのが理想だと思うのだが。 それプラス、 (iswitchb-default-keybindings) みたいにマッピングを作る関数を提供するとか。
900 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/06(月) 19:05:18 ] >>899 もっともな意見なので自作スクリプトを修正するよ。後で。
901 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/06(月) 20:40:46 ] NERDTreeでは let g:NERDTreeMapOpenSplit = 'i' という変数を定義することでOpenSplit機能へマッピングするキーを 変更できるようになってるね。 この辺の作法が統一されればいいんだけど。
902 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/08(水) 06:47:00 ] :exe "exe \"exe \\\"exe 'new'\\\"\"" どんくらいネストできるんだろw
903 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/13(月) 02:20:25 ] >>899 >それプラス、 > (iswitchb-default-keybindings) >みたいにマッピングを作る関数を提供するとか。 いまそれやろうとして気付いたけど、最初に読み込まれるのは~/.vimrcだから、 そういう関数を呼ぼうにもまだ定義されていないという。 と書いてau VimEnter経由で呼べば良いことに気付いた。
904 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/08/13(月) 09:15:53 ] 関数じゃなくてフラグ変数にすればいいんじゃない? let g:iswitchb_default_keybindings = 1
905 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/15(月) 09:53:15 ] >>863 これがそうかも。 www.vim.org/scripts/script.php?script_id=513
906 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/24(水) 14:38:03 ] vim 7.1以内で関数名と変数名の扱いで挙動が変わったようだ?? :let Fn=function("A") :let Fn=function("B") みたいな関数参照の再代入ができなくなった。E705がでる 場合に応じて関数名を繋ぎかえて動かしてた人は動かなくなる 対策として :let fnlist=[function("A"),function("B")] :call call(fnlist[1],[]) :call fnlist[1]() とか :let fndict={"A":function("A"),"B":function("B")] :call call(fndict["A"],[]) :call fndict.A() とかして、当面は切り抜けるとよいと思う どっかに変更の記述てあるのか
907 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/24(水) 23:48:06 ] >>906 :let Fn=function("A") :let Fn=function("B") エラーでないけど。
908 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/25(木) 10:23:47 ] >>907 うおー別ので試したらでなかった うちのkaoriyaのwindows gvim7.1 10月13日コンパイルバージョンだけでる
909 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [2007/10/25(木) 23:12:55 ] 7.1.098のパッチの副作用みたいです。香り屋のバージョンでいうと20070831から 20070909の間ですね。 > Patch 7.1.098 > Problem: ":call s:var()" doesn't work if "s:var" is a Funcref. (Andy Wokula) > Solution: Before converting "s:" into a script ID, check if it is a Funcref. 試しにこのパッチを外してコンパイルしてみたら、エラーがでなくなりました。
910 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/26(金) 10:41:40 ] >>909 ありがとう 当面困ってなかったので古いバージョンに戻しておきます
911 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/29(月) 17:00:40 ] :s//\=/ と eval を組み合わせると簡易テンプレートエンジンになる たとえば これが: 今の時間は ${strftime("%c")} :%s/${\([^}]*\)}/\=eval(submatch(1))/g こうなる: 今の時間は 2007/10/29 16:55:21
912 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/31(水) 17:21:56 ] すいません。 現在のカーソル位置が行末がどうかを調べるにはどうすればいいでしょうか?
913 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/31(水) 17:30:54 ] getpos(".") の現在位置のうちの列と len(getline(".")) が同じとかどうよ
914 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/31(水) 17:54:30 ] if getpos(".")[2]==strlen(getline(".")) | echo "at the end" | endif 行末の2バイト文字上に、カーソルがあるとダメだった。 # ver7 のヘルプ全然読んでいないから getpos() の戻り値に驚き。w なんかスゲー面倒。 command! IsEnd call <sid>IsEnd() function! s:IsEnd() let ls=getline(".") if ls==# '' echo '行末' else "カーソル位置から、行末まで全部。 let str=matchstr(ls, '.\+', col('.')-1) "カーソル位置の1文字 let chr=matchstr(ls, '.', col('.')-1) if str ==# chr echo '行末' else echo '行末じゃない' endif endif endfunction
915 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/10/31(水) 18:10:13 ] " >>912 " これでどうだろう? function! IsTheCursorAtTheEndOfLine() return search('\%#.$', 'cn') endfunction
916 名前:912 mailto:sage [2007/10/31(水) 19:55:59 ] おお!皆さんありがとうございます。 自分で作ったスクリプトが挙動不審だったので皆さんのヤツで試してみます。 更に質問なんですが、現在開いているバッファの数ってどうやって取得するんでしょうか? 何も開いてないかどうかを知れたらそれでいいのですが。 よろしくお願いします。
917 名前:914 mailto:sage [2007/10/31(水) 22:47:10 ] >>915 それすごいな。 search() のオプションとか知らなかった。
918 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/01(木) 10:29:15 ] もしかするとこんな感じでやるしかないかな? function! BufCount() let cnt = 0 let lastbufnr = bufnr("$") let i = 1 while i <= lastbufnr " :lsで表示されるものだけカウントする if bufexists(i) && buflisted(i) let cnt += 1 endif let i += 1 endwhile return cnt endfunction
919 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/01(木) 10:33:32 ] 空バッファをカウントしたくないなら条件に↓を追加 && bufname("%") != ""
920 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/01(木) 12:28:00 ] バッファのカウントなら tabpagebuflist() 使うといいかもしれない
921 名前:912 mailto:sage [2007/11/01(木) 12:58:22 ] みなさんありがとうございます。 とりあえずコピペで動いてくれています。 tabpagebuflist()という名前にまた錯乱ぎみなんですが、 VIMはタブとバッファは完全に別物で、 データとビューの関係なんですよね? あとヘルプによく出てくるウィンドウ(変数でいう「w」)ってのはサーバーの事なんでしょうか? グローバル(g)との違いが分かりません。
922 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/01(木) 13:21:41 ] >VIMはタブとバッファは完全に別物で、 >データとビューの関係なんですよね? そう。ウィンドウは:spなどで分割できるやつのこと。 let w:hoge = 1 とかすると、hogeはそのときのカレントウィンドウでのみ参照可能になる。 :h w: で出てくる。日本語版ヘルプもあるからその辺読むといいよ。 yukihiro.nakadaira.googlepages.com/#vimdoc :h 41.2 のユーザーマニュアルの方がわかりやすいかな。
923 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/01(木) 13:30:45 ] こんなんでもよくね len(filter(range(1,bufnr('$')),"buflisted(v:val) && bufexists(v:val)"))
924 名前:912 mailto:sage [2007/11/01(木) 13:42:57 ] >>922 ははー、ウインドウはTABや分割された領域単位って事ですね。 って事はグローバル(g)がサーバー(exe)単位ですね。 >>923 ・・・ちょっとマニュアルとにらめっこしてきますw
925 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/01(木) 14:15:56 ] range(1,8) => [1,2,3,4,5,6,7,8] みたいな配列つくって それをfilter()でいるものだけ取り出したんだよ buflited()とbufexists()は真なら1を返すのでandした 例 filter([1,2,3],1) => [1,2,3] filter([1,2,3],0) => [] filter([1,2,3,4,5,6],"(v:val % 2) == 0") => [2,4,6] filter([1,2,3,4,5,6],"(v:val % 2)") => [1,3,5]
926 名前:912 mailto:sage [2007/11/01(木) 14:50:07 ] なるほど!perlの正規表現でいえば、「e」ですな。 それを全要素に対して処理をしてくれると。 こうやって勉強してみるとVIMスクリプトはしょぼいしょぼい言われているけど、 ネットワーク関連の組込み関数がない(?)ぐらいで、それほどひどかないですよね。
927 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/24(土) 12:25:16 ] :echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++3
928 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/24(土) 13:04:27 ] 機能という点では何とでもなるけど exコマンドが元になってるからスクリプト言語としては 根本的に文法が腐ってると思います まあよしあしですけども
929 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/25(日) 00:24:37 ] 文法なんてこんなもんじゃないかな いわゆる一つの言語的機能と普通のコマンドが混在してるから慣れが必要だけど
930 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/26(月) 09:15:26 ] 文法はなれれば我慢できるが、exコマンドが元になってるから機能的に腐ってる。 関数によって特殊文字にエスケープが必要だったりそうじゃなかったり。 bunname()とかわけわからん。 オプションの退避とかカーソル、レジスタの復元とか書かせるのも勘弁。
931 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/26(月) 19:50:36 ] > 関数によって特殊文字にエスケープが必要だったりそうじゃなかったり。 そんな関数あったっけ
932 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/27(火) 13:07:14 ] bufname() file-patternが展開される。代替ファイルは"#"または0 bufnr() bufname()と同じ。でも"$"で最後のバッファ。 bufexists() 展開されない。代替ファイルはbufexists(0) vimはCの関数がすでにコマンドべったりで書かれてるからなあ。
933 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/28(水) 01:08:53 ] なるほど。 他にはなんかある?
934 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/28(水) 10:12:55 ] winheight(0) => 現在のウィンドウの高さ winnr(0) => エラー winnr("%") => エラー winnr() => 現在のウィンドウの番号 winnr("#") => 最後にアクセスしたウィンドウの番号 winnr("$") => 最後のウィンドウの番号 とか。カレントを表すのも関数によって"%"や"."だったりするけど、 一応バッファが"%"で行が"."になってるのかな。 エスケープについては、関数だけじゃできなくて、文字列を組み立てて :exe するときがけっこう嫌らしい。
935 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/28(水) 17:17:04 ] じらさないで全部教えてくれよ(;´Д`)ハァハァ
936 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/28(水) 17:27:46 ] >>935 :h
937 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/28(水) 18:01:02 ] :echo +-+-3 :echo 1++-+-3
938 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/29(木) 16:23:03 ] そういや一時期Ctrl+@にESCあててたな 日本語ノートね 無変換、前候補、かたかな・ひらがな、でもホームに近い余ってるキー いくらでもあるからな そういやスペースの両隣のキーにshiftあてるのがエルゴノミクスとか周りではやった
939 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/11/29(木) 17:32:40 ] 本スレと勘違いしたか
940 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/03(月) 00:28:47 ] バッファの変更と、その内容をフックしたいのですが、できますかね?
941 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/03(月) 02:18:39 ] インサートモードで入力したテキストだけならこんな感じでできそうだけど。 augroup meso au! au InsertEnter * call InsertEnterCB() au InsertLeave * call InsertLeaveCB() augroup END function! InsertEnterCB() let g:modified_save = &modified set nomodified endfunction function! InsertLeaveCB() if &modified echomsg "inserted text='". @. ."'" endif let &modified = g:modified_save endfunction
942 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/03(月) 03:03:25 ] >>940 無理。 FilterReadPreとかで限定的なものはできそうだけど。 >>941 <C-c>されるとInsertLeaveは発行されないよ。
943 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/03(月) 19:17:27 ] >>940 help {event} で見合うものを探すのだ
944 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/20(木) 05:10:46 ] 関数名の最初の文字はアンダースコアでも通るみたい。 function! _havesex() echo "not implemented" endfunction
945 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/12/24(月) 20:33:06 ] >>944 have sex. not implemented w
946 名前:名無しさん@お腹いっぱい。 [2008/01/09(水) 12:26:12 ] vimのなかでgccでコンパイルするにはどうしたらいいですか? perlのやり方は調べたら分かったのですが、cについてはgoogle検索でざざーっと 数十件くらいそれっぽいものを見てみても見つかりませんでした。 お願いします。
947 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/01/09(水) 13:03:15 ] :set makeprg=gcc\ % :make
948 名前:名無しさん@お腹いっぱい。 [2008/01/09(水) 15:08:18 ] >>947 ありがとうございます。希望どおりの動作になりました。
949 名前:名無しさん@お腹いっぱい。 [2008/01/09(水) 22:39:22 ] :compiler gcc するとerrorformatを設定してくれるよ
950 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/01/20(日) 14:57:42 ] このスレ7年目にしてようやく次スレが見えてきたのかよワロタ
951 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/01/23(水) 00:18:49 ] おお、ほんとだ。ようやくだな。 次スレではvim8に突入しちゃうかもな
952 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/01/23(水) 14:33:17 ] スレタイは vim7スクリプトお勉強スレ なのか、汎用的に vimスクリプトお勉強スレpart2 なのか
953 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/01/23(水) 15:32:03 ] >>952 バージョン入れる必要性はないから後者の方が良いね。 むしろ本スレに統合しても問題ない気もする。分離する必要性ってある?
954 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/01/23(水) 16:46:31 ] >>953 あんまりないな 最初は珍しかったから「お勉強」ということだったんだろう スレの最初の方のレスの流れをみてもそうだけど
955 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/17(日) 14:46:07 ] >>951-953 次スレを vim7スクリプトお勉強スレ にしても 次々スレが vim8スクリプトお勉強スレ になって(ry
956 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/20(水) 23:37:56 ] Vim Part15 pc11.2ch.net/test/read.cgi/unix/1202050038/ 953の言ってるとおり↑でいいべ
957 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/02/22(金) 18:56:26 ] >>955 そいつはめでてーなぁ
958 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 01:02:27 ] Windowsのvim7のinputlist()っていう選択肢の中から選ばせる関数使うと、 *********(<Enter> でキャンセル) ってメッセージが表示されるんだけど、 Enter押すと、最初の項目が選択されたことになってる。(0が返ってくる) これって仕様ということでいいのかな?
959 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/07(金) 01:54:06 ] サンプルコードを見ると、最初の要素はプロンプト的な使い方をするぽい
960 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/08(土) 21:03:02 ] ほー、なるほど
961 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/03/09(日) 02:42:55 ] vim6を使っているけどrenamer.vimがうらやましかったので 6でも動くようにパッチしてみた。 よかったらどうぞ ttp://sakuratan.ddo.jp/uploader/source/date73498.gz
962 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 18:37:36 ] >>911 command! -range=% TemplateEngine <line1>,<line2>substitute/#{\(.\{-}\)}/\=eval(submatch(1))/g コマンドにしておくと便利
963 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/19(土) 18:18:32 ] >>962 で、この TemplateEngine コマンドは 如何に使うとよかですか?
964 名前:名無しさん@お腹いっぱい。 [2008/04/24(木) 23:04:43 ] tcvime.vimの文字ヘルプを使う時は、<Leader>?を入力します。この場 合の<leader>のデフォルトは<C-K>です。この<C-K>?を tcode_cp932.vimのjfjにマップしたいのですが、下記のマップでは動作 しません。何が悪いのでしょうか? jfj<tab>~K? 勿論fjのマップは外しています。宜しく、お願いします。
965 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/24(木) 23:22:12 ] :h mapleader
966 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/25(金) 23:50:00 ] >>964 tcvime.vimで<Leader>?にマップされてる文字ヘルプは、 Normal Mode時にカーソル位置にある文字の入力方法を表示する機能ですが、 Insert Mode用keymap(tcode_cp932.vim)のjfjにマップして、 どういう動作を期待してます? Insert Modeでjfjと打ったら直前の文字のヘルプを表示して欲しいのでしょうか?
967 名前:名無しさん@お腹いっぱい。 [2008/04/26(土) 07:38:23 ] >966 失礼しました。もしかしたら、keymapのファイルはInsert Mode用に 定義されているのですか?私は、全てのモードに定義されていると思 っていた物ですから。やりたい事は、ノーマルモードで、jfjを^K?に マップしたい。 例えば、nmap jfj ^Kqは動作するが、若しもの事を考慮してnnoremap jfj ^?と定義すると、何故か動きません。jもfもキーマップは定義 していないのですが。 済みません。宜しくお願いします。
968 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/26(土) 09:04:38 ] keymapは主にInsert mode用です(lnoremapされるものです。mbyte-keymapのヘルプ参照)。 Normal modeで<C-K>?にマップされている機能を別のキーにマップしたい場合は、 nnoremapではなくnmapを使います(nnoremapとnmapのヘルプ参照)。 :nmap jfj <C-K>?
969 名前:名無しさん@お腹いっぱい。 [2008/04/26(土) 10:40:22 ] >968 mbyte-keymapのヘルプを読んだが、今一つnmapとnnoremapとの違いが 分からない。この場合、nnoremapが動かないのは、再定義するキー マップが無いからなのだろうか? 逆に、考えると確実にそのキーマップが存在していないと、nnoremap は動かないと考えるべきなのか。私が、nnoremapにこだわるのは何処 でキーマップを使うか分からないので、誤動作を防ぎたい。それだけ の理由ですが、逆にこれが動かない結果となる。原因が分からな い。 宜しく、お願いします。
970 名前:名無しさん@お腹いっぱい。 [2008/04/26(土) 19:27:08 ] 質問をさせてください。 コマンドの結果を変数に保存する場合、どのような記述をすれば良いのでしょうか。 以下が、やりたい事をvim の疑似言語で表したものです。 ここでは、:put を実行した時に出力される内容を変数に格納したいです let tmp = `put` どうかよろしくお願いします。
971 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/26(土) 22:41:23 ] >>969 <C-K>?はtcvimeによってマップされているキーなのでnmapを使う必要があります。 :nmap jfj <C-K>? としてjfjを打った場合、 以下の例のように<C-K>?はさらに展開されるので、tcvimeの関数が呼び出されます。 jfj → <C-K>? → :<C-U>call <SNR>4_ShowStrokeHelp()<CR> 一方、 :nnoremap jfj <C-K>? としてjfjを打った場合、<C-K>?は展開されないので、 tcvimeの機能は呼び出されません。 jfj → <C-K>?
972 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/27(日) 00:00:11 ] >>970 let tmp = system("put") redir => tmp put redir END 上か下、どちらかでいけるよ。 どちらが使えるかは、put次第
973 名前:名無しさん@お腹いっぱい。 [2008/04/27(日) 10:32:29 ] >971 詳しい説明、有り難う御座います。何となく、mapとremapの違いが分 かった様な気がします。 >965 確かに、mapを指定するのでは無くてmapleaderの設定を変更した方が 早いかも知れません。