Vim6スクリプトお勉強スレat UNIX
Vim6スクリプトお勉強スレ - 暇つぶし2ch159:1
02/02/05 01:38
これこそVimの醍醐味!? シンタックスハイライト設定のお勉強その1
とりあえず独自の設定を作ってみる。

まず :set filetype=memo と設定した時には runtime/syntax/memo.vim というファイル
を vim は開こうとするようなので runtime/syntax/memo.vim を作ってみる。
中には↓これを書いてみる。

highlight MemoHead guifg=#00FFFF
syntax match MemoHead display "^■.*"

水色設定を MemoHead って名前にして正規表現 ^■.* にマッチする部分を
MemoHead の設定色にするという意味。
んで適当なファイルを開いて行頭から ■なんとか と書く。
んで :set filetype=memo を実行。「■なんとか」 の行が水色になったら成功と。

もうちょっと調べたいけど、もう寝ないとやべぇ。

160:名無しさん@お腹いっぱい。
02/02/06 00:23
スクリプト実行してるとき例えば

exe "normal i\<C-D>"

ってなってると i_CTRL-D が実行されるけど、
これってユーザー毎に Mapping を変更していたら違う結果が返ってくるよね?
これを Mapping に依存せずに本来の動作をさせたいんだけど
どうすればよいの?

161:160
02/02/06 00:24
sage が残ってた。
age

162:KoRoN@Vim%Chalice ◆ALICEsdk
02/02/06 00:27
>>160
「!」を使ってこうします。
  :exe "normal! i\<C-D>"

163:名無しさん@お腹いっぱい。
02/02/06 00:41
>>162
おお、ありがとう
テトリス落としてやってたんだけどなんか表示が変だなって思って調べてたら・・・

案外こういうのっていいかげんに思われてるんですかねえ。
まあこういう(どんな環境でも動作させようという)意識の差っていうのは個人差があるんでしょうけど。

164:名無しさん@お腹いっぱい。
02/02/06 00:46
>163
テトリスって?検索したけどわからなかった。
vim でテトリス?

165:160
02/02/06 00:57
URLリンク(vim.sourceforge.net)
の Recent Script Updates にあったんで試してみた

166:名無しさん@お腹いっぱい。
02/02/06 01:15
ありがとう、おもしろい。
こんなこともできるんですね。

167:名無しさん@お腹いっぱい。
02/02/06 01:22
> Source it! To start the game, press <Leader>te.

の <Leader> って何?

168:名無しさん@お腹いっぱい。
02/02/06 01:23
:h <leader>

設定してなければ\らしい

169:160
02/02/06 01:24
オレもよう分からんけどとりあえずノーマルモードで
\te
ってやったらできるぞ

170:167
02/02/06 01:46
>168,169
thanx!

171:名無しさん@お腹いっぱい。
02/02/10 22:36
emacsの~-modeみたいに、新しい言語のモードを作ろうと思った場合、
vimではどうやるんですか?

172:名無しさん@お腹いっぱい。
02/02/10 23:02
>>171
:help ftplugin
:help mysyntaxfile

