neosnippetのスニペット追加についてのメモ

[vim]neosnippet.vim からデフォルトのスニペットが削除された

を見て、こちらをインストールしました。

neosnippet.vimを更新すると、
自分で作っていたスニペットが有効にならなくなった。

どうやら、「snippets」ディレクトリから
「neosnippets」ディレクトリに変更になったみたい。

Pandocを利用する

Pandocってなに?

Haskell製のドキュメント変換ツールです。
入力/出力のフォーマットが豊富です。
こちらのサイトの図を見たほうがいいかも。

Pandocは こちら のほうで試すことができるので、
どんな感じか見てみたい方にはオススメです。

Macへのインストール

どうも MacOSX 10.9.1だと Haskell Platformがインストール出来なかったので、
サイトからPackeageをダウンロードしてインストールしました。
このやり方だと最新に更新する際にまたダウンロードしないといけないので嫌だけど。。。

色んな Markdownをサポート

オプションを見てみると、色んな Markdownをサポートしているみたい。

  • markdown (pandoc’s extended markdown)
  • markdown_strict (original unextended markdown)
  • markdown_phpextra (PHP Markdown Extra extended markdown)
  • markdown_github (github extended markdown)

それぞれがどんな感じかというと、こちらに書いてあります。

Vimの設定

let g:quickrun_config['markdown'] = {
  \ 'type': 'markdown/pandoc',
  \ 'outputter': 'browser',
  \ 'cmdopt': '-s'
  \ }

今まで、BlueFeather使ってきたけど、
Pandocのほうが、個人的にはいい感じになっている。

"コメントアウトして編集"を効率化する。

この記事は Vim Advent Calender 2012 の 315日目の記事です。

314日目は、@supermomonga さんの「Macを購入したら絶対に導入したい!私が3年間で厳選した超オススメアプリ10選!」でした。

私も Macを持ってますが、超オススメアプリはすべてインストールしました!!!
超オススメなので、みなさん導入しましょう!

さて、本日の記事はこちらになります。

概要

例えば、.vimrcにカラースキームの設定している。

colorscheme evening

あっ!でも、違う色に設定しようかな。
でも前の記述も残しておきたい。
ということで、以下のように書くとします。

" colorscheme evening
colorscheme ron

こういった場合に、ちょっと効率化しようというお話です。

コメントアウトの Vimプラグイン

コメントアウトする際に 言語に合わせてコメント文字を覚えてられないので、便利なプラグインがあります。以下のどれかをインストールしたら、「gcc」と入力してみると効果がわかると思います。
私は @tyruさんの Vimプラグインを入れています。

他にもこんなものがあります。

参考記事:

本題

やりたいことは簡潔です。
※わざわざキーに割り当てる必要がないかもしれません。

  1. 行をYank(コピー)する。
  2. 既存の記述はコメントアウト。
  3. Yankした行を貼り付ける
  4. 編集する。

この1~3までの動作を私は「Ctrl+Enter」に割り当ててます。

nmap <C-Enter> yy<Plug>(caw:i:comment)p
nmap <silent> <C-Enter> yy:<C-u>TComment<CR>p
nmap <C-Enter> yy<Plug>CommentaryLinep
" 関数は <Plug>CommentaryLine までです。*見づらい

というような設定をしておく、「Ctrl+Enter」で

" colorscheme evening
|colorscheme evening

※「|」カーソル位置(Normalモード)

このようになります。
こんな感じで、言語を気にせずコメント&行追加が可能で、
やりたいことが簡単に出来ました。

発展系!!!???

いやまだまだ!!!(書いてたらこんなのも出来るなと思った)
例えば、C++のコードで

 printf("Hello World\n");

コメントアウトして、printfの内容を変えたい場合

nmap <S-Enter> yy<Plug>(caw:i:comment)pf"di"i

ってやってると、「Shift+Enter」で以下のようになります。

 // printf("Hello World\n");
    printf("|");

※「|」カーソル位置(挿入モード)

これって、ちゃんと Vimプラグイン作ると嬉しい人いるのかな。
もうあったら教えてください。試してみたい。

おわり

っというような感じです。
もちろん、バージョン管理ツールに commitする時には、 あんまり残したりしないのですが、ちょっと変更して テストしてみたい時には 以前の記述を残す ことが多いので、 私は便利に使ってます。

次回は @manga_osyo さんです。

追記

記事投稿後に、Lingrにて「nerdcommenter」の存在を教えていただき、
プラグインの紹介部分に追記しています。

ファイル別の key-map設定で失敗した話

本記事は、Vim Advent Calendar 2012の 309日目の記事になります。

308日目は @manga_osyo さんの「[vim]unite.vim の action について理解する」でした。

今回は、私が キー配置の設定で失敗した話です。
色んな方の .vimrc 見てみたのですが、同じような設定方法をしている方も
いてどうしているんだろうなって気になりました。

失敗してしまった設定

  • help において、「q」で閉じる
autocmd MyVimrc FileType help nnoremap q :q<CR>

とこんな風に .vimrcに書いていました。
これが、失敗とも知らずに・・・

どんな場面で気づいたか

一度、Vim/gVim 立ち上げるとほとんど Vim内で作業しているのですが、
どうも FileTypeが helpで無くても「q」で閉じてしまうことが発生しました。

  • .vimrcを見直そうとして開く
:e ~/.vimrc

f:id:kocha2012:20131004231221p:plain

  • おっと。これどういう意味だっけ(helpを見る)
:help key-map

f:id:kocha2012:20131004231253p:plain

  • ふむふむ。なるほど!(help画面と閉じる)
q
(.vimrc)

f:id:kocha2012:20131004231310p:plain

  • あれ? .vimrcでも「q」で閉じてしまった

f:id:kocha2012:20131004231326p:plain

(´・ω・`)

なぜ???(調査)

  • .vimrcを見直そう
:e ~/.vimrc
:nnoremap q
なにも見つかりません
  • おっと。これどういう意味だっけ
:help key-map
:nnoremap q
n  q           *@:q<CR>
  • ふむふむ。なるほど!(help画面と閉じる)
q
(.vimrc)
:nnoremap q
n  q           *@:q<CR>

FileTypeが vim でも「q」のキーマップが有効になってる!!!

ということです。
知っている人からすれば当たり前かもしれませんが、
Globalでキーマップが設定されていたということです。

私がやるべき設定

  • help において、「q」で閉じる
autocmd MyVimrc FileType help nnoremap <buffer> q :q<CR>

と、このようにきちんと

<buffer>

をつけて、バッファ内でのみ有効にするすべきだった(;´∀`) 反省。

次回は @manga_osyo さんです。

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

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