トップページ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あたり。
0895名無しさん@お腹いっぱい。2013/02/12(火) 23:12:31.13
>>894
> groupの中に所属しているautocmdが実行された際に
autocmd! のこと?だったら、まさに :h aug に書いてあることと一緒だけど、これは同じaugroup内で定義されている autocmd をクリアしてるだけ
0896名無しさん@お腹いっぱい。2013/02/12(火) 23:57:52.01
>>894
良いたとえかわかりませんが名前空間を定義するような感じです
augroup Tarou
au FileType c echo 'Tarou'
aug end
augroup Jirou
au FileType c echom 'Jirou'
aug end
は、
au FileType c echom 'Tarou'
au FileType c echom 'Jirou'
と、結果的には一緒です
しかし、doautocmdで任意のタイミングでautocmdを実行する場合、augroupを使うと
doau Tarou FileType c の様にして、TarouのFileType cのみを実行することができます
augroupを使わない場合、同様のことはおそらくできないと思います
0897名無しさん@お腹いっぱい。2013/02/13(水) 00:28:28.53
>>895
いえ、BufReadの方でした。ありえないとはわかっていたんですが
augroup中のイベントに引っかかった時グループ内のすべての動作が
行われるのかと…
>>896 の例えでわかった感じがするので、もう一度読み返して
来ようかと思います。まだいまいちピンときてないですが…

autocmd!を用いる際にaugroupが多用されるのは
グループ内のautocmdのみ初期化するため、ということでしょうか
0898名無しさん@お腹いっぱい。2013/02/13(水) 00:58:53.77
>>897
augroup を指定せずに定義されたautocmdもデフォルトのグループに属しています
なので、augroup内であろうと無かろうと、autocmd BufRead は、BufRead時にしか実行されません

> autocmd!を用いる際にaugroupが多用されるのは
> グループ内のautocmdのみ初期化するため、ということでしょうか
そうです。vim起動直後に、:autocmd を実行すると
BufLeave
*.xml set updatetime&
filetypedetect BufNewFile
?\+.orig exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))

{event} となっているものと
{group} {event} となっているものがあると思います
次に、:autocmd! を実行すると、デフォルトのaugroupに属するautocmdが削除されるので、
もう一度 :autocmd の結果を確認すると、上の例で定義されていた BufLeaveは消えているはずです
同様に、:autocmd! filetypedetect とすると、デフォルトで定義されているファイルタイプ検出がすべて削除されます
0899名無しさん@お腹いっぱい。2013/02/13(水) 19:15:19.63
>>885
亀かつ憶測ですが

入力候補一覧から、続けて入力するものを絞り込みたいのなら

neocomplcacheとuniteを連携させる
<plug>(neocomplcache_start_unite_complete)を使えば、

補完一覧を別ウィンドウで表示し
選択や更に絞り込むというのができるとおもいます
0900名無しさん@お腹いっぱい。2013/02/14(木) 19:39:36.88
横からすいません。
上書き保存を「:wp」じゃなく「:x」ってやってる人って少ないよね。
0901名無しさん@お腹いっぱい。2013/02/14(木) 19:54:28.53
>>900
俺はそれ結構つかうよ
ZZは使わないけど
0902名無しさん@お腹いっぱい。2013/02/14(木) 20:05:01.17
:wq の間違いかな。
コード修正してるときは保存してすぐ閉じるってことが少ないから:wq自体あんまり使わないかも。

関連するようなしないような、で言えば、:saveasは結構使う
0903名無しさん@お腹いっぱい。2013/02/14(木) 20:16:32.00
自分は:upでやってるなあ。
updateするっていう意識があるから。
0904名無しさん@お腹いっぱい。2013/02/15(金) 01:30:14.55
ZZ, ZQ派です
でも:xって良さそうだな、明日ヘルプでみてみるか
0905名無しさん@お腹いっぱい。2013/02/15(金) 02:10:33.26
:x と :X をお間違えのなきよう
0906名無しさん@お腹いっぱい。2013/02/15(金) 08:14:28.61
:wqが一番直感的に書き込み→終了って感じだからこれ以外は使わない
0907名無しさん@お腹いっぱい。2013/02/15(金) 11:48:02.37
:w やら :q ってマッピングしとらん?
nnoremap <Space>w :<C-u>write<Cr> とか
0908名無しさん@お腹いっぱい。2013/02/15(金) 18:26:25.68
:xと:upは並列こそすれ、どちらかを選ぶものでもないと思う。
別に:up :q って続けてやるよっていうならとめないけど
0909名無しさん@お腹いっぱい。2013/02/16(土) 01:00:51.84
>>908
せやな
:write と :update ならわからいでもない
0910名無しさん@お腹いっぱい。2013/02/16(土) 23:38:02.95
ZQなんてあるんだ。
知らなかった。

ZZと:xは完全に同じではないから、使い分けることもある。
0911名無しさん@お腹いっぱい。2013/02/17(日) 18:07:28.12
何が違うんだっけ?
0912名無しさん@お腹いっぱい。2013/02/17(日) 18:57:12.07
tmux で detach attach とか xterm を xkill してたら
(xsession も1回抜けたり落としたりしたかも。uim も上げなおした気がする)
↓で落ちた。

BadWindow (invalid Window parameter)
Vim: X のエラーを検出しました

X接続が切れて visual が X から離れるのは普通に起こるんだけど、
あんまりこの落ち方した記憶がない。
もとの xterm がないときに何かの条件で起きるんだと思うけど、
vim が xterm とかにするX要求って何があるんだっけ?

ほぼ起きないならあまり気にしないけど、
条件が判っているなら気には留めておく。
0913名無しさん@お腹いっぱい。2013/02/17(日) 23:19:01.90
>>911
ヘルプによると、ZZは「保存して終了」という意味では :xと同じ
:xは'hidden'オプションについて言及されてるけど、ZZはされてないからもしかしたらそこの挙動が違う…かもしれん
0914名無しさん@お腹いっぱい。2013/02/18(月) 00:39:14.66
windows用kaoriya版gvimを使っていて、CapsキーをCtrlに置き換えたいと思ったのですが、検索をしてみるとレジストリをいじって置き換えるとかそういう話ばっかりで、
単純にCpasキーが押された時にCtrlと同じ動きをするという設定をVim側でできないんでしょうか?
0915名無しさん@お腹いっぱい。2013/02/18(月) 01:01:24.47
>>914
一応スレ知やけど
ttp://stackoverflow.com/questions/2176532/how-to-map-caps-lock-key-in-vim
WindowsならAutoHotkey使え。というのが回答かもしらんな
0916名無しさん@お腹いっぱい。2013/02/18(月) 01:06:09.66
AHKよりのどかオススメ
0917名無しさん@お腹いっぱい。2013/02/18(月) 02:02:07.93
>>915>>916
ありがとうございます。とりあえず2つ調べてみてよさそうな方入れてみたいと思います
0918名無しさん@お腹いっぱい。2013/02/20(水) 06:34:24.11
Kaoriya の gVim(Win7 64) なんだけど、migemo.vim について
cmigemo の vimigemo.txt に

> つまりのアーカイブに含まれる全てのファイルとディレクトリを$VIMへコピーすれば
> インストールは完了します。

と、書かれてるけど、解凍して出来た runtime/plugin/migemo.vim を $VIM にコピーしても
migemo.vim が認識されない・・・

これって、私だけに発生している症状でしょうか?
みなさんは正常に認識されてます?
0919名無しさん@お腹いっぱい。2013/02/20(水) 07:45:47.05
自分は試してないけど
pluginならばやはり
$VIMではなくpluginフォルダに置くべきではないか
0920名無しさん@お腹いっぱい。2013/02/20(水) 20:03:23.06
辞書を正しい位置においてないとか
dllだかexeをgvimと同じところにおいてないとか
キー割り当てを勘違いしてるとか
デバッグすれば分かるはず
help debug-scriptあたりで確か見てみろ
09219182013/02/21(木) 07:16:37.04
レスありがとう

>>919
pluginフォルダは NeoBundle で管理してて、$HOME/.vim 以下に割り当て、正常に動作してるんだけど、
memige.vim だけを $HOEM/vimfiles の下に置くのはなんか嫌なので

>>920
$HOME/vimfiles/plugin に配置するとちゃんと動作するので他のファイルの配置自体は間違ってないみたいです
0922名無しさん@お腹いっぱい。2013/02/21(木) 10:51:45.77
>>921
NeoBundleみたいの使ってるなら、$HOME/.vim/plugin が &amp;rtp に入ってないだけちゃう?
:call setline(1, split(&amp;rtp, ',')) とかで確認してみ

スレ知やけど、Windowsのデフォルトは $HOME/vimfiles やから
.vimrcで :set rtp+=$HOME/.vim したらいけるんちゃうかと
0923名無しさん@お腹いっぱい。2013/02/21(木) 21:29:46.01
そういえば migemo.vim は incsearch できないんだっけ。
patch なしで migemo incsearch できる?誰もやってないか…
0924名無しさん@お腹いっぱい。2013/02/21(木) 23:04:33.93
>>921
耳毛.vim...
0925名無しさん@お腹いっぱい。2013/02/22(金) 00:18:20.69
耳毛wwwwwwwwwwwwwwwwwwwwwwww
09269182013/02/23(土) 10:48:57.28
>>922
レスありがとう。
結局、neobundle で
{'type' : 'nosync', 'base' : '~/.vim/bundle/manual'}
として、~/.vim/bundle にまとめることにしました。

ここって、UNIX板だったね、板違いでごめんなさい。
VIM全般と勘違いしてました。

>>923
migemo.vim はそのままでインクリメントサーチできますよ。

>>924
>>925
ごめんtypo
なんだ耳毛ってw
0927名無しさん@お腹いっぱい。2013/02/23(土) 17:17:18.96
>>926
どうやって incsearch ?
migemo.vim の中みても <leader>mi くらいしか見当たらない。
一応 https://github.com/koron/cmigemo/blob/master/tools/migemo.vim 見たけど。
0928名無しさん@お腹いっぱい。2013/02/23(土) 17:39:20.22
emacsだと印栗メンタルなmimigeなんだよ
しかも普通の検索に統合されてる
/に統合するスクリプトをつくってくれってことかも
パッチジャ内と無理かもしれないが
0929名無しさん@お腹いっぱい。2013/02/26(火) 09:51:35.57
ファイル内における全てのある文字列AをBに、もう一方のBをAに
置き換え(入れ替え)る方法はないでしょうか?
0930名無しさん@お腹いっぱい。2013/02/26(火) 10:37:19.06
A>C
B>A
C>B
この流れでどうよw
0931名無しさん@お腹いっぱい。2013/02/26(火) 19:46:10.84
%s/[AB]/\=(submatch(0)=='A')?'B':'A'/g

でもこれだと汎用的なものはムズイよ
0932名無しさん@お腹いっぱい。2013/02/26(火) 20:05:56.90
sedなどのスクリプトでやれよ。
0933名無しさん@お腹いっぱい。2013/03/02(土) 16:56:47.79
viがあまりにもよく出来過ぎてて、生きてるのがつらい
0934名無しさん@お腹いっぱい。2013/03/02(土) 21:06:36.11
でも君がviを一緒に連れて行くとたくさんの人悲しむから一人で逝くことになるとおもう。
それならviとともに生きたほうがいいと思わないか?
0935名無しさん@お腹いっぱい。2013/03/04(月) 01:09:03.02
それviちゃう
picoちゃんやで
0936名無しさん@お腹いっぱい。2013/03/06(水) 01:26:06.57
vimの無い世代を生きてないのでviの良さを知らない。
多重安藤が無いなんて…メモ帳?なにそれ美味しいの?

ヴィーアイエムと読むかヴィムと読むかでその世代が別れてるとおもう。
0937名無しさん@お腹いっぱい。2013/03/06(水) 06:45:54.29
多重undoする暇があったら
打ち直した方が速いよ
0938名無しさん@お腹いっぱい。2013/03/06(水) 07:51:07.01
んなわけあるか
0939名無しさん@お腹いっぱい。2013/03/06(水) 07:56:32.53
あるよー
どこまで戻せばいいかわからなくなったり
戻しすぎたりするからねー
0940名無しさん@お腹いっぱい。2013/03/06(水) 11:57:01.60
戻しすぎたらCtrl-rすればいいんじゃない


redoのキーアサインってVimっぽくないよね
0941名無しさん@お腹いっぱい。2013/03/06(水) 12:18:59.38
そんなのケースバイケース
0942名無しさん@お腹いっぱい。2013/03/06(水) 14:00:00.26
edとかsed系はアンドウないね。
0943名無しさん@お腹いっぱい。2013/03/10(日) 02:24:00.42
環境変数をバッファに展開、入力する方法はありますか?
0944名無しさん@お腹いっぱい。2013/03/10(日) 06:31:31.41
:put =$home

