Vim6スクリプトお勉強スレ

このエントリーをはてなブックマークに追加
932名無しさん@お腹いっぱい。:2007/11/27(火) 13:07:14
bufname() file-patternが展開される。代替ファイルは"#"または0
bufnr() bufname()と同じ。でも"$"で最後のバッファ。
bufexists() 展開されない。代替ファイルはbufexists(0)

vimはCの関数がすでにコマンドべったりで書かれてるからなあ。
933名無しさん@お腹いっぱい。:2007/11/28(水) 01:08:53
なるほど。
他にはなんかある?
934名無しさん@お腹いっぱい。:2007/11/28(水) 10:12:55
winheight(0) => 現在のウィンドウの高さ
winnr(0) => エラー
winnr("%") => エラー
winnr() => 現在のウィンドウの番号
winnr("#") => 最後にアクセスしたウィンドウの番号
winnr("$") => 最後のウィンドウの番号
とか。カレントを表すのも関数によって"%"や"."だったりするけど、
一応バッファが"%"で行が"."になってるのかな。

エスケープについては、関数だけじゃできなくて、文字列を組み立てて :exe
するときがけっこう嫌らしい。
935名無しさん@お腹いっぱい。:2007/11/28(水) 17:17:04
じらさないで全部教えてくれよ(;´Д`)ハァハァ
936名無しさん@お腹いっぱい。:2007/11/28(水) 17:27:46
>>935
:h
937名無しさん@お腹いっぱい。:2007/11/28(水) 18:01:02
:echo +-+-3
:echo 1++-+-3
938名無しさん@お腹いっぱい。:2007/11/29(木) 16:23:03
そういや一時期Ctrl+@にESCあててたな
日本語ノートね

無変換、前候補、かたかな・ひらがな、でもホームに近い余ってるキー
いくらでもあるからな
そういやスペースの両隣のキーにshiftあてるのがエルゴノミクスとか周りではやった
939名無しさん@お腹いっぱい。:2007/11/29(木) 17:32:40
本スレと勘違いしたか
940名無しさん@お腹いっぱい。:2007/12/03(月) 00:28:47
バッファの変更と、その内容をフックしたいのですが、できますかね?
941名無しさん@お腹いっぱい。:2007/12/03(月) 02:18:39
インサートモードで入力したテキストだけならこんな感じでできそうだけど。

augroup meso
au!
au InsertEnter * call InsertEnterCB()
au InsertLeave * call InsertLeaveCB()
augroup END

function! InsertEnterCB()
let g:modified_save = &modified
set nomodified
endfunction

function! InsertLeaveCB()
if &modified
echomsg "inserted text='". @. ."'"
endif
let &modified = g:modified_save
endfunction
942名無しさん@お腹いっぱい。:2007/12/03(月) 03:03:25
>>940
無理。
FilterReadPreとかで限定的なものはできそうだけど。

>>941
<C-c>されるとInsertLeaveは発行されないよ。
943名無しさん@お腹いっぱい。:2007/12/03(月) 19:17:27
>>940
help {event}

で見合うものを探すのだ
944名無しさん@お腹いっぱい。:2007/12/20(木) 05:10:46
関数名の最初の文字はアンダースコアでも通るみたい。

function! _havesex()
echo "not implemented"
endfunction
945名無しさん@お腹いっぱい。:2007/12/24(月) 20:33:06
>>944
have sex. not implemented w
946名無しさん@お腹いっぱい。:2008/01/09(水) 12:26:12
vimのなかでgccでコンパイルするにはどうしたらいいですか?
perlのやり方は調べたら分かったのですが、cについてはgoogle検索でざざーっと
数十件くらいそれっぽいものを見てみても見つかりませんでした。
お願いします。
947名無しさん@お腹いっぱい。:2008/01/09(水) 13:03:15
:set makeprg=gcc\ %
:make
948名無しさん@お腹いっぱい。:2008/01/09(水) 15:08:18
>>947
ありがとうございます。希望どおりの動作になりました。
949名無しさん@お腹いっぱい。:2008/01/09(水) 22:39:22
:compiler gcc
するとerrorformatを設定してくれるよ
950名無しさん@お腹いっぱい。:2008/01/20(日) 14:57:42
このスレ7年目にしてようやく次スレが見えてきたのかよワロタ
951名無しさん@お腹いっぱい。:2008/01/23(水) 00:18:49
おお、ほんとだ。ようやくだな。
次スレではvim8に突入しちゃうかもな
952名無しさん@お腹いっぱい。:2008/01/23(水) 14:33:17
スレタイは

vim7スクリプトお勉強スレ

なのか、汎用的に

vimスクリプトお勉強スレpart2

なのか
953名無しさん@お腹いっぱい。:2008/01/23(水) 15:32:03
>>952
バージョン入れる必要性はないから後者の方が良いね。
むしろ本スレに統合しても問題ない気もする。分離する必要性ってある?
954名無しさん@お腹いっぱい。:2008/01/23(水) 16:46:31
>>953
あんまりないな

最初は珍しかったから「お勉強」ということだったんだろう
スレの最初の方のレスの流れをみてもそうだけど
955名無しさん@お腹いっぱい。:2008/02/17(日) 14:46:07
>>951-953
次スレを
vim7スクリプトお勉強スレ
にしても
次々スレが
vim8スクリプトお勉強スレ
になって(ry
956名無しさん@お腹いっぱい。:2008/02/20(水) 23:37:56
Vim Part15
http://pc11.2ch.net/test/read.cgi/unix/1202050038/

953の言ってるとおり↑でいいべ
957名無しさん@お腹いっぱい。:2008/02/22(金) 18:56:26
>>955
そいつはめでてーなぁ
958名無しさん@お腹いっぱい。:2008/03/07(金) 01:02:27
Windowsのvim7のinputlist()っていう選択肢の中から選ばせる関数使うと、

*********(<Enter> でキャンセル)

ってメッセージが表示されるんだけど、
Enter押すと、最初の項目が選択されたことになってる。(0が返ってくる)
これって仕様ということでいいのかな?
959名無しさん@お腹いっぱい。:2008/03/07(金) 01:54:06
サンプルコードを見ると、最初の要素はプロンプト的な使い方をするぽい
960名無しさん@お腹いっぱい。:2008/03/08(土) 21:03:02
ほー、なるほど
961名無しさん@お腹いっぱい。:2008/03/09(日) 02:42:55
vim6を使っているけどrenamer.vimがうらやましかったので
6でも動くようにパッチしてみた。

よかったらどうぞ

ttp://sakuratan.ddo.jp/uploader/source/date73498.gz
962名無しさん@お腹いっぱい。:2008/04/15(火) 18:37:36
>>911
command! -range=% TemplateEngine <line1>,<line2>substitute/#{\(.\{-}\)}/\=eval(submatch(1))/g

コマンドにしておくと便利
963名無しさん@お腹いっぱい。:2008/04/19(土) 18:18:32
>>962
で、この TemplateEngine コマンドは
如何に使うとよかですか?
964名無しさん@お腹いっぱい。:2008/04/24(木) 23:04:43
tcvime.vimの文字ヘルプを使う時は、<Leader>?を入力します。この場
合の<leader>のデフォルトは<C-K>です。この<C-K>?を
tcode_cp932.vimのjfjにマップしたいのですが、下記のマップでは動作
しません。何が悪いのでしょうか?

jfj<tab>~K?

勿論fjのマップは外しています。宜しく、お願いします。
965名無しさん@お腹いっぱい。:2008/04/24(木) 23:22:12
:h mapleader
966名無しさん@お腹いっぱい。:2008/04/25(金) 23:50:00
>>964
tcvime.vimで<Leader>?にマップされてる文字ヘルプは、
Normal Mode時にカーソル位置にある文字の入力方法を表示する機能ですが、
Insert Mode用keymap(tcode_cp932.vim)のjfjにマップして、
どういう動作を期待してます?
Insert Modeでjfjと打ったら直前の文字のヘルプを表示して欲しいのでしょうか?
967名無しさん@お腹いっぱい。:2008/04/26(土) 07:38:23
>966
    失礼しました。もしかしたら、keymapのファイルはInsert Mode用に
    定義されているのですか?私は、全てのモードに定義されていると思
    っていた物ですから。やりたい事は、ノーマルモードで、jfjを^K?に
    マップしたい。

    例えば、nmap jfj ^Kqは動作するが、若しもの事を考慮してnnoremap
    jfj ^?と定義すると、何故か動きません。jもfもキーマップは定義
    していないのですが。

    済みません。宜しくお願いします。

968名無しさん@お腹いっぱい。:2008/04/26(土) 09:04:38
keymapは主にInsert mode用です(lnoremapされるものです。mbyte-keymapのヘルプ参照)。
Normal modeで<C-K>?にマップされている機能を別のキーにマップしたい場合は、
nnoremapではなくnmapを使います(nnoremapとnmapのヘルプ参照)。
:nmap jfj <C-K>?
969名無しさん@お腹いっぱい。:2008/04/26(土) 10:40:22
>968
    mbyte-keymapのヘルプを読んだが、今一つnmapとnnoremapとの違いが
    分からない。この場合、nnoremapが動かないのは、再定義するキー
    マップが無いからなのだろうか?

    逆に、考えると確実にそのキーマップが存在していないと、nnoremap
    は動かないと考えるべきなのか。私が、nnoremapにこだわるのは何処
    でキーマップを使うか分からないので、誤動作を防ぎたい。それだけ
    の理由ですが、逆にこれが動かない結果となる。原因が分からな
    い。

    宜しく、お願いします。
970名無しさん@お腹いっぱい。:2008/04/26(土) 19:27:08
質問をさせてください。

コマンドの結果を変数に保存する場合、どのような記述をすれば良いのでしょうか。

以下が、やりたい事をvim の疑似言語で表したものです。
ここでは、:put を実行した時に出力される内容を変数に格納したいです

let tmp = `put`

どうかよろしくお願いします。
971名無しさん@お腹いっぱい。:2008/04/26(土) 22:41:23
>>969
<C-K>?はtcvimeによってマップされているキーなのでnmapを使う必要があります。
:nmap jfj <C-K>?
としてjfjを打った場合、
以下の例のように<C-K>?はさらに展開されるので、tcvimeの関数が呼び出されます。
jfj → <C-K>? → :<C-U>call <SNR>4_ShowStrokeHelp()<CR>
一方、
:nnoremap jfj <C-K>?
としてjfjを打った場合、<C-K>?は展開されないので、
tcvimeの機能は呼び出されません。
jfj → <C-K>?
972名無しさん@お腹いっぱい。:2008/04/27(日) 00:00:11
>>970
let tmp = system("put")

redir => tmp
put
redir END

上か下、どちらかでいけるよ。
どちらが使えるかは、put次第
973名無しさん@お腹いっぱい。:2008/04/27(日) 10:32:29
>971
    詳しい説明、有り難う御座います。何となく、mapとremapの違いが分
    かった様な気がします。
>965
    確かに、mapを指定するのでは無くてmapleaderの設定を変更した方が
    早いかも知れません。
974名無しさん@お腹いっぱい。:2008/06/12(木) 14:20:09
保守
975名無しさん@お腹いっぱい。:2008/06/20(金) 11:36:35
保守
976名無しさん@お腹いっぱい。:2008/06/20(金) 11:37:13
保守
977名無しさん@お腹いっぱい。:2008/06/20(金) 11:38:05
保守
978名無しさん@お腹いっぱい。:2008/06/20(金) 11:42:05
保守
979名無しさん@お腹いっぱい。:2008/06/20(金) 11:43:47
     保守
980名無しさん@お腹いっぱい。:2008/06/20(金) 11:44:51
保守
981名無しさん@お腹いっぱい。
急に更新しているから、なんだだと思えば、埋めか?
このスレは、6年半も使われていたんだよな。