173:名無しさん@お腹いっぱい。
02/02/12 18:59
Tetrisに続いてSokobanなるゲームが(w まだ試してないけど。

174:1
02/02/12 23:00
>>173
遊んでみました。
j と k のマッピングが逆になってたから直さないとやり辛いよ(w
Tetirsと違ってソースは解り易く書かれててうれしいね

175:名無しさん@お腹いっぱい。
02/02/13 19:17
>>174
マッピングは明らかなミスですよね。まだアップデートされてないみたい
だけど。そんなことよりレベル1で258歩も歩いてしもた…。鬱打。

176:名無しさん@お腹いっぱい。
02/02/17 23:29
age

177:名無しさん@お腹いっぱい。
02/02/18 00:42
カーソル行のフォールドが開いてるか閉じてるかを調べる関数、乃至
変数なんて無いですよね。今後実装されるかは別として。
何で聞くかというと、それで困ってる人がいるんですよ。winmanagerの
作者さんなんだけど。

178:KoRoN@Vim%Chalice ◆ALICEsdk
02/02/18 00:49
>>177
See :help foldclosed() and its families.

179:177
02/02/18 00:50
スレ違いかな? ま、マルチポストは控えときます。

180:177
02/02/18 00:51
>>178
うわ、見ずに投稿しちった。スマソ

181:KoRoN@Vim%Chalice ◆ALICEsdk
02/02/18 01:09
>>177 天気予報みたいだね

182:177
02/02/18 01:19
>>178
改めて、有難うございます。言い訳ですが、作者さんは、foldlevel という
関数はご存知でしたし、ずいぶん長いこと悩んでる様だったので、
てっきり調べ尽くしてるものと思っちゃいました。あと、今yahooのvim-ml
のアーカイブを見たんですが、すでにそこで回答を得られてたようです。
二重に失礼。
# もっとヘルプ読もう。

183:177
02/02/18 01:21
>>181
あ、今気付いた。なんか嬉しい。てか、また見ずに投稿(以下略

184:KoRoN@Vim%Chalice ◆ALICEsdk
02/02/18 01:30
>>183 (>177)
刑法177条は(以下略)。昔、そういうゲームも(以下略)

185:177
02/02/18 18:23
>>184
> 刑法177条は
ガ━(゚Д゚;)━ン!せっかく気に入ってたのに…。
# 開き直ってコテハンにでもするか。

186:名無しさん@お腹いっぱい。
02/02/19 00:11
Linux版のVIMの日本語判定をどうにかするスクリプト作って~♥

187:名無しさん@お腹いっぱい。
02/02/19 00:33
>>186
「どうにかする」は「無効にする」もしくは「決め打ちする」と
解釈してよろしいでしょうか?

188:KoRoN@Vim%Chalice ◆ALICEsdk
02/02/19 08:56
>>185(177)
> # 開き直ってコテハンにでもするか。
漢を感じちゃった。カコ(・∀・)イイ!!

>>186
187の言う通り、どうして欲しいのかを具体的にハッキリさせてくれたら書く可能性
が高いです。というよりも、既に書いてある可能性も高いけど。

189:名無しさん@お腹いっぱい。
02/02/19 22:06
>>186 >>187
正しく判定するようにして~♥

190:KoRoN@Vim%Chalice ◆ALICEsdk
02/02/19 23:10
>>188
私の環境では判定について特に問題はないので、
具体的にどういうときに誤判定するのか教えてくれないと
修正のしようがありません。

またeuc-jpの文がcp932の半角カナ文として認識されてしまうことがあるのは、
それは基本的には仕方のないことでしょう。

191:名無しさん@お腹いっぱい。
02/02/19 23:17
Linux版だと確実にcp932とeuc-jpの判定に失敗する。
fileencodingsで先に書いてる方になっちゃう。

192:名無しさん@お腹いっぱい。
02/02/19 23:47
テキストの最初の方の行に「焼肉定食」と入れておくと吉かも
漏れはそうしてる(藁

193:KoRoN@Vim%Chalice ◆ALICEsdk
02/02/20 02:14
>>191
2つおかしい点が。
  1. encをeuc-jpにしている場合にはfencsにeuc-jpを含めるべきではない。
  2. 「確実に」は疑わしい。

「euc-jpのファイルをcp932として誤読することがある」というならば納得します。

194:名無しさん@お腹いっぱい。
02/02/23 00:46

             ∩
                 | |
                 | |
                 | |
                 | |
        ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ´Д`)/ /  < 先生!忙しいんですか?
      /      /     \________________
     / /|    /
  __| | .|    |
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||



195:KoRoN@Vim%Chalice ◆ALICEsdk
02/02/23 03:09
>>194
25日までは死ねます。

196:名無しさん@お腹いっぱい。
02/03/02 01:50
空揚げ

197:オコジョさん
02/03/02 02:32
ん?カラアゲ?.....どこだ?


198:名無しさん@お腹いっぱい。
02/03/06 02:48
ほとんど(全部に近い) KoRoN さんのおかげですが、現在行の URL を開くスクリプト。
chalice.vim から、OpenURL と DoExternalCommand を借りてくれば動くのでは?
win では動きました。

"
" 現在行に URL 文字列があるとき、それを取得しOpenURLへ渡す
" URL 文字列がない場合素の <CR> を実行
"
function! s:CheckURL()
 let url = matchstr(getline("."), '\(URLリンク([-#%&+,.))')
 if url != ''
  call <SID>OpenURL(url)
 else
  :exe "normal! \<CR>"
 endif
endfunction

"map 定義
nnoremap <silent> <buffer> <CR> :call <SID>CheckURL()<CR>

既にありそうですね。

199:良スレ救済
02/03/11 00:32
age

200:名無しさん@お腹いっぱい。
02/03/16 21:24
1さん & ヘッポコ訳者さん
降臨希望age

201:名無しさん@お腹いっぱい。
02/03/21 17:39
保全age

202:名無しさん@お腹いっぱい。
02/03/22 00:38
指定した単語の個数を数える関数ってないですか?
:g/pattern/let n=n+1
だと同じ行にふたつ以上あってもひとつとしか数えないので。

203:Vim6スレからお引っ越し
02/03/23 01:19
com! Test call <SID>VimTest()

let s:foo = 'foo'

fun! s:VimTest()
python << EOF
from vim import *

foo = eval('s:foo')
print foo

hoge = 'hoge'
buf = '"'+hoge+'"'
command('let s:test='+buf)

command('call s:Show()')

EOF
endfun

fun! s:Show()
    execute 'echo s:test'
endfun

こうすれば、変数を渡せました。
出来たのでまとめとしてここに書いておきます。
KoRoN さんありがとうございました。

204:KoRoN@Vim%Chalice ◆ALICEsdk
02/03/24 13:23
最近、漫画「ヒカルの碁」の影響を受けて碁を始めたので(苦笑)、碁盤スクリプトを
作ってみました。
  URLリンク(www.kaoriya.net)
:sourceして:GobanSplitで碁盤ができます。bで黒、wで白、xで石を消せます。誰か
棋譜を作成できるように拡張してみませんか?。

205:名無しさん@お腹いっぱい。
02/03/31 00:46
age

206:名無しさん@お腹いっぱい。
02/03/31 14:46
>>204
せっかくだから趙治勲を倒せるvim scriptきぼんぬ


207:mattn@Vim%Chalice
02/04/10 09:15
Calendarちとだけ機能追加...

let g:calendar_erafmt = '平成,-1988'
let g:calendar_mruler =
 \'睦月,如月,弥生,卯月,皐月,水無月'.
 \',文月,葉月,長月,神無月,霜月,師走'
let g:calendar_wruler = '日 月 火 水 木 金 土'



    平成14/4(卯月)
 日 月 火 水 木 金 土
     1  2  3  4  5  6
  7  8  9*10 11 12 13
 14 15 16 17 18 19 20
 21 22 23 24 25 26 27
 28 29 30                

こんな風になります。
これがいっぱい設定できれば

>>114
> これに加えて「平成14年」とか「皇紀2662年」
> とかいう表記ができたらまさにパーフェクト(苦笑)

パーフェクトへ一歩近づけますか?(笑)

208:KoRoN@Vim%Chalice ◆ALICEsdk
02/04/10 13:17
>>207
let calendar_erafmt = '皇紀,660'
とかやってみました。最高です!

209:名無しさん@お腹いっぱい。
02/04/10 14:49
('-`).oO○(ヒジュラ暦。。。

210:名無しさん@お腹いっぱい。
02/04/11 05:54
以前ここで紹介されたテトリス、すごい人気になってますね。
URLリンク(vim.sourceforge.net)

211:名無しさん@お腹いっぱい。
02/05/01 08:57
保守上げ

212:KoRoN@Vim%Chalice ◆ALICEsdk
02/05/06 10:01
ネタ出し。普通の人が考えるいわゆるアウトライン機能。
- outlineMode.vim
    URL: URLリンク(vim.sourceforge.net)
    必要軟件: ctags
    必要設定: let Flist_Ctags_Cmd = 'ctags' " $PATHが通ってない時はフルパスで指定
    使用方法: Cのソースを開いて<F2>で起動。起動キーはFlist_Keyで設定可能
- funclist.vim
    URL: URLリンク(vim.sourceforge.net)
    解説: 上記outlineMode.vimのベースになったスクリプトらしい。

213:名無しさん@お腹いっぱい。
02/05/06 11:33
>>212 outlineMode.vim(・∀・)イイ!
関数の中にカーソルを置いてると勝手にその関数がハイライトされる…。はじめ
てCursorHoldなんてイベントを知りましたよ。

214:名無しさん@お腹いっぱい。
02/05/08 06:55
KoRoNさんのAutodate.vimがアップされてる。
autodate.vim : Custumizable auto update time stamp tool
URLリンク(vim.sourceforge.net)

215:名無しさん@お腹いっぱい。
02/05/08 11:18
>>214 こっちより高機能だということは明瞭なんだけどね…。
URLリンク(vim.sourceforge.net)

え、英語を添削させてくれーっ!!

216:名無しさん@お腹いっぱい。
02/05/08 11:21
>>215
> え、英語を添削させてくれーっ!!
KoRoN氏、確かどっかで英語のドキュメンタリスト募集してたから
more than welcomeと思われ

217:名無しさん@お腹いっぱい。
02/05/08 12:49
This plugin inserts and updates a time stamp automatically.

Users can specify a format and position of the time stamp by options.
By default, autodate.vim searches a keyword "Last Change: ."
in the first 50 lines of the buffer, and inserts a time stamp. Example:
Last Change: 07-May-2002.

添削に挑戦してみる。(>>215 さんじゃないけど)

誰か英語力のある人が、とくにマルチバイト関連のやり取りで、バリバリドキュメントを
書いてくれるとうれしいかも。

218:名無しさん@お腹いっぱい。
02/05/08 12:52
追加。
autodate.vim の副題
>Custumizable auto update time stamp tool.
Customizable

219:名無しさん@お腹いっぱい。
02/05/08 13:32
>>216
ここかな?
スレリンク(unix板:165番)

220:215
02/05/08 14:00
>>217-218 ここでやるのはどうかと。

221:名無しさん@お腹いっぱい。
02/05/08 16:16
>>220
おっしゃるとおりでした。

222:KoRoN@Vim%Chalice ◆ALICEsdk
02/05/08 20:02
>>214-221
ありがとうございます。まずは>>217に差し替え、加筆します。続きを行なう場合は
こちらの掲示板を使ってください。
    URLリンク(www.kaoriya.net)

223:名無しさん@お腹いっぱい。
02/05/15 15:45
taglist.vimあげ。>>212 のfunclist.vimに置き換わるものです。ちなみに
outlineMode.vimは引退されたようです。
URLリンク(vim.sourceforge.net)

224:名無しさん@お腹いっぱい。
02/05/15 16:30
すばらしい。

225:名無しさん@お腹いっぱい。
02/05/17 11:03
>>223
これはこれで便利だとは思うけど、ある程度大きいプログラムを扱う時は
そのファイルだけじゃなくて全てのファイルのタグが入ってないとあまり
意味がないような気も…

参照したい関数が編集中のファイル内にあることの方が珍しいので。

226: 
02/05/17 13:15
>>225 winmanagerに付属のタグ・エクスプローラってのはどう?

227:名無しさん@お腹いっぱい。
02/05/19 04:35
Vim-Improved eMACS: Emacs emulation for Vim
URLリンク(vim.sourceforge.net)
ワラタ

228:名無しさん@お腹いっぱい。
02/05/19 05:20
Vimacs utility -1 1 Vim-Improved eMACS: Emacs emulation for Vim
emacs.vim color scheme -9 553 Emacs like colors

229:KoRoN@Vim%Chalice ◆ALICEsdk
02/05/19 11:02
>>227 いきなりマイナスに点数がつくんですよね(^-^;;;

230:名無しさん@お腹いっぱい。
02/05/19 13:23
>>227
メーリングリストまであるがな

231:名無しさん@お腹いっぱい。
02/05/24 16:17
vimacs では <M-x> は使えないんですか?

232:名無しさん@お腹いっぱい。
02/05/26 17:11
>>231
しらんけど、elisp動いてるわけでもないのに<M-x>使う意味あるのかなあ?
なんなら<M-x>を:にmapするとか

233:名無しさん@お腹いっぱい。
02/05/27 10:31
>>232
nmap <M-x> :
としてますが、動きません。

234:名無しさん@お腹いっぱい。
02/05/27 10:38
>>233
nmap <Esc>x :

235:名無しさん@お腹いっぱい。
02/05/27 11:13
素早いレス thanx です。
emacs のように meta(alt) キーを使っての1ストローク
は使えないということでしょうか?

236:KoRoN@Vim%Chalice ◆ALICEsdk
02/05/27 11:53
>>235
完全に把握しているわけではないですが、端末の種類や設定などによって違ってきま
す。経験則ではterm経由だと<M->はEscなんとかにと記述してやる必要があります。

237:mattn@Vim%Chalice
02/05/27 12:09
>>235
ソースをみましたが、
おそらく、<m-x> がマルチバイト文字のリードバイトと判断されて
いるため、トレイルバイトの入力を要求されているかと思います。
2回入力してませんか?

238:mattn@Vim%Chalice
02/05/27 12:26
追記・・・
もし開発環境をお持ちならば以下のパッチを試してもらえますか?

*** getchar.c~ Mon May 27 12:23:48 2002
--- getchar.c Mon May 27 12:23:38 2002
***************
*** 1843,1849 ****
    * multi-byte char.  Happens when mapping
    * <M-a> and then changing 'encoding'. */
   if (has_mbyte && MB_BYTE2LEN(c1)
!      > (*mb_ptr2len_check)(mp->m_keys))
       mlen = 0;
  #endif
   /*
--- 1843,1849 ----
    * multi-byte char.  Happens when mapping
    * <M-a> and then changing 'encoding'. */
   if (has_mbyte && MB_BYTE2LEN(c1)
!      > (*mb_ptr2len_check)(mp->m_keys) && mp->m_keylen > 1)
       mlen = 0;
  #endif
   /*

239:名無しさん@お腹いっぱい。
02/05/27 12:42
>>238
当方、cygwin ですが、vimacs で m-x が使えました V(^_^)V パチパチ

240:名無しさん@お腹いっぱい。
02/05/27 14:05
>>238
開発環境がないのでリリースされるのを待ちます。m(_ _)m

241:名無しさん@お腹いっぱい。
02/05/28 00:18
>>240
されるのか!?

242:mattn@Vim%Chalice
02/05/28 09:52
>>240,>>241
vim-dev には送ったんですが、bram 氏は今週カンファレンスらしくて
来週以降にみると返事が来てます。
よって来週になって、「ダメ」と言われるかもしれません。(^_^;)
リリースされるのはパッチですので、win32 ならば KoRoN 氏の NetupVim で
更新、それ以外のプラットフォームならば開発環境を用意して頂くことに
なります。

243:KoRoN@Vim%Chalice ◆ALICEsdk
02/05/29 12:52
>>242
> リリースされるのはパッチですので、win32 ならば KoRoN 氏の NetupVim で
暫定的にまっつんさんのパッチを取込ませてもらいました。

244:KoRoN@Vim%Chalice ◆ALICEsdk
02/06/04 17:48
う~ん…まっつんさんのパッチあてたんだけど、たとえば
:nmap <M-X> :
がうまく出来ませんね。環境は香り屋版W2Kです。
:help map-multibyte
にあるようにencをlatin1に設定してmapしてみたりもしたんですけど。
う~ん…なんでだろ?

245:mattn@Vim%Chalice
02/06/04 18:59
>>244
Alt + Shift + x もしくは
:nmap <M-x> :
で動きませんか?

246:KoRoN@Vim%Chalice ◆ALICEsdk
02/06/04 19:53
>>244 あ、動きました。失礼しました。

247:名無しさん@お腹いっぱい。
02/06/05 19:52
>>226
超亀レスですみませんが、ありがとうございました。

しかし、これ、ちょっと遅すぎるような。。。(褪

248:名無しさん@お腹いっぱい。
02/06/07 14:09
現在分割しているウインドウの数を返す命令って何になりますか?

249:名無しさん@お腹いっぱい。
02/06/07 14:47
bufwinnr('$')

250:226
02/06/07 14:50
>>247 そうですねぇ。かなり欠点は多いかもしれませんが。逆に改善の余地は大
いにあるかもね。パッチ送ると喜ばれますよ。

>>248 一番ボトムのウィンドウに行って :echo winnr() ぐらいかなぁ。。
>>249 それは違うと思います。

251:名無しさん@お腹いっぱい。
02/06/08 15:13
>249
>250
bufwinnr('$')では駄目でしたが、一番下のウィンドウでwinnr()は巧くいきました。
ただし、一番下に行く方法ってありますか?
安直かもしれないけど、ループさせて一番大きかった値が分割ウィンドウの数って
判定も出来るかもしれないけど…。

252:名無しさん@お腹いっぱい。
02/06/08 19:49
>>251
Ex command であれば、:wincmd b です。(元に戻るには :wincmd p)
詳しくは :h windows を読みませう。

253:名無しさん@お腹いっぱい。
02/06/09 01:23
>252
ありがとうございます。 確認できました!

254:名無しさん@お腹いっぱい。
02/06/21 19:36
保守。

255:名無しさん@お腹いっぱい。
02/06/22 23:21
自由。

256:KoRoN@Vim%Chalice ◆ALICEsdk
02/07/08 00:02
高度なテクニックの紹介: コールバックの実装

2つのファイルを作りこのようなコマンドを実行する
:so manager.vim
:so callback.vim
:call DoCallback()

----ファイル: manager.vim
" コールバック関数登録用変数と関数
let s:procs = ''
function! RegistFunc(proc)
  let s:procs = s:procs . a:proc . ';'
endfunction
" ダミーコールバック
function! s:Dummy1()
  echo "Dummy1"
endfunction
" ダミーコールバックを登録
call RegistFunc('s:Dummy1')
" コールバックを実行する関数
function! DoCallback()
  let mx = '^\([^;]\+\);\(.*\)$'
  let procs = s:procs
  while procs != ''
    let proc = substitute(procs, mx, '\1', '')
    let procs = substitute(procs, mx, '\2', '')
    if proc != '' && exists('*'.proc)
      call {proc}()
    endif
  endwhile
endfunction

----ファイル: callback.vim
" スクリプトIDを取得
map <SID>xx <SID>xx
let s:_id = substitute(maparg('<SID>xx'), 'xx$', '', '')
unmap <SID>xx
" コールバック関数
function! s:Proc()
  echo 'callback.vim:Proc()'
endfunction
" コールバック関数を登録
call RegistFunc(s:_id.'Proc')

257:KoRoN@Vim%Chalice ◆ALICEsdk
02/07/29 12:11
VimでAAアニメを作るためのライブラリとサンプルアニメーションを作ってみました。

    ライブラリ: URLリンク(www.kaoriya.net)
    サンプル1: URLリンク(www.kaoriya.net)
    サンプル2: URLリンク(www.kaoriya.net)

ライブラリとサンプルファイルを同じディレクトリにダウンロードして、Vim上で
    :source gikozuza.vim
    :source moukoneyo.vim
とタイプしてください。なおアニメーションの実行には+clientserverが正しく動作
する環境が必要です。Windows版のgvim,vimおよびLinux + GTKのgvimでは動作確認し
ました。

なにか面白い作品ができたら是非公開してください。スプライト風に実装しているの
でゲームなども作れるかもしれません。

258:名無しさん@お腹いっぱい。
02/08/14 01:55
winのみですが、vimからCMAIL WRITERでメール送信。ウマー


259:KANO_Dai@Vim%Chalice ◆EONKKhcc
02/08/16 11:43
標準プラグイン netrw.vim を使って
    :e fURLリンク(ftp.hoge)
とやるとエラーになってしまいました。
    :Nread fURLリンク(ftp.hoge) 
だとうまくいくのに。
'verbose' を設定してメッセージを出させ、それに従って netrw.vim を見てみると、
FTPを扱っているところで
    exec "norm! mzoopen " ファイル...
となっています。
"mz" は後の操作のためにマークをつけているんだろうけど、
まず "o" が分かりません。新しい行を開いている?
そして "open" って何でしょう? :open なら obsolete なコマンドだとヘルプにありました。
どなたかお助け。

ちなみに、netrw.vim ではHTTPを持ってくるときにwget.exeを使う仕組みになっていますが、
Chaliceのために手に入れたcurl.exeを使うように手を加えてあります。
それがいけないのかな?しかしFTPにはftp.exeを使うので影響ないはず。

260:あぼーん
あぼーん
あぼーん

261:名無しさん@お腹いっぱい。
02/08/16 18:23
>>259
> "open" って何でしょう?

直接解決にはならないですけど、こういうことをやってるみたいです。

open servername port
username passwd
mode
get remote-filename local-filename

↑のようなコマンド行を生成し、その部分をftpに渡して実行、と。

なぜエラーになるかはちょっとわかんないっす。

262:KANO_Dai@Vim%Chalice ◆EONKKhcc
02/08/17 11:43
ああ、"open" はFTPのコマンドでしたか。少し分かってきたような気がします。
完全に修正できたら報告します。
少し分かったのは、netrw.vimの

" which the following blots out.  Does Win-NT/98/2000 do the same???
exe "'y-3,'yd"

というところでexeをコメントアウトするとよいことにはすでに気づきました。
何でもWin95のFTPには空行を勝手にくっつける癖があるそうで、
それを消そうとしているのですが、私のWin98のFTPではそんな癖がないのでいらないんです。
でもVimスクリプトではWin95とWin98の区別ができませんから、おかしくなっていました。

263:KANO_Dai@Vim%Chalice ◆EONKKhcc
02/08/22 10:07
訂正っす。
.vimrc で let netrw_win95ftp = 0 とすると、
上記のコメントアウトは必要ありませんでした。
なんでこういう変数を Options: で説明しないで、
ずっと下の方の Variables: なんて項目に載せておくんだ?

netrw で FTP が使えないのは、BufReadCmd 内で >>261 さんのおっしゃるような
コマンド文字列の生成ができていないためだ、という気がしてきました。
exe "'z+1,.!ftp -i -n" とすることで、
コマンド文字列を ftp.exe をフィルタ扱いにすることで送っているらしいですが、その前に
exe "'z+1,.w c:/windows/temp/cmdtmp"
exe "'z+1,.d"
を付け加えても、空行2行しか保存されません。この辺りが鍵?
こうした後に :r fURLリンク(hoge) としたときはちゃんとftp.exeに対するコマンドが
ファイルに保存されるんですよ。こちらでは FileReadCmd を使っているので動作するのかな。

264:名無しさん@お腹いっぱい。
02/08/28 18:25
保守さげ

265:KANO_Dai@Vim%Chalice ◆EONKKhcc
02/09/17 05:11
相変わらずわからんちんです。
学校始まって忙しいのであまりハックできない...鬱
Chaliceスレではw3m.vimネタがまた出たみたい。

266:名無しさん@お腹いっぱい。
02/10/19 04:10
vimスクリプトなんて書いたことないけど、し、質問があります。
ぼ、僕は正規表現厨房なので、

:% s/hoge11/moge
:% s/hoge2232/moge
:% s/hoge_3_3/moge
   ・
   ・
   ・
と連続して実行するのに、
上の文字列をどっかに記憶させて、それを読み込んで実行するって出来ますか?


267:KoRoN@Vim%Chalice ◆8XALICEsdk
02/10/19 10:39
>>266
先頭のコロンを削除して

%s/hoge11/moge
%s/hoge2232/moge
%s/hoge_3_3/moge
   ・
   ・
   ・

というテキストを作成しtest.vimとして保存します。
あとは :source test.vim とすれば実行できます。
詳細は :help :source を参照してください。

268:・・・うまく行くかな?
02/10/20 22:20
>>266
:%s/hoge11/moge^M^[:%s/hoge11/moge^M^[:%s/hoge_3_3/moge^M^[
と書いて、その行の上で、
例えば、
"aY
と入力する。

その後、実行したい時には、
@a
とする。


269:名無しさん@お腹いっぱい。
02/10/20 22:28
独り言ですが、
URLリンク(hywr.kuciv.kyoto-u.ac.jp)
の説明にあるtable.el重宝しそうなんだけど、今ダウンロードできないです。

こういったスクリプト向けにvimスクリプトは向いていますか?
かなり欲しい機能なので、この際、table.vim書きながら
vimスクリプト勉強してみよっかなー。

270:名無しさん@お腹いっぱい。
02/10/20 22:48
ぜんぜん関係無いけど、>>269みたいに今現在アクセスできない所も、
Googleの検索窓にURLを入れて検索すると、キャッシュでは見ることが出来ます。
(キャッシュがあればね)

>>269のは、本人の説明はないが、
+---+----+-----+
| a | g  | hig |
+---+----+-----+
| a | ss |  s |
| b | s  |  i |
+---+----+-----+
こういうのを作るスクリプトのようです。


271:KoRoN@Vim%Chalice ◆8XALICEsdk
02/10/20 23:24
>>269
> こういったスクリプト向けにvimスクリプトは向いていますか?
向いているか向いてないか、という問なら間違いなく向いていません。配列やデータ
構造とかそういう高級な機能は一切ありませんから、ちょっと複雑なことをしようと
すれば作成側の知恵が試されることになります。そこが面白いところではあります。

望みの処理を行なってくれる既成の外部ツールがあるのなら、フィルタとしてそちら
を使うようにしたほうが利口なのは確実です。でもテーブル用スクリプトは既にどこ
かにあったような気もします。

272:269
02/10/21 00:55
>>271
>でもテーブル用スクリプトは既にどこかにあったような気もします。
これのことでしょうか?
URLリンク(table.sourceforge.net)



273:269
02/10/21 00:58
さっき見つけた。
URLリンク(www.psyc.nott.ac.uk)
は古いけど高機能。表計算も出来るとか。


274:269
02/10/21 00:59
ここはvimだった……
すみません。すれ違いでした。

275:名無しさん@お腹いっぱい。
02/11/13 21:13
age

276:名無しさん@お腹いっぱい。
02/11/19 06:54
Vim scriptって便利そうですね。
今までキーレコーディングで満足してたから…。

277:名無しさん@お腹いっぱい。
02/11/24 23:24
debug.vim : Simple utility to assist in debugging vim scripts
URLリンク(vim.sourceforge.net)

debug.vim 1.0.0
22-Nov-2002
6.0
kam onn siew
Initial upload

278:名無しさん@お腹いっぱい。
02/11/27 17:25
>277 便利なの?

279:名無しさん@お腹いっぱい。
02/12/02 23:20
vim初心者ですが、vim上でメール見れますか?

280:名無しさん@お腹いっぱい。
02/12/02 23:51
>>279
スクリプトは色々あるみたい。
入れてみて報告きぼんぬ
URLリンク(vim.sourceforge.net)

281:名無しさん@お腹いっぱい。
02/12/03 22:24
Windowsで香り屋gVimを使わせて頂いております。

起動するたびにcolorsディレクトリ以下にあるcolor schemeを
ランダムに呼ぶVimスクリプトを作ろうかと考えています。

質問1)そんなスクリプト、すでにありますか?あるなら、どこにあるか教えて下さい。
質問2)俺には、そんなスクリプトを作るのは無理ですか?
質問3)もしかしてVimスクリプトに乱数って無いんですか?

当方、シロウトに縮れ毛が生えた程度の似非プログラマです。

282:名無しさん@お腹いっぱい。
02/12/03 22:31
秒数の1桁目を取得して擬似的に乱数をつくればいいんじゃなかろか。

283:KoRoN@Vim%Chalice ◆8XALICEsdk
02/12/03 22:37
>>281
> 質問1)そんなスクリプト、すでにありますか?あるなら、どこにあるか教えて下さい。
vim.sf.netを見る限りなさそうです。

> 質問2)俺には、そんなスクリプトを作るのは無理ですか?
それは自分で決めてください。できないと思ってしまえばどんな些細なことであって
も絶対にできません。逆にできると思えば大概のことはできるものです。あとはやる
かやらないか。

> 質問3)もしかしてVimスクリプトに乱数って無いんですか?
無いです。線形合同法等を使って擬似乱数生成関数を書くなり、もしくは外部ライブ
ラリを利用する必要があります。線形合同法についてはこちらを参照:
    URLリンク(www.ysr.net.it-chiba.ac.jp)

284:名無しさん@お腹いっぱい。
02/12/03 22:44
ヒントはtetris.vimにあり

285:1
02/12/03 22:48
【中学生?】YAHOO祭り♪【高校生?】
ヤフーの音声チャットでお祭り騒ぎ!
こ、これマジっすか?と耳を疑うような
乱交ぶり!ただいま順番待ち殺到!
あと、3時間待ちか?w
↓↓↓↓↓↓実況スレ↓↓↓↓↓↓↓
スレリンク(bobby板)

286:名無しさん@お腹いっぱい。
02/12/03 22:50
たまにageると早速↑こういう目にあう。トホホ

287:KoRoN@Vim%Chalice ◆8XALICEsdk
02/12/03 23:01
(´・ω・`)…ゴメンなさい。

288:名無しさん@お腹いっぱい。
02/12/03 23:22
>>287
悪いのは>>285ですよぉ、いやだなあ

289:281
02/12/03 23:39
>>283
ありがと。

いきなり壁に突き当たってしまった。
let color = "evening"
colorscheme color
→カラースキームcolorが見つかりません

let color = "evening"
echo ":colorscheme " color
→:colorscheme evening(と下に表示されるだけ)

なんかヒント欲しいです・・・

290:名無しさん@お腹いっぱい。
02/12/03 23:57
>>289
:help :execute なんてどうでしょ。

291:KoRoN@Vim%Chalice ◆8XALICEsdk
02/12/03 23:58
>>289
let color = "evening"
execute "colorscheme ".color

:help :execute

292:名無しさん@お腹いっぱい。
02/12/04 00:51
URLリンク(vim.sourceforge.net)

293:281
02/12/04 21:26
>>290-291
ご教授ありがとうございます。
またVimスクリプトを書こうかなって思ったら、
またこのスレに来ますんでよろしくお願いします。

>>292
あらら、あったのね。どうもです。
早速使わせて頂きました。希望通りの動きでとっても幸せです。

294:名無しさん@お腹いっぱい。
02/12/04 21:33
>>293
おいしいスクリプトが出来たらvim.orgにうpしてね♪

295:名無しさん@お腹いっぱい。
02/12/08 21:22
現在のバッファの情報を外部アプリケーションに渡すには、一時ファイルを作ってそれを渡す
というのが、Vim スクリプトの作法なのでしょうか?
cvscommand.vimスクリプトってのを見てたら、そう思いました。

296:KoRoN@Vim%Chalice ◆8XALICEsdk
02/12/08 21:26
>>295
パイプで繋いでどうこうということは残念ながらできないので、
そういう情報が必要ならば一時ファイルを作ることになります。
引数だけで済む場面では勿論引数で済ませます。

297:KoRoN@Vim%Chalice ◆8XALICEsdk
02/12/08 21:34
>>296
あ、フィルタ使う方法はありますね。前書き込みのパイプ云々は外部コマンドと
動的にインタラクションするということを頭の片隅に置いた上での発言と読んでください。
まぁ、最終的にどれを使うかは個人の裁量です。作法とかそういったものは気にせず、
その時一番efficientだと思えた方法を使うのが吉でしょう。

298:295
02/12/08 21:35
いろいろ調べてみましたが、そのようですね。
とりあえず、現行の編集ファイル (バッファではない) に対して、
やりたいことができるようになってから考えます。

299:名無しさん@お腹いっぱい。
02/12/13 23:56
Printer Dialog : vim onlineより。
URLリンク(vim.sourceforge.net)

このスクリプトのソースコード、むちゃ見やすい。綺麗。
vimスクリプトのコーディング規則とか考えちまった。

300:300
02/12/16 13:04

300

301:名無しさん@お腹いっぱい。
02/12/19 01:46
>>225
URLリンク(vim.sourceforge.net)
これいいですよ。

302:名無しさん@お腹いっぱい。
02/12/19 02:04
>>301
225じゃないけど、土日に試して見る。

303:名無しさん@お腹いっぱい。
02/12/19 17:41
すれ違いですが
vim.sourceforge.netにあるスクリプトを全部おとすのはどうすればいいですか?
wget 'URLリンク(vim.sourceforge.net)'
とやるとscript_download.php?src_id=1423って名前になります。

304:名無しさん@お腹いっぱい。
02/12/21 03:01
sokoban.vimはxsokobanと同じだった。

305:sage
02/12/24 00:59
vimスクリプトに配列ってありますか?

306:KoRoN@Vim%Chalice ◆8XALICEsdk
02/12/24 01:19
>>305
配列そのものは無いです。が、ダミーバッファに対してsetline()/getline()を使っ
たり、{}記法を使うことで代用品を仕立てることはできます。後者は次のような感じ
で使います。
    :let index = 2
    :let array_{index} = "some string";
    :let index = 3
    :let array_{index} = "another string";
    :echo array_2
    some string
    :echo array_{index}
    another string
あと、これはVimに閉じないのですがif_perlやif_rubyを使う方法も考えられます。

307:名無しさん@お腹いっぱい。
02/12/26 00:21
emacsでいうところの vc-mode のようなことをvimスクリプトで実現した
例はあるのでしょうか。


308:KoRoN@Vim%Chalice ◆8XALICEsdk
02/12/26 00:36
>>307
> emacsでいうところの vc-mode のようなことをvimスクリプトで実現した
> 例はあるのでしょうか。
emacs使わないのでvc-modeがどんなモノか知らないのですが、
例えばこんなのでしょうか?
    URLリンク(www.vim.org)

309:307
02/12/26 11:31
>>308
searchの使い方が分かりました :)
どちらかというと欲しいのはRCSに対するものです。emacsのものだと、

- RCSのファイルが転がっていると自動的にRCSモードの表示に
- C-x C-q で write-protectedを解除 → co -l foo
- 修正後 c-x c-q で write-protectedに → commitメッセージを聞いてきて
  C-c C-c で ci -u -m"メッセージ" foo

てなことをやってくれるようなんです。
vimで
- ファイルオープン時に実行されるフック
- set readonly状態の時に何かバッファを修正したら実行されるフック
- set readonly状態を変更したら実行されるフック

があればなんとかできそうかなと思います。


310:羊
02/12/30 00:17
HTML で困るものをエスケープするスクリプトを書いたんですが、
範囲選択の後に :'<,'>call HtmlEscape と入力しなければならないです。
そうじゃなくて、:'<,'>HtmlEscape にするにはどうすればいいの?
# command あたりがあやしかったがわからなかった...

if exists("loaded_html_escape")
finish
endif
let loaded_html_escape = 1
function HtmlEscape() range
let index = a:firstline
while index <= a:lastline
let line = getline(index)
let line = substitute(line, "&", "\\&", "g")
let line = substitute(line, "<", "\\<", "g")
let line = substitute(line, ">", "\\>", "g")
call setline(index, line)
let index = index + 1
endwhile
endfunction

311:KoRoN@Vim%Chalice ◆8XALICEsdk
02/12/30 00:44
>>310
:command! -range HtmlEscape <line1>,<line2>call HtmlEscape()
多分こんな感じです。
:help E177

312:羊
02/12/30 01:55
E177 のヘルプ見たのにー!
そうか。 <line1>と<line2>はそうやって使えばいいのか。

これで年が越せます。ありがとう!>KoRoN 氏

313:301
03/01/01 16:59
>>301>>226氏の言うwimmanagerに付属のやつでしたか。すみませぬ。

314:226
03/01/03 16:06
別もんですよん

315:名無しさん@お腹いっぱい。
03/01/05 15:23
なかなか便利だ。

A vim plugin for browsing tarfiles
URLリンク(vim.sourceforge.net)

316:名無しさん@お腹いっぱい。
03/01/06 07:57
>>315
そういえばデフォルトでgzip.vimってのがはいってるね。

317:名無しさん@お腹いっぱい。
03/01/07 02:02
vim素人の私は最近、zcatってコマンドライン覚えたよ。
こういうのがエディタ上から、呼び出せるのはvimのいいところね。

318:名無しさん@お腹いっぱい。
03/01/07 22:39
URLリンク(vim.sourceforge.net)
calendar.vim 1.3o 06-Jan-2003

otu-

319:山崎渉
03/01/15 13:02
(^^)

320:名無しさん@お腹いっぱい。
03/01/17 14:19
alias Info="vim -c 'source hoge/info.vim|Info'"
便利です

321:名無しさん@お腹いっぱい。
03/01/26 07:03
激しく禿同

322:名無しさん@お腹いっぱい。
03/01/26 13:23
最近スクリプトを覚えようと思って、この板にやってきました。
mattnさんの >>128 を試しているんですが、
      silent argdo! rewind
のラインを
      silent argdo! rewind!
にしないとE37が出たり gvim ~/vimrc が開けず、でもrewind!にすると
after/ftplugin/ 以下が読みこまれないという症状に悩まされています。
上記スクリプトを.vimrcのどの位置で定義するのかにも関係するんですかね?

:h rewind しても良くわからなかったのでカキコしてみました。

323:322
03/01/27 01:57
自己レス。
cyg-wrapper.shでウマー 
    URLリンク(hermitte.free.fr)
でした。

324:名無しさん@お腹いっぱい。
03/01/29 06:57
KaoriYa タンのは FreeBSD PORTS には入らんの?

325:324
03/01/29 06:59
微妙に誤爆。スマソ

326:名無しさん@お腹いっぱい。
03/02/10 00:32
file(*.vim)はどこに置くの?


327:名無しさん@お腹いっぱい。
03/02/10 00:38
>>326
OSによって違う。UNIXっぽいシステムだったら、
~/.vim/plugin/
あたり。システムグローバルは :echo $VIMRUNTIME あたりに。

328:名無しさん@お腹いっぱい。
03/02/10 00:42
linuxだけど、好きなところには置けないですか?


329:名無しさん@お腹いっぱい。
03/02/10 00:47
>>328
.vimrcでその「好きな所」を
set runtimepath+=好きな所
すれば好きな所に置けるけど、~/.vim/plugin で問題ある?

330:329
03/02/10 00:48
嘘。runtimepath+=hoge だったら、hoge/plugin/ だな。

331:名無しさん@Vim%Chalice
03/02/10 04:12
正規表現で制御文字そのものを表すatomって無いんでしょうか?
<Esc>, <Tab>, <CR>, <BS>は既に存在する(\e, \t, \r, \b)んですが、
^Jなどは表現できないですよねぇ…?

例えば、レジスタaに入ってる文字列から<Ctrl-J>を削除しようとした時に
   substitute(@a, '^@', '', 'g')
のように、関数内で<Ctrl-V><Ctrl-J>して直接char codeを入れちゃうと
実行時にエラーになってしまうので…
# ^@の部分が<Ctrl-V><Ctrl-J>です。
# ^@は改行を意味するのでsubstitute()の呼び出しが無効になります。
<Ctrl-V><Ctrl-J>の代わりに\rや[:cntrl:]で置換しようとしてもできませんでした。

文字を直接ascii codeで指定できたりすると良いんですけどね…
\0x0a (← ctrl-J)みたいな感じで (\0x61なら'a'になるみたいな)

332:KoRoN@Vim%Chalice ◆8XALICEsdk
03/02/10 04:44
>>331
Chalice内のplugin/alice.vimにあるAL_firstline()とかが参考になるかもしれませ
ん。レジスタ内の改行記号^Jには"\<NL>"が対応します。このあたりはVimが文字列を
どのように扱っているかを知っていれば至極当然なのですが、知らないとかなりメン
ドイので以下のように慣用句として覚えてしまうのが良いでしょう。
   substitute(@a, "\<NL>", '', 'g')

333:名無しさん@Vim%Chalice
03/02/11 03:03
331です。

>>332
KoRoNさん、解説どうもありがとうございました。

とりあえず納得はしたのですが、"至極当然"とか言われちゃうと
どうしても文字列をどのように扱ってるかが気になってしもたので、
vimのsource codeを見てみましたが、漏れには解析追いつかずでした… (´Д⊂グスン

しかし!
trans_special()が定義されているmisc2.c内で偶然<Char->の存在を知り、
   :help <Char->
を見ると、なんと!ロトのつるぎを見つけた! …じゃなくて、
漏れが >>331
> > 文字を直接ascii codeで指定できたりすると良いんですけどね…
> > \0x0a (← ctrl-J)みたいな感じで (\0x61なら'a'になるみたいな)
と言っていた機能が既に有るではないですかぁ!

てことで、
   substitute(@a, "\<Char-0x0a>", '', 'g')
と書いても
>   substitute(@a, "\<NL>", '', 'g')
これと同じ動作になることが確認できますた。 ヽ(´▽`)ノ

<Char->は元々multi-byteを扱うのに便利な機能として用意されていたらしいですが、
これなら\e, \t, \r, \b以外の制御文字も(知ってればですが)扱えますね。
あまり綺麗じゃありませんし、素人にはお勧めできない諸刃の剣かもしれませんが…
# もしかして反則技ですか?

あ! ASCIIじゃなくてEBCDICの時に使えないですね…
# 早くもダメケースをハケーンしてしまった…  ΣΣ(゚д゚lll)ガーン!!

334:331@Vim%Chalice
03/02/11 03:05
もっかい331です。

>>332
ついでに…
余談ですがregexp.cのbackslash_trans()で
\r, \t, \e, \b の振る舞いが書かれてますね。
あくまで仮の話になりますが、
   static char_u REGEXP_ABBR[] = "nrtebj";
というように、jを加えて
   case 'j':   return NL;
のようなcaseを1個追加するだけで、正規表現として
   \j が <NL> にマッチする
といった動作になったりするんですかね…?
# 考えが浅はかかな?…


んー。なんかスレ違いになってきちゃったかな? ^^;
これぢゃVim6ソースコードお勉強スレですな(w

335:名無しさん@お腹いっぱい。
03/02/20 19:42
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
vimrc_exampleのこの部分ですが、2行目と3行目の最後の|はなんですか?
それと g`\"のgはなんのためにあるのですか?

336:名無しさん@お腹いっぱい。
03/02/20 19:47
| はコマンドの連結
g を前置するのはジャンプリストを変更しないようにジャンプする

337:335
03/02/20 20:26
>>336
autocmdだから1行にする必要があるのですね。
gの方は:h g'にありましたね。ありがとうございます。

338:名無しさん@お腹いっぱい。
03/02/22 10:53
URLリンク(vim.sourceforge.net)
gnu-c : A filetype plugin to encourage the GNU C style.

これっていままでup されていなかったけど、多くのひとが自分用に作っていそう。

339:名無しさん@お腹いっぱい。
03/02/27 11:13
>>337
1行にするのは行頭の '\' の働き.
'|' は,本来autocmdで実行するのは単一のコマンドだから,
複数のコマンドを実行するために連結が必要になっているということ.

340:名無しさん@お腹いっぱい。
03/03/01 02:34
質問があります。
vimのevalはかなり高機能なので、スクリプトインタプリタとして
使用してみようと思い、いろいろ試行錯誤してみたのですが、
そもそも、echoが標準出力に出力できないです。
どうすればできるのでしょうか?

341:KoRoN@Vim%Chalice ◆8XALICEsdk
03/03/01 02:46
多分標準出力には出せないと思われます。
一時ファイルを使うのが良いでしょう。

342:名無しさん@お腹いっぱい。
03/03/01 03:06
>>341
了解しました。
perlやpythonが使えるので、逆にevalが独立して
スクリプトインタプリタとして使えると楽しめそうなんですが。
あと、ソケットをたたくAPIが追加されるとChaliceが完全に
evalだけでできそうだし、いろいろできそうなんで、ぜひ
追加してほしいもんです。

343:名無しさん@お腹いっぱい。
03/03/01 11:48
既に備わってるlibcall()で(間に自作DLLをはさめば)ソケットが使える...かもね。
ただ標準DLLを呼ぶには力不足、とかマニュアルに書いてあるしなあ。
Vimはマルチプラットフォームが原則だから,難しいんじゃないの?
でもソースがあるんだから自分で追加というのもできないことではない.

344:名無しさん@お腹いっぱい。
03/03/01 13:02
perl使えばいいじゃん

345:名無しさん@お腹いっぱい。
03/03/02 01:31
>>344
それじゃVIMを使う意味もないと思う。

>>343
Unix,Mac,Windowsで動くマルチプラットホームなソケットライブラリ
はいくつも存在するから、ようはBramの気分次第のような気がしないでもない。
そのときには、evalはどういう感じになるんだろう。いまいち想像つかないが。
まぁ、いつの日か、
+socket
が表示される日を夢見てevalをいじくるとしよう。

346:名無しさん@お腹いっぱい。
03/03/05 20:59
URLリンク(www.vim.org)
これけっこう便利だけど、\rlogがうまく動いてくれない。

347:名無しさん@お腹いっぱい。
03/03/21 18:07
勉強ついでに
Namazuのvimクライアントつくろーかと思ったけど、
URLリンク(pinna.cside4.jp)
で発見。期待待ち。


348:KoRoN@Vim%Chalice ◆8XALICEsdk
03/03/21 19:06
>>347
あ、本文の方が無いんですね(^-^;
そこのサイトマスター、友人なので執筆のお願いしてみましょうか?

349:名無しさん@お腹いっぱい。
03/03/22 01:26
URLリンク(vim.sourceforge.net)
HelpClose : Close all help windows

1 get ズサーしますた。

350:名無しさん@お腹いっぱい。
03/03/22 01:39
2get!

351:名無しさん@お腹いっぱい。
03/03/22 21:34
私昨夜3getしたみたいです。
>>348
せかさなくて、いいです。更新直後のようですから。
今後の更新をのんびり待ちます。期待して。

352:名無しさん@お腹いっぱい。
03/04/04 11:01
vimにこういうのないかなあ。
URLリンク(www1.odn.ne.jp)
URLリンク(www1.odn.ne.jp)

353:KoRoN@Vim%Chalice ◆8XALICEsdk
03/04/04 11:26
私もちゃんとは試してないんですがCreamがなんかやってます。
    URLリンク(cream.sourceforge.net)
    URLリンク(cream.sourceforge.net)
あとはcppcomplete.vimくらいしか思いつきません。
    URLリンク(www.vim.org)

# Vimは構造的にそういう拡張は難しいんですが…

354:名無しさん@お腹いっぱい。
03/04/05 00:13
URLリンク(www.vim.org)
db_ext というプラグインを使おうと思ったのですが、途中で
if exists("g:default_db_ext_{b:db_ext_type}_cmd_terminator")
という行があって、
b:db_ext_type = 'PGSQL' なんかの時に、g:default_db_ext_PGSQL_cmd_terminator
について exists() したいんだと思うのですが、そのようには動いてくれません。
つーか、そのように動かなくて正解のような気がするんですが、
実際どうなんでしょう。なんか設定とかバージョンとかなんでしょうか。

355:名無しさん@お腹いっぱい。
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板)


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch