メモ.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
こうした方が便利だとかありましたら,教えていただけると嬉しいです.
あ,結局解決してな..><