[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/18 19:04 / Filesize : 368 KB / Number-of Response : 974
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Vim6スクリプトお勉強スレ



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 微妙におかしくありませんか?

あ、全角「?」が含まれている?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<368KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef