1 名前:名無しさん@お腹いっぱい。 [01/12/17 12:15] みんなでスクリプトを覚えよう
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と表示の方法は変えていないし、 なぜこうなってしまったのか原因も気になるんですよね。