:h :put
0945名無しさん@お腹いっぱい。2013/03/10(日) 06:32:49.68
いま Vista だった
:put =$HOME
0946名無しさん@お腹いっぱい。2013/03/10(日) 14:42:59.01
ありがとうございます。あってよかったけど、あるのか…
組み込み関数について知った辺りからvimにできないことって
あるのかよって思い始めた
0947名無しさん@お腹いっぱい。2013/03/12(火) 15:49:42.52
ペースト時にインデントを自動で揃えてくれる設定かプラグイン教えてください
0948名無しさん@お腹いっぱい。2013/03/12(火) 16:40:22.56
p=G
0949名無しさん@お腹いっぱい。2013/03/12(火) 17:37:50.32
それだと、ペースト行から下全部じゃないですか?
ペーストした範囲だけインデントを合わせたいです。
0950名無しさん@お腹いっぱい。2013/03/12(火) 18:14:01.22
ペーストしたばかりの範囲を囲む操作があったはず。
nnoremap <expr> gp '`[' . strpart(getregtype(), 0, 1) . '`]'

2chだと空白行がおかしい処理されるので念のため。
http://vim.wikia.com/wiki/Selecting_your_pasted_text
それで範囲囲んで=はどうだ?
0951名無しさん@お腹いっぱい。2013/03/12(火) 18:14:54.27
>>949
vpgv=
ではだめ?
0952名無しさん@お腹いっぱい。2013/03/13(水) 02:59:51.80
=`]
でできるよ
0953名無しさん@お腹いっぱい。2013/03/13(水) 05:52:16.03
あぁ、そこに至れなかった自分が悔しい
にしても =`] ってちょっとかわいいな
0954名無しさん@お腹いっぱい。2013/03/13(水) 12:31:11.65
nnoremap <silent> p p=`]
vnoremap <silent> p p=`]

