読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

vimでコードスペニットを快適に利用する方法

Vim

ソフトウェアデザイン 2016年 05 月号 [雑誌]

ソフトウェアデザイン 2016年 05 月号 [雑誌]

目次

はじめに

色んな言語のコードを書いていると、

その言語の基礎的な文法を忘れてしまったりして、

おもむろに過去のコードをgrepしたり、

ネットで調べたりすることはよくあると思います。

 

また、良く使うコードの雛形を事前に作っておいて、

それをコピペすることも、生産性を向上させるのに重要かと思います。

 

上記のような、基礎的文法のコードや、よく使うコードの雛形のことを

snippetと言うらしいのですが、

下記のvimプラグインを使うと、

よく使うコードのスニペットを爆速で記入できるようになるので、

共有したいと思います。

github.com

github.com

github.com

 

インストール方法

vimでスニペット管理をする場合、

下記の3つのプラグインを利用すると便利です。

  • neocomplcache: vimの補完プラグイン

github.com

  • neosnippet: vimのスニペット管理プラグイン

github.com

  • neosnippet-snippets: neosinippetのデフォルトスニペット定義ファイル

github.com

 

Neobundleを使って、プラグインを管理している場合は、

下記のコマンドをvimrcに追加すればインストールできます。

NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'Shougo/neosnippet-snippets'

 

:NeoBundleInstallを忘れないようにしましょう。   

設定

neosnnippetのREADMEにある

デフォルトの設定をvimrcに書くと、

設定は完了です。

" Plugin key-mappings.
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)

" SuperTab like snippets behavior.
"imap <expr><TAB>
" \ pumvisible() ? "\<C-n>" :
" \ neosnippet#expandable_or_jumpable() ?
" \    "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"

" For conceal markers.
if has('conceal')
  set conceallevel=2 concealcursor=niv
endif

"set snippet file dir
let g:neosnippet#snippets_directory='~/.vim/bundle/neosnippet-snippets/snippets/,~/.vim/snippets'

最後の行はREADMEにはありませんが、

上記のようにsnippetのファイルのディレクトリを指定することで、

スニペットを利用することができます。

最初のディレクトリはneosnippe-snippetsをインストールすると、

自動で作成されるデフォルトのスニペットで、

二つ目のスニペットは自分独自のスニペット管理用のディレクトリです。

 

使い方

上記の設定を実施すれば、

あとはスニペットの名前をvimのインサートモードで入力すると、

下記のようにスニペットの一覧が表示されるので、

f:id:meison_amsl:20160628171654p:plain

入力したいスニペットを選んでCtrl+kを押すと、

そのスニペットの中身が入力されます。

f:id:meison_amsl:20160628171719p:plain

また、スニペットファイルに

${1}などと書いてある部分に関しては、

スニペット入力後に、更にCtrl+kを押すと、

その部分に移動し、cwで即座に変更することができます。

 

独自スニペットを設定する

デフォルトのスニペットファイルにも沢山

便利なスニペットが設定されていますが、

やはりvimユーザであれば独自のスニペットを作りたくなります。

 

neosnippetの場合、

独自スニペットを作りたい言語のファイルをvimで開いた状態で、

:NeoSnippetEdit

コマンドを入力すると、

自動でそのファイルタイプのスニペットファイルを作成してくれます。

(前述の設定を実施した場合、~/.vim/snippetsの下に

新しいスニペットファイルが生成されます)

 

あとは、

~/.vim/bundle/neosnippet-snippets/snippets/

の下のスニペットファイルをまねて独自スニペットを入力すれば、

そのスニペットを利用することができます。

 

下記で自分が作成したおすすめ独自スニペットを紹介します。

元のスニペットファイルは

下記でも公開しているので参照下さい。

github.com

 

Pythonおすすめ独自スニペット

自分が設定している

Python用おすすめ独自スニペットを紹介します。

1. 一番初めのpythonスクリプトの雛形を作るスニペット

新しいPythonファイルを作った時に、

このスニペットを使って、

一番はじめに必要なコードを一気に入力しています。

snippet     initialscript
abbr        #! /usr/bin/python 
options     head
  #! /usr/bin/python 
  # -*- coding: utf-8 -*- 
  u""" 
  ${1}

  author Atsushi Sakai
  """

    if __name__ == '__main__':
        ${0:pass}

C++おすすめ独自スニペット

続いて、自分が設定している

C++用おすすめ独自スニペットを紹介します。

1. ヘッダライブラリの雛形を作るスニペット

ヘッダファイルのみで構成される

クラスライブラリを作成する場合のスニペットです。

vim scriptを使って、

ファイル名をクラス名に自動変換しています。

snippet     headerlib
abbr        * @file .h
options     head
    /** 
     * @file `expand("%:r")`.h
     * @brief 
     * @author Atsushi Sakai
     */
    #pragma once
     
    /** 
     * @brief 
     */
    class `expand("%:r")`{
      public:
        `expand("%:r")`(){}
     
        //~~~~~~functions~~~~~~~
     
      private:
     
        //~~~~~~Struct/Enum~~~~~~
     
        //~~~~~~Members~~~~~
     
        //~~~~~~functions~~~~~~~
     
};

   

最後に

一度設定したら、

非常に便利になりました。

名前は知っていたのですが、

なぜ今まで設定していなかったのか。。。

 

参考資料

qiita.com

gg-hogehoge.hatenablog.com

d.hatena.ne.jp

dackdive.hateblo.jp

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com