autocmdの syntaxの改造にトライ (syntax/vim.vim)

Lingr vim-users.jpでも相談させてもらったのですが、

au BufNewFile,BufRead *.html so <sfile>:h/html.vim

に対して、

au myvimrc BufNewFile,BufRead *.html so <sfile>:h/html.vim

ってやると、「BufNewFile,BufRead」がハイライトされてない。。。
これをどうにかしたい。っているのが今回の内容。
Vim初心者です。

Syntaxを調べる

syntax/vim.vimをなんとかしたい vim-jp/issues #155

より、

:echo synIDattr(synID(line("."), col("."), 1), "name")

にて確認するとありましたので、それで確認してみます。

au BufNewFile,BufRead *.html so
vimAutoCmd vimAutoEvent(List) vimAutoCmdSpace vimAutoCmdSfxList vimCommand

では、次はどうかというと。

au myvimrc BufNewFile,BufRead * . html so
vimAutoCmd vimAutoEventList vimAutoCmdSpace vimAutoCmdSfxList vimOper vimVar vimCommand

となってました。
ってことは、単純に vimAutoCmdの次に来る keyword に [group] がないってことか。

:au[tocmd] [group] {event} {pat} [nested] {cmd}
" Autocmd {{{2
" =======
syn match    vimAutoEventList    contained   "\(!\s\+\)\=\(\a\+,\)*\a\+"  contains=vimAutoEvent nextgroup=vimAutoCmdSpace
syn match    vimAutoCmdSpace contained   "\s\+"   nextgroup=vimAutoCmdSfxList
syn match    vimAutoCmdSfxList   contained   "\S*"
syn keyword  vimAutoCmd  au[tocmd] do[autocmd] doautoa[ll]   skipwhite nextgroup=vimAutoEventList

ふむ。確かに [group] 考慮が無さそう。
どうやればいいんだろうか???

改造する。

@@ -304,10 +304,11 @@
 
 " Autocmd {{{2
 " =======
+syn match  vimAutoCmdGroup contained   "\a\+"    contains=vimAutoEventList   skipwhite nextgroup=vimAutoEventList
 syn match  vimAutoEventList    contained   "\(!\s\+\)\=\(\a\+,\)*\a\+"   contains=vimAutoEvent nextgroup=vimAutoCmdSpace
 syn match  vimAutoCmdSpace contained   "\s\+"    nextgroup=vimAutoCmdSfxList
 syn match  vimAutoCmdSfxList   contained   "\S*"
-syn keyword   vimAutoCmd  au[tocmd] do[autocmd] doautoa[ll]   skipwhite nextgroup=vimAutoEventList
+syn keyword    vimAutoCmd  au[tocmd] do[autocmd] doautoa[ll]   skipwhite nextgroup=vimAutoCmdGroup
 
 " Echo and Execute -- prefer strings! {{{2
 " ===============

確かにこうすると

au myvimrc BufNewFile,BufRead *.html so <sfile>:h/html.vim
au myvimrc BufNewFile,BufRead *.html so
vimAutoCmd vimAutoEvent vimAutoEvent vimAutoCmdSpace vimAutoCmdSfxList vimCommand

ってなるので、ハイライトされるんだけど。。。

au BufNewFile,BufRead *.html so <sfile>:h/html.vim
au BufNewFile,BufRead * . html so
vimAutoCmd vimAutoEvent vimOper vimVar vimCommand

