1 名前:名無しさん@お腹いっぱい。 [01/12/17 12:15] みんなでスクリプトを覚えよう
488 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/08 17:49] 初めて vim スクリプトを勉強するなら、 eval.txt と usr_41.txt のどっちの方を先に 読んだ方がいいですか? 行数が eval は 41 のほうの 3 倍もあるので、どんな感じなのかと。
489 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [03/12/08 18:19] >>488 他のプログラミング言語に慣れているのであれば、リファレンスマニュアルである eval.txtを必要なところだけかいつまんで読み、差分を理解するようにしたほうが近道 です。そうでないならusr_41.txtを読みながら1つ1つ順番に試した方が早く習得できる でしょう。
490 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/08 20:42] >>489 eval を斜め読みしてみます。
491 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/07 15:30] このスレとか:help augroupとか色々なスクリプトとか読んでみたんだけど、 未だにaugroupが何の為にあるのか分からない。 これ使うとどんな嬉しい事があるの?
492 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/07 15:38] スクリプトが自分でインスコしたautocmdだけを綺麗に消せる
493 名前:491 mailto:sage [04/02/07 18:52] なるほど、そういう用途の為にあるのか。 教えてくれてどうもありがとう、>>492 さん。
494 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/18 09:08] vimスクリプト開発に便利なコマンドってどんなのがありますか? とりあえず :source ってのは使えそうだけど、Emacs の eval-last-sexp みたいな、カーソル行をコマンドとして解釈して 実行、みたいなのがあると便利なんですが。これ自体スクリプトで 書けそうだけど…。
495 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/18 09:21] >>494 yy:<C-R>"
496 名前:493 mailto:sage [04/02/18 11:15] >>495 おおっ、こりゃ便利です!! ありがとうございます。 ストローク数多くなるけど、^y$:<C-R>" でもイケますね。 (行末の ^M を省くため)
497 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/18 11:29] お気軽スクリプト生成コマンドとしてはq:もあるね。 コマンドラインの履歴を編集してそのままスクリプトに出来る。
498 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/18 13:06] ストローク数だけで言うなら Y:<C-R>"<C-H>
499 名前:493 mailto:sage [04/02/19 09:16] >>497 ときどき :q と間違えて q: を押すと出てきてたのはこれだったのか… vi初心者なもので… これで望みどおりのことができそうです。ありがとうございます!
500 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/19 09:55] そう言えば、ストローク数だけで言うなら Yq:P の方が短いな
501 名前:名無しさん@お腹いっぱい mailto:sage [04/02/20 21:20] 起動したスクリプトのディレクトリを取得しようとしています。 Chalice.vimをみると、 let s:scriptdir = expand('<sfile>:p:h') というのがあったので、 let s:name = 'ScriptDir' if exists("ScriptDir") finish endif command -nargs=0 ScriptDir :call s:ScriptDir() function! s:ScriptDir() let s:scriptdir = '' let s:scriptdir = expand('<sfile>:p:h') echo "This script is here.: \"" . s:scriptdir ."\"" endfunction などというのをでっち上げ、gvimを立ち上げて:ScriptDirしてみたのですが、ホームディレクトリが表示されます。 なんか大きく勘違いしていると思うのですが、どこで勘違いしているのかわかりません。 ご教示いただければ幸甚です。 よろしくお願いいたします。
502 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/02/20 21:45] >>501 let s:scriptdir = expand('<sfile>:p:h') command! -nargs=0 ScriptDir :call s:ScriptDir() function! s:ScriptDir() echo "This script is here.: \"" . s:scriptdir ."\"" endfunction expand('<sfile>:p:h') が評価されるタイミングが問題です。動作だけから判断する と<sfile>はsource中にしか定義されないようなので、source時に確実に評価される ように気をつける必要があります。
503 名前:名無しさん@お腹いっぱい mailto:sage [04/02/21 01:33] なるほど。ありがとうございます。 思ったような動作をするようになりました。
504 名前:初心者 [04/02/26 07:50] platexをですね、 :platex % なんて打ったら、コンパイルしてくれるわ dvioutを起動してくれるわ なんていうふうにするには どんなスクリプトをかけばよいのですか?
505 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/26 08:15] >>504 ちょっと違うが。 nnoremap <buffer> <c-m> :!platex %<cr>:sil !xdvi %<.dvi >/dev/null 2>&1 &<cr>
506 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/03 09:56] IRC (;´Д`)ハァハァ
507 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/07 15:29] VimIRC.vim : An IRC client script vim.sourceforge.net/scripts/script.php?script_id=931
508 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/08 13:50] だれか #Vim つくって...
509 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/08 16:04] >>508 splitしてるでしょ。確かグローバルには#vimがあったはず。
510 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/08 21:03] >>508 どこのネットワークだよ。 WIDE系?freenode?2ch?
511 名前:名無しさん@お腹いっぱい。 [04/04/17 20:53] age
512 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/11 13:26] >>507 なんもかんがえずにとりあえず立ち上げてみたら、 いきなりsegmentation fault... うーむ。
513 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/11 13:30] >>512 segfはvimのバグじゃねーか?
514 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/16 15:19] nomagicのときに /. と同様にハイライトさせたいのですが let @/='.' とやってもうまくいきません 何か良い方法はありませんか?
515 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/16 21:13] >>514 よくわからないけど /\. じゃなくて? let @/='.' でもうまくいくけど、一回検索しないと反転しないね。そゆこと?
516 名前:514 mailto:sage [04/05/16 23:24] >>515 set nomagicのときlet @/='.'だと全部が反転しませんか? .と言う文字を反転させたいんです やりたいことはノーマルモードの*と同じようなことを ビジュアルモードで選択した部分のみをやらせたいんです 現状はこんなコードです function! s:vsearch() if line("'<")!=line("'>") execute "normal! *" else let bkupreg=@@ silent normal gvy if @@=~'.*\n' let @@=strpart(@@,0,strlen(@@)-1) end if &magic let @@=escape(@@,'^$.*~[]\') else let @@=escape(@@,'^$\') end exe "normal /".@@ let @/=@@ exe "normal n" let @@=bkupreg end endfunction vmap * :call <sid>vsearch()<cr> >一回検索しないと反転しないね。そゆこと? それも悩み所です
517 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/05/16 23:49] >>516 こんな感じで let @/ = '\V'.escape(@@, '\')
518 名前:514 mailto:sage [04/05/18 22:48] >>517 お礼が遅くなってすみません おかげさまで友人に見せても 文句の出ない(出ても一蹴できる)程度の 物になりました。
519 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/25 23:17] format.vimにenc=utf8でも禁則処理をして欲しいのでこんな感じにしてみた。 begin 644 format.vim.diff.gz M'XL("/%1LT``"V9O<FUA="YV:6TN9&EF9@#-5-NJTT`4?3Z%_L-JD--K2A+M M%2OHHR(^>`1!I*3IM!E))R69E!XY+Y-7+^`7B(CX'7Z*B&^^^`?.9)KT<EJ? M/.!0FLE>:Z\]>\_.;C0:F(71PN7M%5VTPXC.SRX2@L?N)9P.''MH]X>6W%C6 MG7+)-,T=]A[1&7;Z\K<A-O979D#/:O4ZT.]*2;[W'<B=62Y!KH!PS(=:?TS9 ME#`^C@F+*:<K@A$L12-L2F=J4RXU861_,#8^@<OFB3LG1H'1&2ID36,>UXQ" MNJ#5%>4@;@[*>,8K=^DR$FN]3>`F5'##_'<KTSN3"WB:3/!DR6G(XLQZHI"# M;LNVG$TE,YI.(A[&[HJ,"?/"*65SF<)YOL\IYSM@-<NO6BY55)UVD-&ATO9^ M6#B>*-?J-5/V:,,0'R#>0,P@?(C?$&\AWD&\A[@/\0#B.40$P2%6$&N(UQ"! M3N"H6/H1Z2>DGY%^0?H5Z3>DWY'^0/H3Z2^(AQ"/("X@GBD-U5.V=5O69E!T MU<W7!E=7Q[HGEY#M<[U6_V7YCK9:M]]I=0>=HM<VQ>21C#(G/*",U(RV^I)R MC$[7$O/"(+-#7LD6\WP)2><7DO12U1:JNI[O1@Z+:IY?Q[T1;*>O(2`B/(F8 M\EBZ$:_)9TOIM^#4-84$,='R!=GSM:$8%'(S2YBGOBH]-Y`W2W?@M'JV?3"" M;BZYNSJWOQVW"3V3#"R2@-/))2?:P%2#!14$VYDEXXS9M>/LDOTM.2"*JEU, F]=20/&&&9-.U">RQ,^%;6GC7Z>"L)V])JM1/W\`?NMXJ$GL&```M ` end
520 名前:519 mailto:sage [04/05/26 00:34] 訂正。一文字とるなら " multibyte let str = strpart(str, idx) let len = strlen(nr2char(char2nr(str))) return strpart(str, 0, len) のがカッコええか
521 名前:519 mailto:sage [04/05/26 00:38] すまそ " multibyte return nr2char(char2nr(strpart(str, idx))) これでええやん
522 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/05/26 01:34] >>519 ありがとうございます。次のファイルをテストしてみてください。 www.kaoriya.net/testdir/patches-vim/format.vim ちなみにスクリプトで単体の文字を扱う技術はChalice等の開発により無茶苦茶発達 してまして matchstr(getline("."), ".", col(".") - 1) こんな感じでmatchstrを使うのが定石です。近い将来format.vimも全面的に見直さな ければいけませんな。
523 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/26 08:00] >>522 pc5.2ch.net/test/read.cgi/unix/1073825479/755 の修正も お願いします。
524 名前:519 mailto:sage [04/05/26 13:20] >>522 バッチリっス。サンクスコ
525 名前:名無しさん@お腹いっぱい。 [04/05/27 12:30] タブ押したら半角スペースが4つ分になるようにしたい
526 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/27 13:17] >>525 (・∀・)カエレ!!
527 名前:525 [04/05/27 14:53] >>526 帰る
528 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/27 15:26] >>527 乙
529 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/28 07:53] >>525 se expandtab tabstop=4
530 名前:525 mailto:sage [04/05/29 04:58] >>529 帰らなくて良かった
531 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 04:40] hoge.texを編集してるときに :!xdvi % & としたら %はhoge.texを指してしまうわけですが、拡張子を除いた(hogeの)部分だけを表すには どうすればよいでしょうか?
532 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 08:03] >>531 %<
533 名前:531 mailto:sage [04/05/30 13:28] >>532 ありがとうございました。
534 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 16:53] 起動するときにウインドウを希望の位置に希望の大きさで立ち上げたい
535 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 17:25] >>534 :winp[os] {X} {Y} :win[size] {width} {height}
536 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 19:24] >>535 Thx 胃に空いた穴が塞がりそうです
537 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 19:30] オートインデントは一切半角スペースで構成されるものでお願いしたい
538 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 20:56] >>537 誰に言っているのですか?
539 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 21:02] あなたですよ、m9(・∀・)あなた!
540 名前:538 mailto:sage [04/05/30 21:12] 私は半角スペースでインデントしています。
541 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/30 23:25] >>537 :se expandtab
542 名前:名無しさん@お腹いっぱい。 mailto:sage [04/05/31 00:26] スクリプトと関係ない話はvim6本スレでよろしこ
543 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/03 22:21] カーソルの下にある文字列の長さを取得する関数を書いてみた。 function! UnderCursorStringLength() let line = getline(".") let cur = col(".")-1 let l = strlen(line) let backward = strpart(line, 0, cur) let forward = strpart(line, cur, l) let b = strlen(matchstr(backward, ".*\""))-1 let e = cur + match(forward, "\"") echo e-b-1 endfunction
544 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/04 00:11] >>543 解説プリーズ
545 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/05 01:18] カレント行をゲット。 カーソルが何桁目がをゲット。 カーソル位置より前と後にわけて、 前の部分の最後の"をbとする。 後の部分の最初の"をeとする。 長さはe-b-1。 複数行にわたってると無理だし、\のエスケープもわからない。 あんまり信用しないでね。
546 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/05 20:51] 僕は、カーソルの下の文字列を取得する関数を書いて let len = strlen(UnderCursorString()) こんな感じのほうが好みかな。
547 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 17:41] " の正規表現は \ を考慮して \(\\\@<!\(\\\\\)*\\\)\@<!" でどうか
548 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 21:04] 二つほどお聞きしたいのですが 行頭からカーソル位置を含む位置までの文字列を取得したいとき strpart(getline('.'),0,col('.')) としてみたところカーソル位置が日本語だとうまくいきません。 指定した行を削除したいのですが exec lnum.'d _' としたのですがfoldingされている行だとfoldingごと纏めて消えてしまいます。 何か方法はありませんか?
549 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 21:52] function! DelLine(num) if &foldenable != 0 set nofoldenable exec a:num.'d _' set foldenable else exec a:num.'d _' endif endfunction 縺薙s縺ェ諢溘§シ
550 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 21:54] 化けた・・・ 最後の行は無視してください
551 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 22:12] function! GetPart() let lnum = line('.') let cnum = col('.') let line = getline(lnum) let cur_char = matchstr(line, '.', cnum - 1) let part_len = cnum + strlen(cur_char) - 1 return strpart(line, 0, part_len) " 一行で書くと "return strpart(getline('.'),0,col('.')+strlen(matchstr(getline('.'),'.',col('.')-1)) - 1) endfunction これでどうよ
552 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/06 22:51] >>547 解説プリーズ
553 名前:548 mailto:sage [04/06/07 00:12] >>549 >>551 ナルホド、参考になりました。 foldenableなんて知らなかったし matchstrをそんな風に利用するとは思いつきませんでした。 まだまだ、修行不足ですな、精進します。
554 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/06/07 00:21] >>547 \によるエスケープを考慮した""文字列にマッチする正規表現は慣用句でして /"\(\\.\|[^"]\)*" と書くことが多いです。これは、クォーテーションで始まってクォーテーションで終わ る文字列のうち、エスケープされた文字「\\.」、もしくはクォーテーション以外の文 字「[^"]」のみで構成されるもの、という意味になります。 >>548 echo matchstr(getline('.'), '^.*\%'.col('.').'c.') こんな風にひとつのmatchstr()で行うのが速度面から有利です。わかりやすさであれば 551さんの方法が優れています。
555 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/07 01:50] つまりこういうことか! "エスケープバージョン function! UnderCursorStringLength() let line = getline(".") let cur = col(".")-1 let l = strlen(line) let backward = strpart(line, 0, cur) let b = matchend(backward, '.*\\\@<!"') let str = matchstr(line, '\(\\.\|[^"]\)*', b) echo strlen(str) endfunction
556 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/07 02:09] ちなみに >>547 の意味は直前に奇数個の \ が存在しない "
557 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/07 11:23] >>555 こうだね ! let b = matchend(backward, '.*\(\\\@<!\(\\\\\)*\\\)\@<!"')
558 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/06/07 11:49] >>555 カーソルの下にある特定の正規表現にマッチする文字列を取得する方法はChaliceに含 まれるplugin/alice.vimに含まれるAL_matchstr_undercursor()が参考になります。 > function! AL_matchstr_undercursor(mx) > let column = col('.') > let mx = '\m\%<'.(column + 1).'c'.a:mx.'\%>'.column.'c' > return matchstr(getline('.'), mx) > endfunction この/%cを使う方法であれば、正規表現を前半と後半に分けたためにわかりにくくなっ てしまう、ということを回避できます。 let quoted = AL_matchstr_undercursor('"\(\\.\|[^"]\)*"')
559 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/21 22:27] 質問があります。 VIM上でファイル検索>>リスト出力>>選択>>編集 が行えるようなスクリプトなどはあるでしょうか? winmanager.vim や explorer.vim では subディレクトリまで 検索してくれないので困ってます。タスケテ
560 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 04:54] よく分かりませんが > VIM上でファイル検索>>リスト出力 :new | read !find ./ -name "*.txt" or :new | read !dir /s /b "*.txt" > 選択 ご自由に > 編集 :execute 'edit! ' . getline('.')
561 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 06:26] >>560 ありがとうございます。 winmanagerみたいなToggle型(?)で実装してるスクリプトがあればうれしかったんですが、 ちょっとがんばって組んでみまふ ノシ
562 名前:561 mailto:sage [04/06/22 10:20] スクリプト書こうと思ってましたが、mapで済ませてしまいました。 map <F5> :let obufclnline = getline('.')^M^W^W:execute 'e ' . obufclnline^M :new | read !dir /s/b *.txt 等でリストを作成し、2つ以上ウィンドウがあることが 前提の仕様にしてます(´Д⊂グスン (本心は"ウィンドウが無かったら作る"というのをやりたかった) e! にしてないので、安全です^^ もっと良い方法ってありますかね? 微妙にスレ違いですか…そうでつか or2゜
563 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 10:46] >>562 ファイル名の上で <C-]> もしくは <C-W><C-]>
564 名前:561 mailto:SAGD [04/06/22 17:54] >>563 ありがとうございます。・゜・(ノ∀`)・゜・。 そんな簡単な方法があったとは… vimは最近始めたのですが、viを長年つかっていた身としてなんか 妙にクヤシクなったので、スクリプト書いてみました。 処女作ですが、みなさんの忌憚の無いつっこみおまちしてます。 command! -nargs=1 Findmode :call s:StartFindMode(<f-args>) function! Findg() let obufclnline = getline('.') if filereadable(obufclnline) normal ^W^W execute 'e ' . obufclnline endif endfunction function! Finding(...) let startcmd = "read !dir /s/b ".a:1 normal 1GdG silent execute startcmd endfunction function! s:FindWindow() nnoremap <buffer> <CR> :call Findg()^M nnoremap <buffer> <ESC> :bd!^M command! -buffer -nargs=1 Finding :silent call Finding(<f-args>) endfunction function! s:StartFindMode(...) let startcmd = "10new __findlist__ | read !dir /s/b ".a:1 silent execute startcmd endfunction au BufEnter __findlist__ call s:FindWindow()
565 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 18:02] >>564 :help gf :help :cfile :help :copen :help errorformat
566 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 22:56] >>565 無駄のない簡潔なメッセージだが何を言いたいのか分からない。 >>564 command! -nargs=1 Findmode :call s:StartFindMode(<f-args>) function! Findg() let obufclnline = getline('.') if filereadable(obufclnline) " ポータビリティーのため execute 'wincmd w' execute 'e ' . obufclnline endif endfunction function! Finding(...) let startcmd = "read !dir /s/b ".a:1 " 好み。俺はこの方が分かりやすい。 execute '1,$delete _' silent execute startcmd endfunction
567 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/22 22:59] 続き function! s:FindWindow() " ポータビリティーのため。^Mより<CR>がいい。 nnoremap <buffer> <CR> :call Findg()<CR> nnoremap <buffer> <ESC> :bd<CR> command! -buffer -nargs=1 Finding :silent call Finding(<f-args>) endfunction function! s:StartFindMode(...) let startcmd = "10new __findlist__ | read !dir /s/b ".a:1 silent execute startcmd " 好み normal gg " 一時的なバッファにする。よく知らない。|special-buffers| set buftype=nowrite set bufhidden=delete set noswapfile endfunction au BufEnter __findlist__ call s:FindWindow() 感想:使ってみたら意外と便利だった。
568 名前:561 mailto:sage [04/06/22 23:53] >>564 errorformatにならって、findファイルリストをつくって cfileで読み込んで、copenで開いて gfで開けってことかな? いろいろためしてみたけど、いまいちうまくいきません(´Д⊂グスン つかえたら、copenは便利そうですね。 >>566 丁寧にありがとうございます^^ あと感想ありです。誉めてもらったヽ(´ー`)ノ なるほど wincmdかぁ、ほんとは__findlist__があるか判定して、 バッファ名でやりたかったんですが、よくわかりませんでした(´ヘ`;) setはカレントバッファにしか影響をおよぼさないんですね? 勉強になります。 あと、modifiableとかをオフにしておいたほうがいいのかな windowsでしかうごきませんが、使ってみて要望とかありましたらお願いします。 できるかぎり、、がんばってみます(;・∀・)
569 名前:名無しさん@お腹いっぱい。 mailto:sage [04/06/23 16:25] >>568 バッファがあるかどうかはbufexists()とかbufloaded()とかかな? 余裕があるならプラグインの形にまとめてどこかにうpしとくと誰かが喜ぶと思います。 なんならvim.orgに…。 あとこんぐらいしか思いつかないが ファイル検索コマンドを変更可能に。これだけでマルチプラットフォーム。 ウインドウを縦分割に変更可能に。 ファイルを開く時に新しいウインドウを作ったり作らなかったり。 あとこんなの nnoremap <buffer> <Space> :call Findg()<CR>:execute 'wincmd W'<CR>j nnoremap <buffer> <S-CR> :call Findg()<CR>:execute 'wincmd W'<CR>
570 名前:561 mailto:sage [04/06/26 10:24] >>568 プラグインっぽくしてみました。 使用方法は、ファイルのヘッダに簡単に記載してます。 ttp://rupan.zive.net/~kain/cgi-bin/up/src/up1193.zip
571 名前:561 mailto:sage [04/06/26 10:26] s/568/569/ まちがえました(´Д⊂グスン
572 名前:名無しさん@お腹いっぱい。 [04/06/26 14:03] Findmode便利 まったりだけど良スレ
573 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/01 14:05] " modelineの拡張 if !exists('g:MX_mx') let g:MX_mx = 'vimex:\(.*\)' endif command! ModeLineEx :call s:DoModeLineEx() function! s:DoModeLineEx() let mx = g:MX_mx if exists('b:MX_mx') let mx = b:MX_mx endif let lnum = line('.') let cnum = col('.') if search(mx, 'w') > 0 normal G$ let flags = 'w' let fname = tempname() execute 'redir > ' . fname while search(mx, flags) > 0 let l = matchstr(getline('.'), mx) let cmd = substitute(l, mx, '\1', '') silent! echo cmd let flags = 'W' endwhile redir END
574 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/01 14:07] if filereadable(fname) execute 'source ' . fname call delete(fname) endif call cursor(lnum, cnum) endif endfunction " 自動化するならセキュリティー的にはこんな処置でいいと思う au BufReadPost * if getline(1) =~ 'vimpass:MYPASSWORD' | \ silent! ModeLineEx | \ endif " と、書いてみたが有効な使い道が思いつかない...orz
575 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/01 14:17] ちなみに使い方はファイルのどこでもいいので vimex: function! SayHello() vimex: return 'Hello' vimex: endfunction vimex: let test = SayHello() このようにスクリプトを書いておくと、その部分だけ抜き出して実行します。 フォーマットは g:MX_mx か b:MX_mx を書き変えて変更します。
576 名前:名無しさん@お腹いっぱい。 mailto:sage [04/08/20 17:19] 2つ以上の name spaces を同時に指定するのはできないんですよね b:s:hoge とか bs:hoge みたいなかんじで
577 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [04/08/20 18:37] >>576 たしか、SIDをmapargを使って取得して、curly-braces-namesで擬似的にb:s:を実現す ることは可能です。 map <SID>xx <SID>xx let s:sid = substitute(maparg('<SID>xx'), 'xx$', '', '') unmap <SID>xx let b:somename_{s:sid} = "buffer script local variable"
578 名前:576 mailto:sage [04/08/21 06:48] >>577 そんな方法が。参考になりました。
579 名前:名無しさん@お腹いっぱい。 [04/10/19 12:36:56] "レジスタに値が入った時点でなんだかの動作を起こすことって可能でしょうか? 具体的にはレジスタの履歴をyyした時点で保存したいのですが。
580 名前:名無しさん@お腹いっぱい。 mailto:sage [04/10/20 00:22:22] >>579 :help event 見てもそれらしきイベントは無いねぇ map yy とかするしか無いんじゃない? ちなみにviminfoファイルにレジスタ履歴その他を保存しておくことができるけどね どういうものを残すかはオプションで指定できる :help 'viminfo'
581 名前:579 [04/10/21 12:05:35] >>580 返信ありがとうございます。 やっぱりひとつひとつキーマップしかないのですかねぇ。 viminfoでの履歴は、a-z 0-9なんかのレジスタしか保存できませんよね? かたっぱしからレジスタにつっこんだ履歴を保存したので…。
582 名前:名無しさん@お腹いっぱい。 mailto:sage [04/10/22 00:45:29] スクリプトで、他のファイルに退避して、 使うときに読み込むのはどうかな?
583 名前:名無しさん@お腹いっぱい。 [05/01/03 05:39:50] Vimって:wを連続で行ったときもバックアップを作ってくれちゃうから、 一定時間経過したときのみバックアップするようなスクリプトを 考えてみた。つっこみ頼みます。 " 指定したファイルのバックアップが一定時間以上古ければバックアップを作り直す。 " 例: call MyBackup("%") " この値以上古ければ更新(単位:秒) let g:my_backup_interval=1800 " バックアップファイルの拡張子 let g:my_backup_ext=".bak" " バックアップを作るディレクトリ let g:my_backup_dir="~/.bak" function! MyBackup(orgfile) let fn = substitute(expand(a:orgfile), ".*/", "", "") let bakfile = glob(g:my_backup_dir) . "/" . fn . g:my_backup_ext let baktime=getftime(bakfile) if (localtime() - baktime) > g:my_backup_interval exe "w! " . bakfile echo "Backup: " . bakfile endif endfunction
584 名前:名無しさん@お腹いっぱい。 [05/01/04 01:44:42] 時間よりも内容の変化で区切ってバックアップしたほうがいいと思う。 バックアップというよりバージョン管理か。 転ばぬ先の杖としてならそういう仕組もありかもね。 スクリプトは特に問題ないような気がします。 #autocmdを使って #BufWritePre: 時間が経っていなければset nobackup #BufWritePost: &backupを復元 #って手もあるけど、別口で保存しといたほうが安心か。
585 名前:名無しさん@お腹いっぱい。 mailto:sage [05/01/04 03:29:23] 保存するごとに、バージョン番号を付けたコピーを作成する スクリプトがあったよ。確か。 ふと、バックアップディレクトリを覗くと、そこにはっ、、、!!
586 名前:名無しさん@お腹いっぱい。 [05/01/15 15:47:37] vimonline.vim に current version の 表示を加えてみました <br> <br> begin 644 vimonli ne.diff <br> M+2TM('9I;6]N;&EN92YV:6TN;W)I9PE4:'4@2F%N(#$S(#`T.C0V.C,W(#(P <br> M,#4**RLK(' 9I;6]N;&EN92YV:6T)4V%T($IA;B`Q-2`Q,SHU.#HQ-B`R,#`U <br> M"D!`("TR-2PV("LR-2PW($!`"B`@('-I;& amp;5N="$@)7,O+R]G"B`@('-I;&5N <br> M="$@)6<O/'-P86X@8VQA<W,](FYE=W-D871E(B?L+UY<& lt;RH?"]P/B0O:F]I <br> M;@H@("!S:6QE;G0A("5G+SQT9"!C;&%S<STB;F5W<V1A=&4B+RPO/%PO =&0^ <br> M)"]J;VEN"BL@('-I;&5N="$@)7,O7EPH7&1<9"I<+EQD7&0J7"Y<9%QD*EP I <br> M)"??:#$^5FEM(%PQ(&ES('1H92!C=7)R96YT('9E<G-I;VX?"]H,3XO"B`@ <br> M(&-A;& ;P@04Q?97AE8W5T92@G)7,O+BI<*$YE=W-<*3Q<+W-P86X^+BHO7U]? <br> M)RYG.FAE861L:6YE36%R:T-A =&5G;W)Y+B=<,2]I)RD*("`@8V%L;"!!3%]E <br> M>&5C=71E*"<E<R?N*EPH4F5C96YT(%-C <FEP="!5<&1A=&5S7"D?"]S<&%N <br> M/BXJ+U]?7R<N9SIH96%D;&EN94UA< FM#871E9V]R>2XG7#$O:2<I"B`@(&-A <br> M;&P@04Q?97AE8W5T92@G)7,O+BI<*%)E8V5N="!4 :7`@061D:71I;VYS7"D? <br> M7"]S<&%N/BXJ+U]?7R<N9SIH96%D;&EN94UA<FM#871E9V]R> ;2XG7#$O:2<I <br> !"@`` <br> ` <br> end<br><br>
587 名前:& ◆h9Bn.Lr5Ro [05/01/15 15:54:13] 失敗しました。>>586 begin 644 vimonline.diff M+2TM('9I;6]N;&EN92YV:6TN;W)I9PE4:'4@2F%N(#$S(#`T.C0V.C,W(#(P M,#4**RLK('9I;6]N;&EN92YV:6T)4V%T($IA;B`Q-2`Q,SHU.#HQ-B`R,#`U M"D!`("TR-2PV("LR-2PW($!`"B`@('-I;&5N="$@)7,O+R]G"B`@('-I;&5N M="$@)6<O/'-P86X@8VQA<W,](FYE=W-D871E(B?L+UY<<RH?"]P/B0O:F]I M;@H@("!S:6QE;G0A("5G+SQT9"!C;&%S<STB;F5W<V1A=&4B+RPO/%PO=&0^ M)"]J;VEN"BL@('-I;&5N="$@)7,O7EPH7&1<9"I<+EQD7&0J7"Y<9%QD*EPI M)"??:#$^5FEM(%PQ(&ES('1H92!C=7)R96YT('9E<G-I;VX?"]H,3XO"B`@ M(&-A;&P@04Q?97AE8W5T92@G)7,O+BI<*$YE=W-<*3Q<+W-P86X^+BHO7U]? M)RYG.FAE861L:6YE36%R:T-A=&5G;W)Y+B=<,2]I)RD*("`@8V%L;"!!3%]E M>&5C=71E*"<E<R?N*EPH4F5C96YT(%-C<FEP="!5<&1A=&5S7"D?"]S<&%N M/BXJ+U]?7R<N9SIH96%D;&EN94UA<FM#871E9V]R>2XG7#$O:2<I"B`@(&-A M;&P@04Q?97AE8W5T92@G)7,O+BI<*%)E8V5N="!4:7`@061D:71I;VYS7"D? M7"]S<&%N/BXJ+U]?7R<N9SIH96%D;&EN94UA<FM#871E9V]R>2XG7#$O:2<I !"@`` ` end
588 名前:KoRoN@Vim%Chalice ◆8XALICEsdk mailto:sage [05/01/15 16:49:59] >>587 なんかその diff 微妙におかしくありませんか? あ、全角「?」が含まれている?