メモ.autocmdでのノーマルコマンド

vimグループに入ってからというものvimスクリプトというものを知って,
それについての記事を見ることが多くなりました.
今まで.vimrcでの設定や,プラグインのためにs:foo=0とかやっていたのが,
実はvimスクリプトであったというのを知ってびっくり.


理解を深めればもう少し使いやすくなるかと思い,
# というのは少しばかり嘘で,本当はka-nachtさん(g:vim:id:ka-nacht:20081123)の書かれた
# :put "=range(10) の使い方がさっぱり分からず,気づいたらスクリプト勉強してた
まずはusr_41.txtを読んでみることにしました.
どんなことを勉強したかはusr_41.txtの通りなので,詳しくは書かないことにして,
これによってできるようになったことをメモしておきます.


ソースファイルで最初に書くお決まりの部分を読み込ませて,
編集をし始める位置にカーソルを持っていく場合に,

au BufNewFile *.c   0r ~/misc/docs/vim_templete/templete|11G$

と,今までは書いていました.
でも,(もちろん)これじゃ通りません.


41.5節には,これに対する解答がありました.

au BufNewFile *.html    0r ~/.vim/skel/skeleton.html|normal Gdd10G
au BufNewFile *.c       0r ~/.vim/skel/skeleton.c|normal 11G$

とこんな感じに,normalを使うことでできるようになりました.


:h auには,

:au[tocmd] [group] {event} {pat} [nested] {cmd}

このようにありますが,問題の箇所のcmdは,コマンドラインモードでのコマンドなのですね..
そもそもコマンドラインモードとノーマルモードのコマンドを,混在させてしまっている時点で気づくべきでした.


できるようになったこと,というのは以上です.
usr_41.txtは現在,"FUNCTION REFERENCES"のはじめまで読みました.
# Cでいう関数ポインタみたいなやつかな?
読み終わったら何かプラグインを作れたらなと思います.
さすがに,初心者がvim.orgに登録するのは気が引けるので,やりませんが...


最後に,現段階でのわたしの.vimrcを書いておこうと思います.
といってもキーマップとインデントがメインだったり,
他の方の.vimrcを拝借した部分もあったりと色々カオスです.
また,コメントアウトしてあるコマンドは食いかけのものだったりします.
つまり,そのままじゃ使えないです.
# コメント部分は俺様英語だったりするので気にしないでください

"" Indent option
set modelines=5	"check modeline from top or bottom of text
set modeline		"enable mode line. e.g. vim: tw=0:sts=0:ts=4:sw=4:
set softtabstop=0
set textwidth=0	"don't wrap
set shiftwidth=8	"width when using '>>' or '<<'
set tabstop=8
set noautoindent
set noignorecase
set nosmartcase
set nosmartindent
set nosmarttab
set nocindent
"au InsertLeave *	set iminsert=0	 	"don't work
"au InsertLeave *	set imsearch=-1	 	"don't work

"" Traverse between the buffers without :w
set hidden
"" Fold block
"set foldmethod=indent
"" Show command inputing in status line
set showcmd

"" Miscellaneous settings
set keywordprg=man\ -S\	3p	"See :h index.txt /|K|

"" ft setting for changelog (input '\o'). (See :help ft-changelog-plugin)
"let g:changelog_new_date_format = "%d  %u\n\t* %c\n\n"	"set Variable
filetype plugin on					"enable Variable
au FileType * set formatoptions-=ro   "don't continue comment line automatically


"" [keymap]
"set scrolloff=999		"recenter (almost same as :zz)
set scrolloff=2
"" Recenter as searching word
"nm <silent>	n	nzz<CR>
"nm <silent>	N	Nzz<CR>
"nm <silent>	*	*zz<CR>
"nm <silent>	#	#zz<CR>
"nm <silent>	g*	g*zz<CR>
"nm <silent>	g#	g#zz<CR>

"" Move between buffers or tabs or windows
nn <silent>		<Space>	:bn<CR>
nn <silent>		<BS>		:bp<CR>
nn <silent>		<C-p>		:tabp<CR>
nn <silent>		<C-n>		:tabn<CR>
nn <silent>		<C-h>		<C-w>h
nn <silent>		<C-l>		<C-w>l
nn <silent>		<C-j>		<C-w>j
nn <silent>		<C-k>		<C-w>k

"" In Command-Line mode, map C-a and C-e as emacs
cno			<C-a>		<Home>
cno			<C-e>		<End>
cno			<C-f>		<Right>
cno			<C-b>		<Left>
cno			<C-d>		<Del>

"" Resize windows easily
nn <silent>		<Up>		<C-W>+
nn <silent>		<Down>		<C-W>-

"" Switch :hls, :noh when leaving Lang-Arg mode(See :lmap @Lang-Arg)
"ln

"" Reread this buffer with changing fileenconding type
nn <silent>		<F2>		:e ++ff=dos ++enc=shift_jis<CR>
nn <silent>		<F3>		:e ++ff=unix ++enc=2byte-utf-8<CR>

"" For ChangeLog
no <silent>		<F5>		<Esc>O<Esc>:.!LANG=C date<CR>$a:<Esc>o<Esc>:.!basename `pwd`<CR>kJo<TAB>* 

"" Templete
au BufNewFile *.html	0r ~/.vim/skel/skeleton.html|normal Gdd10G
au BufNewFile *.c		0r ~/.vim/skel/skeleton.c|normal 11G$
au BufNewFile Makefile	0r ~/.vim/skel/skeleton.Makefile|normal 11G$
"au BufWinEnter *.c	


"" [plugin settings]
"" For dirtags(ctags)
nn <silent>		,t		:!(cd %:p:h;ctags *.[ch])&<cr>
nn <silent>		,x		:!(gcc -Wall -I$HOME/include %:p) 2>&1<cr>
nn <silent>		,X		:!(g++ -Wall %:p) 2>&1<cr>

"" For yankring.vim
"nn <silent>	,y	:YRShow<CR>
"nun <silent>	<C-P>

"" For buftabs.vim
set laststatus=2			"always show status line
let g:buftabs_only_basename=1	"show only basename (not './path/basename')
let g:buftabs_in_statusline=1	"show buffer-tab in status line

"" For mru.vim
"let MRU_File='$HOME/.vim_mru_files	"default
let MRU_Max_Entries=20			"history size
let MRU_Exclude_Files='^/tmp/.*\|^/var/tmp/.*'

"" For vim-Arpeggio
"call arpeggio#load()
call arpeggio#map('ic', '', 0, 'jk', '<Esc>')
let g:arpeggio_timeoutlen=40		"default

こうした方が便利だとかありましたら,教えていただけると嬉しいです.



あ,結局解決してな..><