トップページunix
988コメント268KB

Vim Part21

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい。2012/07/16(月) 01:09:05.70
Vim 6以降に関する話題、Part21です。
http://www.vim.org/

前スレ
Vim Part20
http://toro.2ch.net/test/read.cgi/unix/1322212163/

関連情報は>>2-6あたり。
0982名無しさん@お腹いっぱい。2013/03/27(水) 17:20:27.17
>>981
概ね良好だと思う
0983名無しさん@お腹いっぱい。2013/03/27(水) 22:27:26.71
>>980
そうです。scrollbindってすぐ壊れてしまうので、編集時には向かないけどみるだけならいいかなと。。。

教えてもらったものはうまくいかなかったのですが、参考にしていろいろしてみたら
:vsp +execute 'normal!'.(line('w$')+1).'Gzt'と

:execute 'normal!'.(line('w0')+(winheight(0)*winnr('$'))).'Gzt'
とすると、いい感じになりました

後者をnnoremapで<C-f>とかに割り当てるにはどうすればよいのでしょうか?
nnoremapに割り当てるとなんか編集モードになってしまいます。

あと、できればかけ算するのではなくウィンドウ指定してline('w$')をとりたいのですがそういうはできますか?
この場合、いちばん右下の行番号がほしいです。
0984名無しさん@お腹いっぱい。2013/03/27(水) 22:36:22.91
>>981
たしかにdiffは関係ないです。
ただタグジャンプとかするとscrollbindってずれてしまうみたいなので、みるだけの代表としてdiffといいました

普通に<C-f>だと折り返しがあるとずれちゃうのですよー
nowrapすればよいだけの話なのですが、なまじいけそうなだけになんか負けた気がして、いろいろやってます。
0985名無しさん@お腹いっぱい。2013/03/27(水) 23:13:39.42
>>984
gj のような感じで、ページ単位でスクロールできればよさそうっぽいけど、ないのかな
0986名無しさん@お腹いっぱい。2013/03/28(木) 00:51:03.47
>>983
いったんそのウィンドウをアクティブにして line('w$')するしかないんじゃないかな
0987名無しさん@お腹いっぱい。2013/03/28(木) 19:12:50.42
お手軽に済ませようと思ったのですけど、ウィンドウを移動するというところであきらめました。

はじめてのスクリプトで調べながらちょこちょことやってみましたが、 けっこういろんなことできるんですね。
途中で目的を忘れて、明らかにオーバースペックになってしまいましたが、できました。
結局、scrollbindなんて使わない方が無難だったという。。。
全部は書き込めなかったので、抜粋

function! NormalizeView()
execute b:start_nr.'wincmd w'
let l:target_bufnr=winbufnr(0)
let l:end_nr = b:start_nr
let l:lnum=line('w$')+1
wincmd w
while winnr() != l:end_nr
if winbufnr(0) == l:target_bufnr
execute 'normal!'.l:lnum.'zt'
let l:lnum=line('w$')+1
endif
wincmd w
endwhile
unlet l:lnum
endfunction

command! PgUp let lnum=line('w0')-1 | :execute(b:start_nr.'wincmd w')| :execute('normal!'.lnum.'zb') | :call NormalizeView()
command! PgDown let lnum=line('w$')+1 | :execute(b:start_nr.'wincmd w')| :execute('normal!'.lnum.'zt') | :call NormalizeView()
nnoremap <buffer> <silent> <C-f> :PgDown<CR>
0988名無しさん@お腹いっぱい。2013/03/28(木) 19:18:23.48
あっ、分割は別に関数作って command! -count=2 Pin1 :call NSplit(<count>) としました。
b:start_nrは 関数の中で設定しています。
コメントいただいた皆さんありがとうございました。

連投失礼しました。
レス数が950を超えています。1000を超えると書き込みができなくなります。