となってしまう。(´ε`;)ウーン…
確かにそうなんだけど・・・書き方分からない

ファイルに保存する。(:sav[eas])

早くVimmerになりたい!
ようやく手元に話題の「実践Vim 思考のスピードで編集しよう!」が届きました!

これでVim力をレベルアップをしたいと思います。

この記事は Vim Advent Calendar 2012の278日目の記事です。
277日目は @manga_osyo さんの「Vim で非同期で Clang を使用したコード補完を行う」でした。

今回の記事は至って単純な「ファイルに保存する」についてです。

保存する。(:w[rite])

ググると大体「:w(rite)」しか出てきません。
helpを見るとこんな感じ。

                                                        *:w* *:write*
                                                *E502* *E503* *E504* *E505*
                                                *E512* *E514* *E667* *E796*
:w[rite] [++opt]        バッファ全体をカレントファイルに書き込む。これはファイ
                        ルに対する変更点を保存するときの普通の方法である。
                        オプション 'readonly' がオンであるかファイルに書き込め
                        ない理由が何かあるときには実行に失敗する。

しかし、Vimでは、もう一つあります。
せっかくあるのに、ググっても「:w」しか出てこないと寂しいので、今回紹介します。

保存する。(:sav[eas])

  • help「:h sav」より
                                                        *:sav* *:saveas*
:sav[eas][!] [++opt] {file}
                        カレントファイルをファイル名 {file} として保存し、カレ
                        ントバッファのファイル名を {file} に変える。それまでの
                        カレントファイルの名前はオルタネートファイルの名前にな
                        る。既存のファイルを上書きするには [!] が必要になる。
                        'filetype' が空の場合、保存の前に新しいファイル名に対
                        してファイルタイプ検出が行われる。
                        保存が成功すると 'readonly' がオフになる。
                        {Vi にはない}

どんな場面で使ってるか?

既存ファイルを残しつつ、新規ファイルに保存し、更に編集した場合。

うーん。ちょっと意味が分からないですね。
具体的には、今週の週報「syuhou_20130903.txt」を書かないといけないとします。
先週の週報「syuhou_20130827.txt」があります。
この先週の週報を元に書きなおしたい場合に使ってます。

$> vim syuhou_20130827.txt

Vimmerの方々は、一度Vimを起動すると閉じないと聞いたので、
正確には、

:e syuhou_20130827.txt

ですね。

f:id:kocha2012:20130902233541p:plain

ここで、

:w syuhou_20130903.txt

だと、カレントバッファは「syuhou_20130827.txt」のままです。

f:id:kocha2012:20130902233558p:plain

しかし、

:sav syuhou_20130903.txt

だと、カレントバッファが「syuhou_20130903.txt」になるので、
更なる追記も楽ちんです。

f:id:kocha2012:20130902233614p:plain

とまぁーこんな感じで使ってます。
自分のディレクトリに Vim Girlとの夏の思い出 が無かった・・・
誰かください(T_T)

次回は @manga_osyo さんです。

VAC2012とvim-anzuとvim-airline

VAC2012

VAC(Vim Advent Calender)2012 はまだまだ続いています。
凄いです。Vimmerにクリスマスはなかった。

しかし、Vim Girlがいます。
Vim Girlがいます。(かわいい)

f:id:kocha2012:20130820225646p:plain

毎日素晴らしい記事が投稿されています。
感謝!感謝!

vim-anzu

VAC(Vim Advent Calender)2012 - 261日目
anzu.vim の動作を高速化した。それと Patch 7.3.867 で追加された便利なアレ

なぜかスルーしていた anzu.vim
早速入れてみました。

vim-airline

VAC(Vim Advent Calender)2012 - 263日目
vim-airline に乗り換える5つの理由

私は、vim-powerline (vim-powerlineのほう)を使っていましたが、
この記事で vim-airlineに乗り換えることに決めました。

設定

vim-airline内に vim-anzuの結果を反映させることにしました。

" -------------------------------------------------------------------
" vim-anzu関連 {{{
"
" キーマップ設定
" nmap n <Plug>(anzu-n)
" nmap N <Plug>(anzu-N)
nmap n nzz<Plug>(anzu-update-search-status)
nmap N Nzz<Plug>(anzu-update-search-status)
nmap * <Plug>(anzu-star)
nmap # <Plug>(anzu-sharp)
" ESC2回押しで検索ハイライトを消去
nmap <silent> <ESC><ESC> :<C-u>nohlsearch<CR><Plug>(anzu-clear-search-status)
" format = (該当数/全体数)
let g:anzu_status_format = "(%i/%l)"
"}}}

" -------------------------------------------------------------------
" vim-airline関連 {{{
"
" vim-anzuの表示を statuslineに
let g:airline_section_c = '%F %{anzu#search_status()}'
" whitespace無効
let g:airline#extensions#whitespace#enabled = 0
"}}}

こんな感じです。

f:id:kocha2012:20130820225701p:plain

unite-tig更新(折り畳み表示)

はじめての unite source(unite-tig)

自分のuniteソース処女作なので、Vim魂が高まった時に色々やってます。

  • diff表示部分に fold表示を追加しました。(defaultは展開済です)
    以下の様な画面になります。

f:id:kocha2012:20130816230918p:plain

ショートカットカットキーとして t を割り当てたので、
t で折り畳み表示のON/OFFが可能です。(+folding時)

常に折り畳んだ状態を表示させるには、

let g:unite_tig_default_fold = 1

改善項目(できたらいいな)

どう実装すればいいのかイマイチ分かってない・・・><

  • 折り畳み時の表示形式
  • git grep機能
  • git status機能

ModelSim-Altera Starter Edition 13.0(10.1d)インストール

アルテラ、Quartus II 開発ソフトウェア v13.0 をリリース

ということで、Ubuntu 12.04 LTS(32bit)に ModelSim-ASE 13.0(10.1d)をインストールしました。
※現在だと 13.0sp1(10.1d)が最新です。

ダウンロード

今回よりダウンロードが変わったみたいですね。
私はダウンロード・マネージャーを使ってダウンロードしました。
私は Macですが大丈夫でした。
ファイル名:ModelSimSetup-13.0.0.156.run

インストール

インストール方法も変わりました。

$> ModelSimSetup-13.0.0.156.run

で、GUIが立ち上がりますのであとはポチポチと。

実行

$> make vlib work
vlog sample.sv
Model Technology ModelSim ALTERA vlog 10.1d Compiler 2012.11 Nov 2 2012
-- Compiling module testbench

今回から、リンクを張っていた作業が要らなくなってました!

$> ln -s linux linux_rh60

かなりダウンロード含めて便利になりましたね。