にしときました。
いくつか回答が出たってことは特にみなさん設定してない?
0955名無しさん@お腹いっぱい。2013/03/13(水) 13:07:18.19
うん。
0956名無しさん@お腹いっぱい。2013/03/13(水) 22:27:59.68
私は=pをそれにしてるな
0957名無しさん@お腹いっぱい。2013/03/21(木) 09:36:32.67
exモードで
:s/before/after
で変換しますが、ここでbeforeやafterを入力するときに入力補完をしたいです。
どうすればいいんでしょうか。
0958名無しさん@お腹いっぱい。2013/03/21(木) 10:19:25.94
何を補完するんだ?
0959名無しさん@お腹いっぱい。2013/03/21(木) 12:29:00.14
行頭でci'で次の''内を削除してinsertになるのに
cibもしくはci(だと()内にいないとダメなのは皆さん気にならない?
0960名無しさん@お腹いっぱい。2013/03/21(木) 14:23:07.78
>>958
テキストに入力されている文字です

例えば
「floccinaucinihilipilification」がエディタ上に入力されていたとして
:s/floccinaucinihilipilification/hogehoge/
ってやる場合に「floccinaucinihilipilification」と入力するのが大変なので
0961名無しさん@お腹いっぱい。2013/03/21(木) 15:53:52.74
カーソル位置に依存した補完あるよ
:h c_ctrl-r_ctrl-f

CTRL-R CTRL-F
CTRL-R CTRL-P
CTRL-R CTRL-W
CTRL-R CTRL-A
について書いてあるけど、キーの押しやすさから、
私は CTRL-R CTRL-F ばかり使っている。
左手一本で ctrl押したまま ra でいいわけだし。
0962名無しさん@お腹いっぱい。2013/03/21(木) 15:54:33.79
しまった
× 左手一本で ctrl押したまま ra でいいわけだし。
○ 左手一本で ctrl押したまま rf でいいわけだし。
0963名無しさん@お腹いっぱい。2013/03/22(金) 00:01:51.26
押しやすさの理由で C-R C-W使ってるわ
0964名無しさん@お腹いっぱい。2013/03/22(金) 13:59:34.78
「vim がオススメ」と言える状況ってなんだろう?

お前ら、最強のテキストエディターは「Mery」で異論はないよな?
http://hayabusa3.2ch.net/test/read.cgi/news/1363874572/

137 :ハイイロネコ(チベット自治区):2013/03/22(金) 04:16:40.42 ID:so/V8PBf0
 vimがイイって言われ使ったけど、使いずれーよ。特に初心者は。
 頑張ってなれようとしたけど、少し触らなくなると、忘れる。
 もう変なのすすめるなよ。
0965名無しさん@お腹いっぱい。2013/03/22(金) 15:08:20.39
コーディング用途なら概ねオススメだろ
作文にでも使おうとしたんじゃないのか、そいつ
0966名無しさん@お腹いっぱい。2013/03/22(金) 16:42:02.30
Vimはすすめられて使うようなもんじゃなくて
命からがらたどりついた砂漠のオアシスみたいなもの
0967名無しさん@お腹いっぱい。2013/03/22(金) 16:56:33.16
初心者に勧めるならまずオペレータとモーション、つーかテキストオブジェクトの組み合わせを説明するわ
これが合理的だと感じられる人ならすぐ使えるようになると思う
0968名無しさん@お腹いっぱい。2013/03/22(金) 18:03:42.36
>>964
中級者くらいにならないとvimのありがたみはわからないから仕方ない
0969名無しさん@お腹いっぱい。2013/03/22(金) 18:12:03.34
a = ('y'~'x')
test = ('z'~'x')
sample = ('A'~'B'+'C')
この3行のそれぞれの最初の括弧の前にfuncをつけ、例えば最初の行なら
a = func('y'~'x')
と、括弧の位置が行ごとにずれている場合でもビジュアルモードで3つ一気に修正したいのですが、これは可能でしょうか?
0970名無しさん@お腹いっぱい。2013/03/22(金) 18:13:32.20
:0,$s/(/func(/
0971名無しさん@お腹いっぱい。2013/03/22(金) 19:30:12.65
:[line-address]s/befor/after/g
の形だな。
0972名無しさん@お腹いっぱい。2013/03/23(土) 18:06:31.98
遅くなりましたが、お二人方ありがとうございます。
無事にうまく修正できました。
0973名無しさん@お腹いっぱい。2013/03/26(火) 01:50:40.82
別に誰に勧められたのでもなく、今じゃ何でもかんでもvimで書いてるけど、
プログラミングでなくても、頻繁に単語や文章を入れ替えたりしながら書くタイプには向いているエディタだと思う。
使う人を選ぶとこはあるのかなという気はする。
0974名無しさん@お腹いっぱい。2013/03/26(火) 05:34:33.02
日本語の文章を打つのには向いてないよね
一応migemoみたいなのはあるんだけど
0975名無しさん@お腹いっぱい。2013/03/26(火) 07:28:32.04
w,e,bが実質使えなくなるからなー
改良するプラグインはあるけどやはり直感的じゃない
英語ならいけるんだろうね
0976名無しさん@お腹いっぱい。2013/03/26(火) 07:54:01.68
Q. Vim は 日本語 の 文章 の 入力 に 使えますか?
A. Vim は このような わかち書き の 文章 の 入力 には 向いていますが、
  通常 の 日本語 の 入力 には 向いて いません。
0977名無しさん@お腹いっぱい。2013/03/26(火) 14:30:36.93
>>961
ありがとうございます。

あとカーソル位置に依存しない補完はないのでしょうか。
インサートモードのctrl+pのような機能をexモードで使いたいので。
0978名無しさん@お腹いっぱい。2013/03/26(火) 14:42:45.91
>>977
command-line mode はいかん?
デフォルトでは、コマンドモードで <C-f>
0979名無しさん@お腹いっぱい。2013/03/26(火) 23:05:33.95
突然ですが、お知恵をください。

ソースのdiffのチェックをするときにvim -R - に差分食わせた後、:vspで縦3分割位して一気に見えるようにしたいのですが、先頭をずらしつつscrollbindまでしたあと、画面単位にページ移動させるにはどうすればよいのでしょうか?

デフォルトのままだと、高さ分しか移動しないので、分割したウィンドウが右から左へ移動するような感じになってしまいます。
0980名無しさん@お腹いっぱい。2013/03/26(火) 23:44:06.64
>>979
縦三分割で60行*3で180行一気にみるぜ!ということ?
私の知らない所で設定があるのかもしれないけどわからん
こんなんどうよ?
function! AwesomeScroll()
execute '0wincmd w'
let h = winheight(0)
let lnum = (h * winnr('$')) + 1
execute 'normal! ' . lnum . 'G'
endfunction
nnoremap <Down> :call AwesomeScroll()<Cr>z<Cr>
0981名無しさん@お腹いっぱい。2013/03/27(水) 17:10:52.31
>>979
内容的にdiffであることは関係なさそうな気がしてるんだけど、
3<C-f>じゃだめ?
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を超えると書き込みができなくなります。