03/04/05 00:44
6.1.255あたりのパッチでcurly braces変数がexists()で評価できるようになったと思う。
356:354
03/04/05 23:16
>>355
できました。サンクスコ。
ところでスクリプト作るのって、ちょっと書いて :source して、、、ってやるんでしょうか?
例えばバッファ内のスクリプトを保存せずに実行する方法とかあるんでしょうか?
vim スクリプトの開発/デバッグのテクニックとかあったらおしえて下さい。
357:KoRoN@Vim%Chalice ◆8XALICEsdk
03/04/05 23:33
>>356
> 例えばバッファ内のスクリプトを保存せずに実行する方法とかあるんでしょうか?
そういうスクリプト書いちゃえばできないことはないですが、
だったら適当な名前で保存して :so% したほうが手っ取り早いです。
358:山崎渉
03/04/17 12:00
(^^)
359:あぼーん
あぼーん
あぼーん
360:名無しさん@お腹いっぱい。
03/04/24 19:40
♥
361:名無しさん@お腹いっぱい。
03/04/30 21:45
Chalceで学んだことですが、スクリプトでバッファを変更する時に、一時的に
undolevelsを-1にするのは非常にナイスなアイデアですよね。一回のundo分でも
無制限にメモリを消費できてしまうわけですからね。vim標準のgzip.vimとか、
いろんなスクリプトでこれをやってほしいなぁ
362:名無しさん@お腹いっぱい。
03/04/30 21:46
x Chalce
o Chalice
363:名無しさん@お腹いっぱい。
03/05/15 11:54
emacsであるような、ChangeLogの作成を支援してくれるような
vimスクリプトってありませんか??
364:名無しさん@お腹いっぱい。
03/05/15 12:22
こんなんがあるが…
URLリンク(www3.kobedenshi.ac.jp)
ちょっと修正すりゃそれなりになるんじゃない?
365:あぼーん
あぼーん
あぼーん
366:363
03/05/15 13:32
自分もこんなの見付けました。
URLリンク(apollo.u-gakugei.ac.jp)
367:名無しさん@お腹いっぱい。
03/05/17 09:21
+,-などの記号を入力したときに両側にスペースを入れたいです。
そのときすでにスペースが入っていたらスペースを入れないようにします。
それで次のような関数を作ったのですがうまくいきません。
というかvimスクリプトがぜんぜんわかりません。
直してください。
inoremap <buffer> ( <c-o>:call InsertSpace()<cr>(
inoremap <buffer> , <c-o>:call InsertSpace()<cr>,<space>
inoremap <buffer> + <c-o>:call InsertSpace()<cr>+<space>
inoremap <buffer> - <c-o>:call InsertSpace()<cr>-<space>
inoremap <buffer> * <c-o>:call InsertSpace()<cr>*<space>
inoremap <buffer> / <c-o>:call InsertSpace()<cr>/<space>
inoremap <buffer> = <c-o>:call InsertSpace()<cr>=<space>
function! InsertSpace()
if strlen(getline(".")) == col(".")
if strpart(getline("."), col(".")-1, 1) != " "
normal a
endif
else
if strpart(getline("."), col(".")-2, 1) != " "
normal a
endif
endif
endfunction
368:名無しさん@お腹いっぱい。
03/05/17 19:09
>>367
まず、
getline(".")[col(".")-1]
みたいに、配列を使ってみたら。
369:名無しさん@お腹いっぱい。
03/05/17 19:57
>>367
とりあえず、それっぽく動くのができたよ。
inoremap <buffer> + <C-O>:call InsertSpace('+')<CR>
function! InsertSpace(chr)
let left = getline(".")[col(".")-2]
let right = getline(".")[col(".")-1]
if left == ' ' && right == ' '
execute "normal i\<C-V>".a:chr."\<Right>"
elseif left != ' ' && right != ' '
execute "normal i \<C-V>".a:chr." \<Right>"
elseif left != ' '
execute "normal i \<C-V>".a:chr."\<Right>\<Right>"
elseif right != ' '
execute "normal i\<C-V>".a:chr." \<Right>"
endif
endfunction
370:367
03/05/17 22:00
>>369
ありがとうございました。すごく勉強になります。
しかし、行の最後にいるときにうまくいきません。
場合分けしたのですが、最後の\<Right>がうまく機能しません。
function! InsertSpace(chr)
let left = getline(".")[col(".")-2]
let right = getline(".")[col(".")-1]
if strlen(getline(".")) == col(".")
if right == ' '
execute "normal a\<C-V>".a:chr." \<Right>"
else
execute "normal a \<C-V>".a:chr." \<Right>"
endif
else
if left == ' ' && right == ' '
execute "normal i\<C-V>".a:chr."\<Right>"
elseif left != ' ' && right != ' '
execute "normal i \<C-V>".a:chr." \<Right>"
elseif left != ' '
execute "normal i \<C-V>".a:chr."\<Right>\<Right>"
elseif right != ' '
execute "normal i\<C-V>".a:chr." \<Right>"
endif
endif
endfunction
371:369
03/05/17 22:51
>しかし、行の最後にいるときにうまくいきません。
ほんとだ。σ(^◇^;)
>場合分けしたのですが、最後の\<Right>がうまく機能しません。
ほんとだ。(?_?)
これはちょっとわからないな。ちょっと調べてみるけど、
あてにはしないでね。なんか仕様っぽい気もするし。
372:MiMi@Vim%Chalice ◆fI1wYbzaMQ
03/05/18 00:20
違うアプローチで作ってみました.
挿入モードで演算子を入力するとスペースを挿入します.
# コマンドモードに戻る必要はありません.
●注意事項
プログラミング言語の仕様に+と++のような同じ文字を使った
二種類の演算子がある場合は両方をmapして下さい.
第2引数でスペースを入れるかどうかを指定します.
これにより,++の時はスペースを入れない,==の時はスペースを入れる
といった使い分けが出来ます.
スペースを入れない仕様は意味が無さそうですが,+をmapして++をmapしないと,
++が入力できなくなってしまうので仕方なくこういう仕様にしました.
●1点だけごめんなさい項目があります.
行頭ではmapした記号を入力できません.
ただし,一般的にはインデントを入れるので気にならないでしょう.
" 両側にスペースを入れたい演算子をmappingする
inoremap <buffer> <silent> + <Esc>:call InsertSpaceOnBothSides('+', 1)<CR>a
inoremap <buffer> <silent> - <Esc>:call InsertSpaceOnBothSides('-', 1)<CR>a
inoremap <buffer> <silent> * <Esc>:call InsertSpaceOnBothSides('*', 1)<CR>a
inoremap <buffer> <silent> / <Esc>:call InsertSpaceOnBothSides('/', 1)<CR>a
inoremap <buffer> <silent> % <Esc>:call InsertSpaceOnBothSides('%', 1)<CR>a
inoremap <buffer> <silent> = <Esc>:call InsertSpaceOnBothSides('=', 1)<CR>a
inoremap <buffer> <silent> ++ <Esc>:call InsertSpaceOnBothSides('++', 0)<CR>a
inoremap <buffer> <silent> -- <Esc>:call InsertSpaceOnBothSides('--', 0)<CR>a
inoremap <buffer> <silent> == <Esc>:call InsertSpaceOnBothSides('==', 1)<CR>a
373:MiMi@Vim%Chalice ◆fI1wYbzaMQ
03/05/18 00:20
" 演算子の両側にスペースを入れる
function! InsertSpaceOnBothSides(operator, isspace)
let pre_str = strpart(getline("."), 0, col(".")) " 行の前半
let post_str = strpart(getline("."), col(".")) " 行の後半
if a:isspace == 1
if strpart(pre_str, strlen(pre_str)-1, 1) != ' '
let pre_str = pre_str . ' ' " 前半最後にスペース挿入
endif
if strpart(post_str, 0, 1) != ' '
let post_str = ' ' . post_str " 後半最初にスペース挿入
endif
endif
" 前半と後半の間に演算子を挿入
call setline(".", pre_str . a:operator . post_str)
" 次の挿入位置へ移動
if post_str == matchstr(post_str, '\s*$', 0) " 演算子挿入位置が行末の時
let motion_cmd = 'normal $' " 行末へ
else
let motion_cmd = 'normal 2wh' " 演算子を飛ばして次の単語の1文字前へ
endif
execute motion_cmd
endfunction
374:名無しさん@お腹いっぱい。
03/05/18 00:27
歩野?
375:367
03/05/18 15:16
>>372-373
ありがとうございます。
後半ちょこっと変えてみました。
function! InsertSpaceOnBothSides(operator, isspace)
let pre_str = strpart(getline("."), 0, col(".")) " 行の前半
let post_str = strpart(getline("."), col(".")) " 行の後半
let move = 2
if a:isspace == 1
if strpart(pre_str, strlen(pre_str)-1, 1) != ' '
let pre_str = pre_str . ' ' " 前半最後にスペース挿入
let move = 3
endif
if strpart(post_str, 0, 1) != ' '
let post_str = ' ' . post_str " 後半最初にスペース挿入
endif
endif
call setline(".", pre_str . a:operator . post_str)
exec "normal " . move . "l"
endfunction
376:あぼーん
あぼーん
あぼーん
377:KoRoN@Vim%Chalice ◆8XALICEsdk
03/05/25 00:08
大手4紙のサイトにアクセスして、ヘッドラインをだけ抜き出し表示するスクリプトを
作りました。
URLリンク(www.kaoriya.net)
curl, alice.vim, +iconvが必須です。つまりChaliceを使っている人ならば、プラグ
インのディレクトリにスクリプトを置くだけで簡単に導入できるでしょう。導入後は
:Headline Asahi
:Headline Yomiuri
:Headline Sankei
:Headline Mainichi
とすることで各紙のヘッドラインが表示されます。指定する名前はasaやyomiのように、
多少の揺らぎがあっても大丈夫です。今は4紙のみの対応ですが、拡張性を考慮して設
計したので、少しの労力で他のサイトにも応用できるでしょう。興味がある方は試して
ください。
378:あぼーん
あぼーん
あぼーん
379:名無しさん@お腹いっぱい。
03/05/25 19:13
うう、KoRoNさんに「Vimから出ない人」にされちゃうよー
nikkei.co.jpは「宿題」?
380:KoRoN@Vim%Chalice ◆8XALICEsdk
03/05/25 21:03
>>379
是非書いてください。<nikkei.co.jp
日経はコメント使ってマーキングされているから
やりやすそうですねぇ。
381:KoRoN@Vim%Chalice ◆8XALICEsdk
03/05/26 17:20
>>377
URLリンク(www.kaoriya.net)
アップデートしました。更新点は以下のとおりです。
- プラグイン方式を導入して対応サイトの追加を行ない易く
- まっつんさんの協力によりスラッシュドットジャパンとYAHOO JAPANに対応
382:あぼーん
あぼーん
あぼーん
383:名無しさん@お腹いっぱい。
03/05/30 14:04
:%!lynx -dump URLリンク(www.nikkei.co.jp)
384:名無しさん@お腹いっぱい。
03/05/30 14:32
URLリンク(www.kaoriya.net)
日経とかいろいろ追加されている。
385:名無しさん@お腹いっぱい。
03/05/30 15:13
scriptencoding cp932を headline/以下にも書いてほしいんだけど。
386:KoRoN@Vim%Chalice ◆8XALICEsdk
03/05/30 15:46
>>385 了解。忘れてた。
387:KoRoN@Vim%Chalice ◆8XALICEsdk
03/05/31 00:18
直しました。
URLリンク(www.kaoriya.net)
scriptencoding cp932の追加とasahiのURL変更に対応
388:名無しさん@お腹いっぱい。
03/06/01 11:23
info.vimでinfoをみてるときにhおすとヘルプ(?)がでてしまうんですが…
389:名無しさん@お腹いっぱい。
03/06/01 13:04
>>388
hでは出ないぞ。c-hじゃないのか?
390:名無しさん@お腹いっぱい。
03/06/01 14:17
>>388 でるけど、何か困るのか?
391:名無しさん@お腹いっぱい。
03/06/01 16:02
hで左に移動できないじゃん。
392:KoRoN@Vim%Chalice ◆8XALICEsdk
03/06/02 11:27
Headline更新
URLリンク(www.kaoriya.net)
Slashdotが6月になっておかしくなったのを修正
393:名無しさん@Vim%Chalice
03/06/03 02:11
そろそろg:chalice_curl_optionsみたいなcurlオプションキボーン
防火壁ナノネン. . .
394:KoRoN@Vim%Chalice ◆8XALICEsdk
03/06/04 11:37
>>393
URLリンク(www.kaoriya.net)
対応しました。
395:KoRoN@Vim%Chalice ◆8XALICEsdk
03/06/17 19:39
まっつんさんとのコラボーレーション。Exciteを使った日英翻訳です。
URLリンク(www.kaoriya.net)
範囲選択して:ExciteTranslation。なお翻訳結果は保証されません。
396:KoRoN@Vim%Chalice ◆8XALICEsdk
03/06/17 19:42
>>395
> KORABORESHON with Mr. まっつん. It is Japanese-English translation using Excite.
コラボーレーションは無いよなぁ…(´・ω・`)
397:名無しさん@お腹いっぱい。
03/06/18 01:28
>>395
ご苦労様です。
早速試してみたところ、なんかエラーが出ましたが翻訳出来ました。
出てきたエラーはこんな奴:
E177: 未知の関数 AL_echo
33 call AL_echo('Translating...', 'WarningMsg')
良く分からなかったのでコメントアウトしちゃいました。
多分、うちの設定が悪いかなんかのせいだと思うのですが、
一応使ってる奴のバージョンをご報告しておきます。
香り屋版 Windows用y gvim V6.1
適用済みパッチ: 1-474
398:名無しさん@お腹いっぱい。
03/06/18 01:46
>>397
chaliceに同梱されてるalice.vimが無い模様。
URLリンク(www.kaoriya.net)
これを取ってきなされ。
chaliceがインスコされてないということはcurlとかも無さそうだな。
URLリンク(www.kaoriya.net)
たぶんこれも取ってくることになるだろう。
399:名無しさん@お腹いっぱい。
03/06/18 02:05
>>398 訳が出てくるということはcurlは入っていると思われ
400:397
03/06/18 02:07
>>398
ありがとうございます。
ご指摘通り、chaliceのバージョンが古いせいでした。
v1.7を使用していたのですが、
v1.8に上げたところ、エラーが出なくなりました。
お騒がせ致しました。
いや、それにしても、このプラグインは便利ですね。
感謝感謝です。
401:名無しさん@お腹いっぱい。
03/06/18 17:25
calendar.vim : Calendar
calendar.vim 1.3t 2003-06-17
URLリンク(vim.sourceforge.net)
更新されてます。
402:名無しさん@お腹いっぱい。
03/06/20 12:35
VimTweak : The tweaking dll for GVim.exe.
URLリンク(vim.sourceforge.net)
Initial upload
またまた、「まっつん」さんです。
403:KoRoN@Vim%Chalice ◆8XALICEsdk
03/06/20 12:56
前からtweakが公開されれば、KaoriYa版からキャプション機能を削除しても良いかなぁって考えていたんです。
でもtweakでキャプションを消すとテキストエリアのウィンドウがズレることが発覚。どうしよ。
404:名無しさん@お腹いっぱい。
03/06/20 22:38
ウィンドウがズレるのは、ちょっとやだなぁ。
てか、キャプションってなんですか?
Windows版で、透明度がうんたらっちゅーやつですか?
405:KoRoN@Vim%Chalice ◆8XALICEsdk
03/06/20 23:00
>>404
Windowsではタイトルバーというのが分かりやすいでしょうか?。
香り屋版を使っているならば :set guioptions+=C してみれば一発でわかります。
なお戻すには :set guioptions-=C
406:名無しさん@お腹いっぱい。
03/06/21 22:18
.gvimrcに、
syntax match Trailing "\s\+$"
highlight link Trailing Error
と書いたのですが、うまく反映されません。
なんかfiletypeとかsyntaxかがないときだけうまくいく感じです。
いつでも反映されるようにしたいのですが、
どこが間違っているんでしょうか。
407:KoRoN@Vim%Chalice ◆8XALICEsdk
03/06/21 22:45
>>406
Vimの基本的な動作に対する理解が足りない、のが原因です。syntaxはその型のファ
イルを開いた際に毎回設定され、その設定開始前に必ず:syntax resetかそれ相当の
処理が行なわれています。そのため起動時に1度だけ実行される.gvimrcの設定はその
時点で上書されてしまい、効力を発揮することはありません。
そんなわけなのでsyntaxの設定が終わった後に、それらの設定が追加されるように
autocmdにSyntax等々を組み合わせてみるのが良いでしょう。以下はその例です。た
ぶんこのままでは思い通りに動かないので適当に修正してみてください。
function! s:TrailingError()
syntax match Trailing "\s\+$"
highlight link Trailing Error
endfunction
autocmd Syntax * call s:TrailingError()
408:名無しさん@お腹いっぱい。
03/06/21 23:30
まぁそういうおまいも vi に対する理解があるとはとても
おもえんのだが。いいかげんやめたら?
409:名無しさん@お腹いっぱい。
03/06/21 23:42
タイミングだからゆうぞ。はっきりあんた臭い。コードの占有意識高すぎ。
やることがいちいち SHIFT-JIS 臭い。 architecutre dependentily.
抱える人間としては最悪に近い。
あんたが vim を手放せば一年の停滞はあってもトータルでみな
幸せになると思う。そうおもったことはない?
410:名無しさん@お腹いっぱい。
03/06/22 00:08
>>408
>>409
まぁまぁ、vimに貢献しているのは間違いないんだから。
ただ、KoRoNさんもこのスレだけじゃないんだけど、発言にトゲ
があることを自覚してないんだろうな。
411:404
03/06/22 00:09
>>405
タイトルバー 消えたーー
なるほど、よう分かりました。
これで更に1行多く表示できる。 新たな発見だわぁ…
412:名無しさん@お腹いっぱい。
03/06/22 21:21
KoRoN氏は別に嘘ついたりはしてないだろ。
時々ずばっと言った真実に、自分が痛いヤツだって
ことを指摘されたくせに、それを認めたくない厨ども
には嫌な人に見えるかもしれんが、それだけのこと。
現実を見ずに出る杭を打ちたいだけの馬鹿は氏んでいいよ。
413:410
03/06/23 01:48
>>412
自分より頭のいい人間に、「おまえ馬鹿だな」と言われて
その人間をやな奴と思うのは普通だと思うが。
そのやりとりを聞いている周りの人間もイヤな気分になるのも
普通だと思うが。
そもそも、たかが掲示板で人を否定する必要はないはずだが。
いや、匿名の掲示板だからこそ否定することができるのか。
ここは、厨房お断りのスレなのか?
だったら、「vim用のくだ質」みたいなものを作らなきゃダメかな。
まぁ、そういう感情を理解せずに、論理的に肯定しようとする
お前こそいい人ぶろうとしているだけだろう。
自分ができるから当然ほかの奴もできるだろみたいに思っている
奴ほど最低なものはないからな。
414:名無しさん@お腹いっぱい。
03/06/23 01:50
>>413
ちょっとやめて頂けませんか。見苦しい。
415:名無しさん@お腹いっぱい。
03/06/23 02:56
>>413
どこが間違ってるか聞いたら、間違ってる箇所を指摘してくれただけでしょ。
言い方が気にくわない人がいるのはわかるけど、気にくわなくない人まで
否定する姿勢は見苦しいよ。
> そもそも、たかが掲示板で人を否定する必要はないはずだが。
そうですねぇ、本当に。
416:名無しさん@お腹いっぱい。
03/06/24 01:25
>>408
なぜにvi?
KoRoNさんは、viに対する理解といってないが。。
417:名無しさん@お腹いっぱい。
03/06/27 18:29
保存してないバッファでZoomWinを使うと、
バッファが/tmp/v012345/0になってしまう。
418:名無しさん@お腹いっぱい。
03/06/27 20:42
VimSpeak : Speak selected text with MS Agent
URLリンク(vim.sourceforge.net)
また新しいのが登録されました。
419:名無しさん@お腹いっぱい。
03/06/28 02:22
>>407
もう一つ
応用的な(略
があれば原因は100%特定出来そうだなw
420:名無しさん@Vim%Chalice
03/07/07 22:08
同じキーに2つ以上mappingされている時に
片方だけをunmapすることは出来ますか?
421:KoRoN@Vim%Chalice ◆8XALICEsdk
03/07/07 22:16
>>420
何を聞きたいのかイマイチわからないので想像で答えます。
:map <C-D> somestring1
:map <C-D> somestring2
このように続けて登録した時は後者が優先されるので、そもそも同じキーにマップす
るという概念が成り立ちません。次に
:map <C-D>1 somestring1
:map <C-D>2 somestring2
とした時には、これは別のマッピングとして登録されるのでそれぞれ
:unmap <C-D>1
:unmap <C-D>2
で別々に解除できます。但し「<C-D>で始まるマッピング全てを解除する」という方
法はちょっと思いつきません。
422:420
03/07/08 00:05
>>421
分かりにくくてすいません。
ちゃんと具体例を書けば良かったですね。
<buffer> 有りでmappingされているものと、
<buffer> 無しで登録されているものの2つがダブって見えてただけでした。
例えば、
nnoremap <C-N> somestring1
nnoremap <buffer> <C-N> somestring2
の違いでした。ここで:nmapをすると、
n <C-N> * :somestring1
n <C-N> *@:somestring2
となります。@はbuffer localの印ですよね。
やりたいことは「どちらか片方を指定してunmapしたい」ということなのですが、
ヘルプを読んでunmapにも<buffer>を指定できることが分かりました。
<buffer>付きでmapしたら<buffer>付きでunmap、
そうでなければ<buffer>を付けずにunmapということで落ち着きました。
というわけで結局、自己解決しました。お騒がせしました。
423:あぼーん
あぼーん
あぼーん
424:名無しさん@お腹いっぱい。
03/07/26 00:24
vim-scriptでTimer(event)は無いのでしょうか?
無い場合、何か代替案はありますか?
425:KoRoN@Vim%Chalice ◆8XALICEsdk
03/07/26 00:28
>>424
:help CursorHold
くらいでしょうか。単にウェイトさせるだけなら
:help :sleep
を参照してください。
426:名無しさん@お腹いっぱい。
03/07/26 01:14
>>425
ありがとうございます。
どちらも知っている内容でした。
ということは定期的にTimerEventを発生させる方法は無いのですね...
perlなどのI/Fを使うしかないのかな?
427:KoRoN@Vim%Chalice ◆8XALICEsdk
03/07/26 10:41
>>426
いや、それも無理です。if_perl主導で何かコトを起こすことができないんです。Perl
のスレッドを回してVIM::DoCommand使うとか、出来なくは無いんですがいろいろ不具合
があります。また私が直接確認したわけではありませんが、純粋にPerlスレッドとVim
の相性の問題も最近報告されました。
あとは外部プロセスからvim --remote-*を定期的に起動する、という方法も考えられま
すけど、これだと頻度の問題があるでしょう。
なんにしても用途に応じて別の解決法を模索した方が良いかもしれません。ユーザの操
作に割込んで、タイマーを含む何らかのイベントを起こすということはできません。そ
のようなことをしたければ半無限ループ内でgetchar()を使って、完全に入力をコント
ロールするしかないでしょう。
428:名無しさん@お腹いっぱい。
03/07/26 11:01
>>427
> if_perl主導で何かコトを起こすことができないんです。
そうだったんですか...
> Perlのスレッドを回してVIM::DoCommand使うとか、出来なくは無いんですがいろいろ不具合
> があります。また私が直接確認したわけではありませんが、純粋にPerlスレッドとVim
> の相性の問題も最近報告されました。
ちなみにどのような不具合/相性問題なんでしょうか?
> ユーザの操作に割込んで、タイマーを含む何らかのイベントを起こすということはできません。
なるほど勉強になります。
> そのようなことをしたければ半無限ループ内でgetchar()を使って、完全に入力をコント
> ロールするしかないでしょう。
残念ながらキー入力等を受け取った時にしかできそうにないんですね。
放っておいても定期的にEventが来る。ということはできないのか...
429:KoRoN@Vim%Chalice ◆8XALICEsdk
03/07/26 11:12
>>428
> ちなみにどのような不具合/相性問題なんでしょうか?
完全に再現条件を把握してないのですが、私が試した際にはVimを巻き込んでロック
したり落ちたりしました。
> 残念ながらキー入力等を受け取った時にしかできそうにないんですね。
getchar(0)とかすれば、キーが無くても即帰ってきます。
> 放っておいても定期的にEventが来る。ということはできないのか...
それができないからIRC on Vimとか諦めました。
430:KoRoN@Vim%Chalice ◆8XALICEsdk
03/08/01 20:24
Headline更新しました。
URLリンク(www.kaoriya.net)
431:名無しさん@お腹いっぱい。
03/08/01 21:23
>>430
取扱説明書イイ!
432:331
03/08/01 22:00
>>348
s/330/331/
まぁ、それはともかく。
別にどこにばれようと問題なしです。
でなきゃURL晒さないですってば。
433:331
03/08/01 22:00
>>432
誤爆。スマソ
434:KoRoN@Vim%Chalice ◆8XALICEsdk
03/08/01 23:57
>>431 取扱説明書、というより各ヘッドラインの寸評ですね。
私はZDNetとAsahiとYomiuriにZDNet、それにSlashdotJapanを主に見てます。
435:名無しさん@お腹いっぱい。
03/08/02 18:31
plugin/headline/1101com.vim~
チルダがついてますが。
436:KoRoN@Vim%Chalice ◆8XALICEsdk
03/08/02 20:43
作ろうかなぁと考えて、結局止めたからです。
437:名無しさん@お腹いっぱい。
03/08/06 14:08
現在編集中のバッファ(ファイル)が未保存かどうかを
取得する関数などはありませんか??
438:名無しさん@Vim%Chalice
03/08/06 14:12
getbufvar()
439:あぼーん
あぼーん
あぼーん
440:名無しさん@お腹いっぱい。
03/08/06 14:34
:echo &modified
441:437
03/08/06 14:58
&modifiedで状態を取得することが出来ました。
どうもありがとうございました。
442:KoRoN@Vim%Chalice ◆8XALICEsdk
03/08/07 20:42
某スレで「foldはアウトラインとしては使いにくい」という至極納得な意見が出され
ていたので、なんとかしてみるスクリプトを書いてみました。
URLリンク(www.kaoriya.net)
foldが有効になっているテキストバッファで :call FoldDigest() を実行すると、
foldのダイジェストツリーが表示された新バッファができます。そのバッファの方で
注目したい項目の行で<CR>すると、テキストバッファの該当箇所へカーソルが飛びま
す。これで少し使いやすくなるでしょうか?。
443:名無しさん@お腹いっぱい。
03/08/08 00:04
>>442
某スレから参りました。
はぁ、便利。
あのスレの影響で使い始めたんですけど良いエディタですね。
使っていて気持ちが良いというか、リズムがあるというか。
スクリプトはだいぶ先になると思いますがちょこちょこ勉強していこうと思います。
444:KoRoN@Vim%Chalice ◆8XALICEsdk
03/08/08 00:19
>>443
動くようになったばかりなのでα版と考えてください。自動かそれに順ずる方法で
call FoldDigest()する仕組みとか、行がズレた時の処理とか、ウィンドウの取り回
しとか考えていますんで、もうちょっと使えるものになるでしょう。
ま、Vimに限りませんがイッペンにイロイロ覚えようとはせず、その時に必要なもの
を必要なだけ覚えていくのが良いんじゃないでしょうか。
445:KoRoN@Vim%Chalice ◆8XALICEsdk
03/08/08 23:31
folddigest.vimをアップデートしました。
URLリンク(www.kaoriya.net)
使い方は>>442と一緒ですが…
> 行がズレた時の処理
主にコレについて修正しました。
:let folddigest_options = "quickfix"
とすることで+quickfixを利用し、編集してズレたり消えたりしてもちゃんと飛べる
ようになります。ただし:makeや:grepと併用できなくなるので注意してください。
:let folddigest_options = "flexnumwidth"
とすると、行番号の桁数が必要最小限になるので画面幅が狭いときには有効です。
オプションはカンマで接続して複数指定することができます。例:
:let folddigest_options = "quickfix,flexnumwidth"
この場合、行番号は一切表示されません。スッキリです。
446:名無しさん@お腹いっぱい。
03/08/11 05:51
>>418
うまく動かなかった・・
喋る前に消えたな・・
447:名無しさん@お腹いっぱい。
03/08/13 13:05
>>412
ずばっと言った真実て…(激藁
448:名無しさん@お腹いっぱい。
03/08/14 09:07
>>445
vim.sf.netではVim versionが6.0になっていましたが、6.1で試したらgetregがな
いとエラーが出ました。
URLリンク(vim.sourceforge.net)
449:KoRoN@Vim%Chalice ◆8XALICEsdk
03/08/14 09:15
>>448
ありがとうございます。descriptionに追記しておきました。vim.orgに登録する時に
は5.0か6.0しか選べません。そのため6.2でも6.0としか表示できないのです。
450:あぼーん
あぼーん
あぼーん
451:名無しさん@お腹いっぱい。
03/09/16 19:42
Vine Linuxでgvim(日本語版)を使っていますが、
起動時に検索など全ての文字入力が日本語になっており、
いちいち日本語をオフにしなくてはいけません。
初期設定は日本語(IME)をオフにする方法をどなたか御存じでしょうか?
452:名無しさん@お腹いっぱい。
03/09/16 20:08
>>451
h 'imi'
h 'ims'
スレ違い。
スレリンク(unix板)
453:名無しさん@お腹いっぱい。
03/10/05 05:25
昔は、は~ むずかしそ~だね~と見ていたが、
今日からちょっとやってみた。
役に立ちそうな関数って何気にたくさんあるのね。
454:名無しさん@お腹いっぱい。
03/10/12 02:12
すみません、前スレでfoldexprの連番処理についてカキコされたかたいらっしゃいますでしょうか?
もう一度functionを書いてくれるとありがたいのですが・・・。
1
1.1
1.1.1
2
2.2
2.2.2
みたいなのを
function! MyFoldFunc()
let line = getline(v:lnum)
if line =~ '\m^\s*[1234567890]'
return '>1'
elseif line =~ '\m^\s*[1-9]'
return '>2'
elseif line =~ '\m^\s*■'
return '>3'
else
return '='
endif
endfunction
set foldmethod=expr foldexpr=MyFoldFunc()
で処理したい!
455:名無しさん@Vim%Chalice
03/10/12 11:50
>>454
そのスクリプトが書き込まれたのはVim6スレのPart5ですね。書かれたのはまっつんさんですが、
URLリンク(www.kaoriya.net)
ココにコピーを置いておきました。細かいところはご自分で修正してください。
456:名無しさん@Vim%Chalice ◆8XALICEsdk
03/10/12 11:51
>>455 間違えて名無しさん+トリップ無しで書き込んでしまいました。
457:名無しさん@お腹いっぱい。
03/10/12 12:17
>>455
ありがとうございます。
何度も甘えてすみませんが、連番が入ったテストテキストファイルをvimでオープンしてもfoldされません。
何か呪文があるのでしょうか?
458:名無しさん@お腹いっぱい。
03/10/12 12:26
>>457
すみません、できました。逝ってきます。。
459:KoRoN@Vim%Chalice ◆8XALICEsdk
03/10/12 12:26
>>457
オープンした後に :source orderedlist_fold.vim してもダメですか?
460:名無しさん@お腹いっぱい。
03/10/12 16:43
>>459
あ、いえ、出来ました。とってもいい具合です。
ありがとうございます。今まで楽してきましたが、徐々にVimスクリプト勉強してみたいと思います。
ところで、このfoldはtaglistみたいに、vsplitしたwindowに表示とかはできないのでしょうか?
461:KoRoN@Vim%Chalice ◆8XALICEsdk
03/10/13 00:50
>>460 >>442を参照してください。
462:名無しさん@お腹いっぱい。
03/10/13 11:17
>>461
あ、どもです。
ところで、>>455のfoldexpr=の後には、複数の関数つけても駄目でしょうか?
463:KoRoN@Vim%Chalice ◆8XALICEsdk
03/10/13 13:56
>>462 ダメです。
464:名無しさん@お腹いっぱい。
03/10/13 16:11
すみません。>>454を質問したものですが、
以下のように、連番の下にさらに■が先頭にあったら、カレントの階層から一つもぐるようにするにはどうすればいいでしょうか。。
どうか初心者にお恵みを(-人-)。。
1. 折り畳み1
これは折り畳み1のテキスト
■
これは折り畳み1■のテキスト
2. 折り畳み2
これは折り畳み2のテキスト
2.1. 折り畳み2.1
これは折り畳み2.1のテキスト
これは折り畳み2.1のテキスト
■
これは折り畳み2.1■のテキスト
2.1.1. 折り畳み2.1.1
これは折り畳み2.1.1のテキスト
これは折り畳み2.1.1のテキスト
■
これは折り畳み2.1.1■のテキスト
2.1.2. 折り畳み2.1.2
465:名無しさん@お腹いっぱい。
03/10/18 11:15
>>464
(´・ω・`) ショボーン
466:名無しさん@Vim%Chalice
03/10/19 23:52
script内で/やGでジャンプしてもjumplistに
履歴が残らないようにする方法ってあるのでしょうか?
scriptユーザが<C-I><C-O>でびっくりしないようにしたいのです。
できれば:Explorerがjumplistを汚さないように修正したいな~と思いまして。
よろしくおながいします
467:KoRoN@Vim%Chalice ◆8XALICEsdk
03/10/20 00:13
>>466
> script内で/やGでジャンプしてもjumplistに
/の代わりにsearch()、Gの代わりにexecute linenum使ってみてください。
468:466@Vim%Chalice
03/10/20 00:25
>>467 おお!早速のお返事ありがとうございます。
あと、もとの場所に戻りたいときhjklで何とかしようと思って↓みたいにしてます。
気分はma, `aなんですが。。。
もっとうまい方法は無いでしょうか?
function! s:Mark() "{{{2 jumplistを汚さないMark&Jump
return s:Cons(line('.'), col('.'))
endfunction
function! s:Jump(marker) "{{{2 jumplistを汚さないMark&Jump
let l:ml = s:Car(a:marker)
let l:mc = s:Car(Cdr(a:marker))
let l:cl = line('.')
if l:ml < l:cl
let l:vmotion = (l:cl - l:ml) . 'k'
elseif
let l:vmotion = (l:ml - l:cl) . 'j'
else
let l:vmotion = ''
end
exe 'norm 0' . l:vmotion . (l:mc-1) . 'l'
endfunction
469:KoRoN@Vim%Chalice ◆8XALICEsdk
03/10/20 00:56
>>468 :help cursor()
470:パパパッチ466@Vim%Chalice
03/10/20 01:19
>>467 おおおお!またまたお返事ありがとうございます。一行になりますた。
function! s:Jump(marker) "{{{2 jumplistを汚さないMark&Jump
call cursor(s:Car(a:marker), s:Car(Cdr(a:marker)))
endfunction
てゆーか、漏れの真の要求が分かりますた。
scriptの副作用をユーザに与えたくないのです。
具体的には、こいつらを一発で退避・復帰したいな~と思ってるのです。
:registers
:jumps
:marks
undobuffer
undolevels=-1だとバッファが丸ごと消えちゃうから厳しいです。
:reと:marksはスクリプトで出来そうだけど、:juとundobufferは
VIM本体に機能を追加するしかないのかな。。。
:juやundobufferについては
call これよりundobufferに追加しない()
"バッファを編集
call これよりundobufferに追加する()
みたいな機能でも充分なんだけど。
「よ~し、パパパッチ当てちゃうぞー」とか思う人、居ません?
ちなみに、漏れは「よ~し、パパC開発環境作っちゃうぞー」レベルだす。
#質問乱発で失礼しました >KoRoNさん
471:KoRoN@Vim%Chalice ◆8XALICEsdk
03/10/24 11:45
>>470
> scriptの副作用をユーザに与えたくないのです。
Chaliceとかイロイロ作っている経験から言いますと…「独立したアプリケーション」
じゃなくて「エディタのスクリプト」なんですから、そういうことに神経使う手間と時
間で別の仕事に取り掛かったほうが良いでしょう。
472:名無しさん@Vim%Chalice
03/10/31 01:02
class ●● {
...
};
をfoldingしたい。
何か良い方法はありますか?
以下試したこと
fdm=markerは正規表現使えなさそうだし,
# class定義毎に予め {{{ }}} で囲んであればいいけどそんなのはまず有り得ないので
fdm=exprはregion指定ができない?(できるのか?)
fdm=syntax で syntax region start="^class" end="^};" しようとしたら
$VIMRUNTIME/syntax/cpp.vim の keyword cppStructure に含まれる"class"の方が優先度高くて
region の方で class が引っかかってくれなかった
cppStructure を clear するか、clear 後にcontains付きで再定義すればOKだったが…
# containedの場合は、region側で contains=cppStructure が必要
うーむ。一筋縄で行きそうにない…
foldtextとか使えば出来るのかなぁ?(使ったことないから分からない…)
473:472@Vim%Chalice
03/10/31 01:03
× clear 後にcontains付き
○ clear 後にcontained付き
474:名無しさん@お腹いっぱい。
03/10/31 08:16
おれはそういうのはexprでやった。
URLリンク(www.vim.org)
setl foldexpr=FoldBrace()
setl foldmethod=expr
function! FoldBrace()
if getline(v:lnum) =~ '^class .*{$
return '>1'
endif
if getline(v:lnum) =~ '^};$'
return '<1'
endif
return foldlevel(v:lnum-1)
endfunction
~
475:名無しさん@お腹いっぱい。
03/10/31 20:24
検索をすると、次に起動したときに、その検索語が色づけされます。
これをキャンセルする、または色づけしないようにするにはどうしたらいいですか?
476:名無しさん@お腹いっぱい。
03/10/31 20:47
>>475
スレリンク(unix板:531-533番)
スレ違い?
477:475
03/10/31 22:25
>>476
アリガトン
478:472
03/10/31 23:37
>>474
㌧!
vim online に tips があったんだね
479:472
03/11/04 03:13
>>474
試してみたんですが、returnする時に'<1'表記するとバグりません?
foldlevelが1のまま0に減らないんですよ…
'>1'の方は正しく1になっているようですが…
これらを'a1'と's1'に変えるとより分かり易く再現されます。
最初のs1の部分で減らないので、2回目にa1が実行される所でfoldlevelが更に増えて2になります。
ですが、2回目のs1の所まで来ると、一気に0まで戻ります。
vimのfold関係のバグかな?
480:474
03/11/04 07:55
>>479
最後の
return foldlevel(v:lnum-1)
を
return '='
にするとうまくいくかも。
helpにはfoldlevel(v:lnum-1)を使えって書いてあるけど、実際には
-1にしかならない。
シングルクウォートがぬけてました。
if getline(v:lnum) =~ '^class .*{$'
481:名無しさん@お腹いっぱい。
03/11/13 21:19
ChangeLogMemoをVimでお手軽に作れるようにとスクリプトに挑戦してみたけど
どーもうまくいかん。normalが未定義と言われ無効な表現と怒られる。
:Changelogでmemo.changelogってーファイルを開いて先頭に整形した
日付とかを入れたい。
どこがどう間違ってるか教えて。以下の関数とかは全部_vimrcに記述している。
URLリンク(apollo.u-gakugei.ac.jp)
ここのは試したけど動かせなかった。
command! Changelog :call Chlog()
function Chlog()
execute ":e c:\Program Files\Vim\memo.changelog"
execute "normal gg0"
map ,d ggi<CR><CR><ESC>kki<C-R>=strftime(\"%c\")<CR>
\ nanasisan <nanasi@2ch.net><ESC>o<CR><TAB>*
endfunction
482:481
03/11/14 21:13
いろいろ調べてよーやく望む動作ができるようになったぞい
多分とても原始的な方法。ま、せっかく作ったんで書いとくよ。
" ,d : 時刻と署名を先頭に挿入
" ,n : エントリを追加
" どちらもChangeLogMemo用
map ,d ggi<CR><CR><ESC>kki<C-R>=strftime("%Y-%m-%d(%a) %X")<CR> nanashisan <nanashi@3ch.net><ESC>o<CR><TAB>*
map ,n ggo<CR><TAB>*
" :Changelog : clmemo.changelogファイルを開くコマンド
command! Changelog :call Changelog()
function Changelog()
let clmemo = $VIM . "\\clmemo.changelog"
execute ":e " . clmemo
let timestamp = getline("$")
let now = strftime("%Y-%m-%d")
if (timestamp ==? now)
execute "normal " . ",n"
else
execute "normal " . ",d"
endif
endfunction
483:名無しさん@お腹いっぱい。
03/11/27 16:47
viつかいだして2年ぐらいになるし,
そろそろスクリプトも書けなあかんなぁと思ってこのスレを読んでみると,
簡単なことでも四苦八苦する様を見てemacsに移行しようかと
思ってしまった. lispは応用効くし.
484:名無しさん@お腹いっぱい。
03/11/27 17:13
その程度の動機でemacsに移行できるならしとけ
485:名無しさん@お腹いっぱい。
03/12/02 21:58
機能多すぎてさ。迷っちゃうわけよ。どの編集方法がもっとも最速か?少ないキータッチで実現できるか?
入力補完を使用した方が早いのか、画面ないの単語まで移動してコピって作成した方が早いのか?
迷ってるうちにマウスとキーボードでコピってるヤツの方がサクサクッと仕上げちゃってるわけよ。
編集そのものよりいかにエディタを使いこなすか?にずれちゃってるわけよ。ある程度学習すればリターン
の方が大きくなるであろうとは思うのだけれど、なかなかその道が見えてこないわけよ。半年以上はvi
使ってると思われるんだけど、いまだにその辺のエディタと対してスピード変わってねーんじゃねー?
っていう疑いをぬぐい切れぬわけよ。
486:名無しさん@お腹いっぱい。
03/12/02 22:04
とりあえず、ここはvim6の、それもスクリプトを専門に扱うスレなので
ここはスレ違い。
vi 2nd
スレリンク(unix板)
EmacsとViはどっちが★腐れたエディタ★か
スレリンク(unix板)
Vim vs Emacs (Editor War)
スレリンク(unix板)
487:名無しさん@お腹いっぱい。
03/12/03 13:03
485 には vi 使いこなす能力がないっつーことだ
488:名無しさん@お腹いっぱい。
03/12/08 17:49
初めて vim スクリプトを勉強するなら、 eval.txt と usr_41.txt のどっちの方を先に
読んだ方がいいですか?
行数が eval は 41 のほうの 3 倍もあるので、どんな感じなのかと。
489:KoRoN@Vim%Chalice ◆8XALICEsdk
03/12/08 18:19
>>488
他のプログラミング言語に慣れているのであれば、リファレンスマニュアルである
eval.txtを必要なところだけかいつまんで読み、差分を理解するようにしたほうが近道
です。そうでないならusr_41.txtを読みながら1つ1つ順番に試した方が早く習得できる
でしょう。
490:名無しさん@お腹いっぱい。
03/12/08 20:42
>>489
eval を斜め読みしてみます。
491:名無しさん@お腹いっぱい。
04/02/07 15:30
このスレとか:help augroupとか色々なスクリプトとか読んでみたんだけど、
未だにaugroupが何の為にあるのか分からない。
これ使うとどんな嬉しい事があるの?
492:名無しさん@お腹いっぱい。
04/02/07 15:38
スクリプトが自分でインスコしたautocmdだけを綺麗に消せる
493:491
04/02/07 18:52
なるほど、そういう用途の為にあるのか。
教えてくれてどうもありがとう、>>492さん。
494:名無しさん@お腹いっぱい。
04/02/18 09:08
vimスクリプト開発に便利なコマンドってどんなのがありますか?
とりあえず :source ってのは使えそうだけど、Emacs の
eval-last-sexp みたいな、カーソル行をコマンドとして解釈して
実行、みたいなのがあると便利なんですが。これ自体スクリプトで
書けそうだけど…。
495:名無しさん@お腹いっぱい。
04/02/18 09:21
>>494 yy:<C-R>"
496:493
04/02/18 11:15
>>495
おおっ、こりゃ便利です!! ありがとうございます。
ストローク数多くなるけど、^y$:<C-R>" でもイケますね。
(行末の ^M を省くため)
497:名無しさん@お腹いっぱい。
04/02/18 11:29
お気軽スクリプト生成コマンドとしてはq:もあるね。
コマンドラインの履歴を編集してそのままスクリプトに出来る。
498:名無しさん@お腹いっぱい。
04/02/18 13:06
ストローク数だけで言うなら Y:<C-R>"<C-H>
499:493
04/02/19 09:16
>>497
ときどき :q と間違えて q: を押すと出てきてたのはこれだったのか…
vi初心者なもので…
これで望みどおりのことができそうです。ありがとうございます!
500:名無しさん@お腹いっぱい。
04/02/19 09:55
そう言えば、ストローク数だけで言うなら Yq:P の方が短いな
501:名無しさん@お腹いっぱい
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
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:名無しさん@お腹いっぱい
04/02/21 01:33
なるほど。ありがとうございます。
思ったような動作をするようになりました。
504:初心者
04/02/26 07:50
platexをですね、
:platex %
なんて打ったら、コンパイルしてくれるわ
dvioutを起動してくれるわ
なんていうふうにするには
どんなスクリプトをかけばよいのですか?
505:名無しさん@お腹いっぱい。
04/02/26 08:15
>>504
ちょっと違うが。
nnoremap <buffer> <c-m> :!platex %<cr>:sil !xdvi %<.dvi >/dev/null 2>&1 &<cr>
506:名無しさん@お腹いっぱい。
04/03/03 09:56
IRC (;´Д`)ハァハァ
507:名無しさん@お腹いっぱい。
04/03/07 15:29
VimIRC.vim : An IRC client script
URLリンク(vim.sourceforge.net)
508:名無しさん@お腹いっぱい。
04/03/08 13:50
だれか #Vim つくって...
509:名無しさん@お腹いっぱい。
04/03/08 16:04
>>508
splitしてるでしょ。確かグローバルには#vimがあったはず。
510:名無しさん@お腹いっぱい。
04/03/08 21:03
>>508
どこのネットワークだよ。
WIDE系?freenode?2ch?
511:名無しさん@お腹いっぱい。
04/04/17 20:53
age
512:名無しさん@お腹いっぱい。
04/05/11 13:26
>>507
なんもかんがえずにとりあえず立ち上げてみたら、
いきなりsegmentation fault...
うーむ。
513:名無しさん@お腹いっぱい。
04/05/11 13:30
>>512
segfはvimのバグじゃねーか?
514:名無しさん@お腹いっぱい。
04/05/16 15:19
nomagicのときに
/.
と同様にハイライトさせたいのですが
let @/='.'
とやってもうまくいきません
何か良い方法はありませんか?
515:名無しさん@お腹いっぱい。
04/05/16 21:13
>>514
よくわからないけど
/\.
じゃなくて?
let @/='.'
でもうまくいくけど、一回検索しないと反転しないね。そゆこと?
516:514
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
04/05/16 23:49
>>516 こんな感じで
let @/ = '\V'.escape(@@, '\')
518:514
04/05/18 22:48
>>517
お礼が遅くなってすみません
おかげさまで友人に見せても
文句の出ない(出ても一蹴できる)程度の
物になりました。
519:名無しさん@お腹いっぱい。
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
04/05/26 00:34
訂正。一文字とるなら
" multibyte
let str = strpart(str, idx)
let len = strlen(nr2char(char2nr(str)))
return strpart(str, 0, len)
のがカッコええか
521:519
04/05/26 00:38
すまそ
" multibyte
return nr2char(char2nr(strpart(str, idx)))
これでええやん
522:KoRoN@Vim%Chalice ◆8XALICEsdk
04/05/26 01:34
>>519 ありがとうございます。次のファイルをテストしてみてください。
URLリンク(www.kaoriya.net)
ちなみにスクリプトで単体の文字を扱う技術はChalice等の開発により無茶苦茶発達
してまして
matchstr(getline("."), ".", col(".") - 1)
こんな感じでmatchstrを使うのが定石です。近い将来format.vimも全面的に見直さな
ければいけませんな。
523:名無しさん@お腹いっぱい。
04/05/26 08:00
>>522
スレリンク(unix板:755番)の修正も
お願いします。
524:519
04/05/26 13:20
>>522
バッチリっス。サンクスコ
525:名無しさん@お腹いっぱい。
04/05/27 12:30
タブ押したら半角スペースが4つ分になるようにしたい
526:名無しさん@お腹いっぱい。
04/05/27 13:17
>>525 (・∀・)カエレ!!
527:525
04/05/27 14:53
>>526
帰る
528:名無しさん@お腹いっぱい。
04/05/27 15:26
>>527
乙
529:名無しさん@お腹いっぱい。
04/05/28 07:53
>>525
se expandtab tabstop=4
530:525
04/05/29 04:58
>>529
帰らなくて良かった
531:名無しさん@お腹いっぱい。
04/05/30 04:40
hoge.texを編集してるときに
:!xdvi % &
としたら
%はhoge.texを指してしまうわけですが、拡張子を除いた(hogeの)部分だけを表すには
どうすればよいでしょうか?
532:名無しさん@お腹いっぱい。
04/05/30 08:03
>>531
%<
533:531
04/05/30 13:28
>>532
ありがとうございました。
534:名無しさん@お腹いっぱい。
04/05/30 16:53
起動するときにウインドウを希望の位置に希望の大きさで立ち上げたい
535:名無しさん@お腹いっぱい。
04/05/30 17:25
>>534
:winp[os] {X} {Y}
:win[size] {width} {height}
536:名無しさん@お腹いっぱい。
04/05/30 19:24
>>535
Thx
胃に空いた穴が塞がりそうです
537:名無しさん@お腹いっぱい。
04/05/30 19:30
オートインデントは一切半角スペースで構成されるものでお願いしたい
538:名無しさん@お腹いっぱい。
04/05/30 20:56
>>537
誰に言っているのですか?
539:名無しさん@お腹いっぱい。
04/05/30 21:02
あなたですよ、m9(・∀・)あなた!
540:538
04/05/30 21:12
私は半角スペースでインデントしています。
541:名無しさん@お腹いっぱい。
04/05/30 23:25
>>537
:se expandtab
542:名無しさん@お腹いっぱい。
04/05/31 00:26
スクリプトと関係ない話はvim6本スレでよろしこ
543:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
04/06/04 00:11
>>543
解説プリーズ
545:名無しさん@お腹いっぱい。
04/06/05 01:18
カレント行をゲット。
カーソルが何桁目がをゲット。
カーソル位置より前と後にわけて、
前の部分の最後の"をbとする。
後の部分の最初の"をeとする。
長さはe-b-1。
複数行にわたってると無理だし、\のエスケープもわからない。
あんまり信用しないでね。
546:名無しさん@お腹いっぱい。
04/06/05 20:51
僕は、カーソルの下の文字列を取得する関数を書いて
let len = strlen(UnderCursorString())
こんな感じのほうが好みかな。
547:名無しさん@お腹いっぱい。
04/06/06 17:41
" の正規表現は \ を考慮して \(\\\@<!\(\\\\\)*\\\)\@<!" でどうか
548:名無しさん@お腹いっぱい。
04/06/06 21:04
二つほどお聞きしたいのですが
行頭からカーソル位置を含む位置までの文字列を取得したいとき
strpart(getline('.'),0,col('.'))
としてみたところカーソル位置が日本語だとうまくいきません。
指定した行を削除したいのですが
exec lnum.'d _'
としたのですがfoldingされている行だとfoldingごと纏めて消えてしまいます。
何か方法はありませんか?
549:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
04/06/06 21:54
化けた・・・
最後の行は無視してください
551:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
04/06/06 22:51
>>547
解説プリーズ
553:548
04/06/07 00:12
>>549
>>551
ナルホド、参考になりました。
foldenableなんて知らなかったし
matchstrをそんな風に利用するとは思いつきませんでした。
まだまだ、修行不足ですな、精進します。
554:KoRoN@Vim%Chalice ◆8XALICEsdk
04/06/07 00:21
>>547
\によるエスケープを考慮した""文字列にマッチする正規表現は慣用句でして
/"\(\\.\|[^"]\)*"
と書くことが多いです。これは、クォーテーションで始まってクォーテーションで終わ
る文字列のうち、エスケープされた文字「\\.」、もしくはクォーテーション以外の文
字「[^"]」のみで構成されるもの、という意味になります。
>>548
echo matchstr(getline('.'), '^.*\%'.col('.').'c.')
こんな風にひとつのmatchstr()で行うのが速度面から有利です。わかりやすさであれば
551さんの方法が優れています。
555:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
04/06/07 02:09
ちなみに >>547 の意味は直前に奇数個の \ が存在しない "
557:名無しさん@お腹いっぱい。
04/06/07 11:23
>>555
こうだね
! let b = matchend(backward, '.*\(\\\@<!\(\\\\\)*\\\)\@<!"')
558:KoRoN@Vim%Chalice ◆8XALICEsdk
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:名無しさん@お腹いっぱい。
04/06/21 22:27
質問があります。
VIM上でファイル検索>>リスト出力>>選択>>編集
が行えるようなスクリプトなどはあるでしょうか?
winmanager.vim や explorer.vim では subディレクトリまで
検索してくれないので困ってます。タスケテ
560:名無しさん@お腹いっぱい。
04/06/22 04:54
よく分かりませんが
> VIM上でファイル検索>>リスト出力
:new | read !find ./ -name "*.txt"
or
:new | read !dir /s /b "*.txt"
> 選択
ご自由に
> 編集
:execute 'edit! ' . getline('.')
561:名無しさん@お腹いっぱい。
04/06/22 06:26
>>560
ありがとうございます。
winmanagerみたいなToggle型(?)で実装してるスクリプトがあればうれしかったんですが、
ちょっとがんばって組んでみまふ ノシ
562:561
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:名無しさん@お腹いっぱい。
04/06/22 10:46
>>562 ファイル名の上で <C-]> もしくは <C-W><C-]>
564:561
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:名無しさん@お腹いっぱい。
04/06/22 18:02
>>564
:help gf
:help :cfile
:help :copen
:help errorformat
566:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
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
04/06/22 23:53
>>564
errorformatにならって、findファイルリストをつくって
cfileで読み込んで、copenで開いて
gfで開けってことかな? いろいろためしてみたけど、いまいちうまくいきません(´Д⊂グスン
つかえたら、copenは便利そうですね。
>>566
丁寧にありがとうございます^^
あと感想ありです。誉めてもらったヽ(´ー`)ノ
なるほど wincmdかぁ、ほんとは__findlist__があるか判定して、
バッファ名でやりたかったんですが、よくわかりませんでした(´ヘ`;)
setはカレントバッファにしか影響をおよぼさないんですね?
勉強になります。
あと、modifiableとかをオフにしておいたほうがいいのかな
windowsでしかうごきませんが、使ってみて要望とかありましたらお願いします。
できるかぎり、、がんばってみます(;・∀・)
569:名無しさん@お腹いっぱい。
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
04/06/26 10:24
>>568
プラグインっぽくしてみました。
使用方法は、ファイルのヘッダに簡単に記載してます。
URLリンク(rupan.zive.net)
571:561
04/06/26 10:26
s/568/569/
まちがえました(´Д⊂グスン
572:名無しさん@お腹いっぱい。
04/06/26 14:03
Findmode便利
まったりだけど良スレ
573:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
04/07/01 14:17
ちなみに使い方はファイルのどこでもいいので
vimex: function! SayHello()
vimex: return 'Hello'
vimex: endfunction
vimex: let test = SayHello()
このようにスクリプトを書いておくと、その部分だけ抜き出して実行します。
フォーマットは g:MX_mx か b:MX_mx を書き変えて変更します。
576:名無しさん@お腹いっぱい。
04/08/20 17:19
2つ以上の name spaces を同時に指定するのはできないんですよね
b:s:hoge とか bs:hoge みたいなかんじで
577:KoRoN@Vim%Chalice ◆8XALICEsdk
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
04/08/21 06:48
>>577
そんな方法が。参考になりました。
579:名無しさん@お腹いっぱい。
04/10/19 12:36:56
"レジスタに値が入った時点でなんだかの動作を起こすことって可能でしょうか?
具体的にはレジスタの履歴をyyした時点で保存したいのですが。
580:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
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:名無しさん@お腹いっぱい。
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
05/01/15 16:49:59
>>587
なんかその diff 微妙におかしくありませんか?
あ、全角「?」が含まれている?
589:名無しさん@お腹いっぱい。
05/01/15 17:05:54
そろそろuuencode.vimほすい鴨
↓がんがれ
590:586
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
05/01/15 19:21:50
すみません。
590も変。
全角?を半角backslashにしただけじゃ直りませんね。
1行足しただけです。
あと、"Vim ? is"の所はbackslashの後に1を足して下さい。
顔を洗って寝直して来ます。
592:KoRoN@Vim%Chalice ◆8XALICEsdk
05/01/15 20:10:56
>>589
URLリンク(www.kaoriya.net)
既にあるかも。
:call Uudecode()
でカーソル行以降の最初のbegin~endブロックをデコードしてカレントディレクトリ
に保存します。Chaliceのバッファに対しても使えます。一応
:call Uuencode(filename)
もあるみたいだけど、なんかうまく動いてないかも。
593:586
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
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
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:名無しさん@お腹いっぱい。
05/01/26 19:57:33
あ・・・あのですねあの・・
this->hoge[ i ]なんてなってるのが200行くらいあるんですよ
これら全てを急遽
(*(this->hoge + i))
に変更したいんですよ
あのよろしかったら・・・その・・・・ねそのぉ・・・教えて下さい.
597:名無しさん@お腹いっぱい。
05/01/26 20:49:34
>>596
なぜ変更したいの?
598:名無しさん@お腹いっぱい。
05/01/27 09:53:59
そのままポインタ参照したらいいやん
599:名無しさん@お腹いっぱい。
05/01/27 12:46:10
こんな感じ?
s@\(\k\+\)->\(\k\+\)\[\s*\(\k\+\)\s*\]@(*(\1->\2 + \3))@
これでダメならPerlスレとかで聞いた方がいいかも.
600:名無しさん@お腹いっぱい。
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
05/02/12 15:13:46
自分で書け
602:名無しさん@お腹いっぱい。
05/02/12 20:57:04
WinのCygwin上でvim使ってる人いる?
見ためがいいからgvim使ってるけど,ちょっとしたとき<C-z>で
シェルに降りられるのも便利なんだよねえ.
603:名無しさん@お腹いっぱい。
05/02/14 08:38:41
>>601
やはりそうなるのか。
「同じ事考えてますねー。ボクは作っちゃいましたよ!」という人が現れるのを期待してたんだが。
604:名無しさん@お腹いっぱい。
05/02/14 09:34:10
> あるフォルダ内のファイルを再帰的に検索
project.vim で出来るかな。
605:名無しさん@お腹いっぱい。
05/02/15 00:56:08
>>604
ありがとー。試してみるよ。これでダメなら書くか...
606:586@Vim%Chalice
05/02/15 21:44:24
URLリンク(cvs.kaoriya.net)
から 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:名無しさん@お腹いっぱい。
05/02/17 14:32:38
>>607 matchは1つしか定義できないし、複雑な条件を付加することもできない
609:名無しさん@お腹いっぱい。
05/02/17 15:15:21
ありがとう。
そっか、だから match none でも動くのか。
610:名無しさん@お腹いっぱい。
05/02/18 03:03:35
:match yocchan toshichan
611:名無しさん@お腹いっぱい。
05/02/21 09:30:55
>>610 で「tanokin torio」がマッチするようになりました。
ありがとうございました。
612:名無しさん@お腹いっぱい。
05/03/21 04:20:16
windows環境でgtags.vimを利用している方はいますか?
私の環境だとエラーがでて動かないのですが
613:名無しさん@お腹いっぱい。
05/04/23 11:54:58
SuperTab.vim、(GTKの)ximと相性悪くない?
<C-X>押すとximがonになるからいちいちoffにしないと次の操作を受け付けない。
614:名無しさん@お腹いっぱい。
05/06/01 14:07:44
Vim7のスクリプトがだいぶ強まってるので
無意味にベイジアンフィルタを書いてみた
URLリンク(tokyo.cool.ne.jp)
そのうちpythonになっちゃいそうないきおいだ
615:名無しさん@お腹いっぱい。
05/06/05 06:54:04
どんなとこが強まってるのかちょっと紹介してもらえるとうれしいです。
616:名無しさん@お腹いっぱい。
05/06/05 08:15:44
配列や連想配列が実装された
617:名無しさん@お腹いっぱい。
05/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:名無しさん@お腹いっぱい。
05/06/05 13:38:25
system()は出力をリダイレクトで受け取るから実際に実行するコマンドが
dir > C:\test > tmpfile
的なことになってるとおもわれ
:9verbose echo system("dir > C:\\test")
とかすれば確認できる。出力を直接受け取る必要がないなら
:silent execute "! dir > C:\\test"
で、目的の動作になると思う
619:617
05/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:名無しさん@お腹いっぱい。
05/06/05 23:36:16
globalはオーバーロードした関数ごとにタグ作ってるみたいだから
普通に使えるんじゃないの。さすがに文脈を判断してジャンプする
とかむりだろうけど、複数候補から自分で選ぶくらいはできそう。
621:名無しさん@お腹いっぱい。
05/06/07 23:32:27
>>615
直接ファイルの入出力ができるようになったのが便利。
あと、まだ実装されてないみたいだけど文字列をforループで処理できるようになるらしい。
つーかリストはやっぱり強力やなぁ。
622:名無しさん@お腹いっぱい。
05/06/07 23:52:46
ショパン最強
623:名無しさん@お腹いっぱい。
05/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:名無しさん@お腹いっぱい。
05/06/10 23:02:05
言語の強化よりも、もっとvim内部をいじれるように
してほしいんだけど。
そういう改良はないの?
625:名無しさん@お腹いっぱい。
05/06/10 23:26:33
>>624
ソースがある。
626:名無しさん@お腹いっぱい。
05/06/12 01:05:50
いい加減そういう反応はやめましょうよ…
627:名無しさん@お腹いっぱい。
05/06/12 01:09:13
改良を望む人自身が改良するのが一番いいだろ。
628:名無しさん@お腹いっぱい。
05/06/12 01:29:23
624の言ってるのは、スクリプトそのものの言語仕様をいくら高めたところで
vim側がスクリプトに委ねてくれるものが今のままでは
どのみち大したことはできないってことなんじゃないの。
スクリプトで出来ることを増やそうと言っているのに
その答えがソース弄れというのは頓珍漢。
629:名無しさん@お腹いっぱい。
05/06/12 01:34:56
これは凄いエスパーだな。
630:名無しさん@お腹いっぱい。
05/06/12 02:09:28
ソース弄らなきゃその「スクリプトで出来ることを増やす」こともできないだろ
問題は誰がどのように弄るかなの
だったらどうしたいかアイデアを持っている人がやるのが手っ取り早い
631:名無しさん@お腹いっぱい。
05/06/12 02:34:21
外部でそういう部分を弄って持ち込んでも某mattn氏の二の舞になるだけだからなあ。
hackするのと、開発の方向性を変えるのとは別次元の問題だよ。
632:名無しさん@お腹いっぱい。
05/06/12 03:00:32
とはいえ、開発の方向性を変えるのにパッチを送る以外に有効な方法ある?
まぁ、コミュニティの方向性を変えたいならパッチを送るだけじゃなくって
そういう方向に向くように開発者を説得するのも必要かもしれないが、
それにしたってまず最初にパッチは必要だよね。
633:名無しさん@お腹いっぱい。
05/06/12 03:32:00
こういう件に関しては、あまりそうは思わないな。
単なるhackならとりあえず自分の役には立つが、
scriptingのようなものは正式に取り込まれて初めて意味を持つ。
方向性も定まらないうちに闇雲に書いてみても労力が無駄になるだけだ。
socialを先にすべき問題だろう。
634:名無しさん@お腹いっぱい。
05/06/12 03:33:33
ま、一つ二つ見本くらいは作ってみせてもいいだろうけどネ
patch出して取り込んで、というものとは少々違うわけですよ。
635:KoRoN@Vim%Chalice ◆8XALICEsdk
05/06/12 10:34:46
一応参考まで。
私の経験で言うとscriptingの拡張としては、User Defined CompletionがVim7で取り
込まれました。パッチはBram氏には相談せずに書き始めました。書き始めた時には無
駄になることも覚悟の上でしたが、ちょうどWin専用で無理矢理Intellisenceを行う
スクリプトが発表された直後だったこともあり、コンセプトは受け入れてもらえると
確信はしていました(まさか関数の定義方法とか殆どそのままだとは思いませんでし
たがorz)。仕様が小さくなかったのでVim6には見送られましたが、Vim7で日の目を見
たというわけです。
逆に言えばVim7開発中である今なら、比較的取り込んでもらいやすいでしょう。もち
ろんパッチの形のほうがBram氏の手間が低くなるので取り込んでもらえる確率は高い
のですが、海外の方はたとえ信義に反しても理に適っていれば納得する傾向があるの
で、コンセプトだけでも背景や考え方つまり説得力があれば、採用される可能性は高
くなるでしょう。
特にMzScheme用のマルチスレッドや、関数ポインタが導入された今ならば、上手くす
れば相当に面白い機能を突っ込める気がしています。
636:名無しさん@お腹いっぱい。
05/06/12 15:17:25
文字コード判定スクリプト。gaucheのguess.cを移植してみた。
URLリンク(tokyo.cool.ne.jp)
こっちはlibiconvの移植。(要vim7)
URLリンク(tokyo.cool.ne.jp)
ありえないほど遅いです。
...とんだ無駄足だったよorz
637:名無しさん@お腹いっぱい。
05/06/12 15:22:53
>>636
いやいや、興味深い。
今日の夜にでも試させてもらうよ。
638:KoRoN@Vim%Chalice ◆8XALICEsdk
05/06/12 15:44:21
>>636
> ありえないほど遅いです。
{}による名前の解決が多いのが原因かもしれないですねぇ。だとすればC++のテンプ
レートみたいに、functionの中でfunctionを定義する、ジェネリックなことができれ
ば解決できるかもしれません。
libcall()使っちゃうのが王道だとは思いますけど。
639:名無しさん@お腹いっぱい。
05/06/13 01:20:26
>>636
試してみた。
500行くらいまでなら、ありえないってほどには遅く感じなかったよ。
10000行のファイルは帰ってこねぇ、、、
640:名無しさん@お腹いっぱい。
05/06/17 23:53:41
synID(line,col,flag)のflagって0でも1でも同じに感じるんですが
どう違うんでしょうか?いまいちわからない…
641:名無しさん@お腹いっぱい。
05/06/19 23:02:44
transparent 属性がついてる構文アイテムの上では違う結果を返すんじゃない。
:set ft=c として ( の上で
:echo synID(line("."),col("."),1)
:echo synID(line("."),col("."),0)
すると違う結果になるよ。
642:名無しさん@お腹いっぱい。
05/06/20 21:13:20
URLリンク(tokyo.cool.ne.jp)
undoのシリアライズとemacsのselective undoもどき(要vim7)
643:名無しさん@お腹いっぱい。
05/08/02 05:10:24
URLリンク(tokyo.cool.ne.jp)
簡易ローマ字入力メソッド(要vim7)
まともな辞書を用意すればなんとか使いものになる...かも?
644:名無しさん@お腹いっぱい。
05/08/02 12:08:37
それよりim_customの強化きぼんぬ
645:名無しさん@お腹いっぱい。
05/08/03 03:48:22
URLリンク(tokyo.cool.ne.jp)
とりあえず、
かんな辞書の取り込み
変換リストのプレビュー
文節区切りの変更
MeCabや茶筌などの形態素解析器との連携
を実装した。
初期変換の制度を上げるのは難しそうだなぁ。
646:名無しさん@お腹いっぱい。
05/09/26 19:30:09
DLLの扱いが
libcall() -> DLLロード -> 関数呼び出し -> DLLアンロード
じゃなくて
libopen() -> DLLロード
libcall() -> 関数呼び出し
libclose() -> DLLアンロード
とか、DLLのインスタンスを保持できるようになってないのがちょっと不思議。
647:KoRoN@Vim%Chalice ◆8XALICEsdk
05/09/26 20:58:17
>>646
インスタンスを保持する変数が無いから。というより変数にはインスタンスを保持でき
なかったから、と考えるのが正確かも。Vim7の変数は多少事情が違うので、うまく議論
できればそのようにすることは不可能じゃない、とは思います。
648:名無しさん@お腹いっぱい。
05/09/26 21:46:15
単純にDLLが状態保持できればと思ったんだけど、でもそうか、
どうせなら複数インスタンスを作れた方がおもしろそうだ。
それならlibopen()がDLLから関数リストをもらって、その関数をセットした
ディクショナリを返すとかがいいな。ついでに引数の制限もゆるめてほしい。
まぁ議論なんてできないわけだが...on
649:KoRoN@Vim%Chalice ◆8XALICEsdk
05/09/27 08:44:17
>>648
> それならlibopen()がDLLから関数リストをもらって、
DLL自体にはタイプライブラリ機能はありませんから。COMやXPCOMとかいうあたりがな
いとダメでしょう。
> ついでに引数の制限もゆるめてほしい。
マーシャリングですねぇ。つい最近vim-devで、if_*で呼び出せるスクリプト言語か
ら、Vim本体の変数を操作するようなジェネリックな方法がどうとか、そういう議論が
ありました。ガンバレばその流れで関連技術を滑り込ませられるかもしれません。
とはいえ、なんかそれって.NETだよなぁ。
650:名無しさん@お腹いっぱい。
05/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:名無しさん@お腹いっぱい。
05/09/27 21:38:28 0
あー、でもどうせvimスクリプトでDLLをラップするだろうから
DLLの扱いはシンプルでいいのかも。
652:KoRoN@Vim%Chalice ◆8XALICEsdk
05/09/27 22:01:32 0
内部表現をいじるなら、先ずはソースコードを直接触っちゃったほうが速いでしょう。
難しいところなんですが、エディタとしての価値を直接高めるのに必要な拡張であれ
ば、思いの他すんなり通るものです。一方、間接的なもの、スクリプトの表現力を上げ
てそれが結果的に、というのはなかなかに難しそうです。
653:名無しさん@お腹いっぱい。
05/09/28 03:33:56
どうもDLLをロードするたびに新しいインスタンスが作られるわけではないようで、
複数インスタンスを作るのは難しそう。
というわけで、DLLのインスタンスを保持するだけの最低限のものを作成。
これでもけっこう遊べるかな。
URLリンク(www.uploda.org)
こんな感じで使う
: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:名無しさん@お腹いっぱい。
05/09/28 04:22:52
そういうのは今でも出来るけど、ちょっとしたサーバ(daemon?)を作るのが面倒くさいな。