4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

neovimでテンプレートを用意した

Last updated at Posted at 2017-10-12

はじまり

研究室に所属してから、emacsを習い…vimに手を出し…vim主軸の生活で基本的な操作に慣れました。その結果、pluginによる補完とかに興味を持ったので、pluginを管理する上でneobundleを扱うか、neovimに移行して、dein.vimを扱うかでneovimを選びました。

日々新しいプログラムを書き続けているわけではないものの、基本的情報が含まれたテンプレートってやっぱ便利そうじゃないですか。あと、スマートさを感じます。

そんなモチベーションでneovimでテンプレート読み込みをできるようにしました。

neovimdein.vimについて

記事を書いてる方がたくさんいらっしゃるので、そちらをご参照ください。私は以下の記事などを参照しながら、設定しました。

thinca/vim-templateを使う

自作の環境設定を投稿されている方は多くて、いろいろ拝見させていただいたのですが、pluginを用いるのが初心者にはわかりやすいかなと思って、thinca/vim-templateを使用することにしました。

とりあえず、dein.tomlにどう書けばいいのかで、vim-template/doc/template.jaxとにらめっこした結果、動作するようになったのが以下の通りです。

dein.toml
[[plugins]]
repo = 'thinca/vim-template'
hook_add = '''
let g:template_basedir = '~/.config'
let g:template_free_pattern = 'template'
'''

neovimの設定ファイル置き場である.configは以下のような構造にしています。templateディレクトリ下にtemplate.*と命名して置いておけば、空ファイルを読み込む際にテンプレートで開いてくれます。私はC言語、python、texのテンプレートを用意してます。

tree
~/.config
  ├── dein
  │   ├── clang.toml
  │   ├── dein.toml
  │   └── dein_lazy.toml
  ├── nvim
  |   └── init.vim
  └── template
      ├── template.c
      ├── template.py
      └── template.tex

テンプレートを書いてみる

pythonのテンプレートを例に説明していきます。

template.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# FileName: 	<+FILENAME+>
# CreatedDate:  <+DATE+>
#

<+CURSOR+>

まだ、python初心者なこともあって、importはテンプレートに書いていません。個人的に、ファイル名とファイル作成日は欲しいなぁと思っていたので、そうなるように書いてあります。

https://github.com/thinca/vim-template/blob/master/doc/template.jax
の記載そのままですが、以下のようにinit.vimに書いておくと、<+FILENAME+>,<+DATE+>,<+CURSOR+>を変換してくれます。

init.vim
" テンプレート中に含まれる文字を置き換える
autocmd MyAutoCmd User plugin-template-loaded call s:template_keywords()
function! s:template_keywords()
    silent! %s/<+DATE+>/\=strftime('%Y-%m-%d %T')/g
    silent! %s/<+FILENAME+>/\=expand('%:r')/g
endfunction
" テンプレート中に含まれる'<+CURSOR+>'にカーソルを移動
autocmd MyAutoCmd User plugin-template-loaded
    \   if search('<+CURSOR+>')
    \ |   silent! execute 'normal! "_da>'
    \ | endif
  • <+FILENAME+>
    拡張子抜きでファイル名が置換されます。
  • <+DATE+>
    テンプレートを読み込んだ時にイベントが発生するので、<+DATE+>にファイル作成日が置換されます。気が向いた時に:wで最終更新日も記入されるようにしたいものですね。
  • <+CURSOR+>
    カーソルの位置が移動されて、展開されます。このカーソル位置が指定できるのは、C言語やtexの時、恩恵を感じました。

template sample

参考になるかはわからないですが、一応晒します。
C言語

template.c
//
// FileName:       <+FILENAME+>
// CreatedDate:    <+DATE+>
//

#include <stdio.h>

int main(void){
        <+CURSOR+>
        return 0;
}

tex

template.tex
%
% FileName:     <+FILENAME+>
% CreatedDate:  <+DATE+>
%

\documentclass{jsarticle}
\title{<+CURSOR+>}
\author{your name}
\date{\today}

\begin{document}
\maketitle

\end{document}

2017/10/13追記

neovimの起動速度の高速化を試みていたところで気づいたのですが、init.vimに記載するように書いたautocmdは以下のようにdein.tomlに記載すればよかったですね。

dein.toml
[[plugins]]
repo = 'thinca/vim-template'
hook_add = '''
let g:template_basedir = '~/.config'
let g:template_free_pattern = 'template'
" テンプレート中に含まれる文字を置き換える
au MyAutoCmd User plugin-template-loaded call s:template_keywords()
function! s:template_keywords()
    silent! %s/<+DATE+>/\=strftime('%Y-%m-%d %T')/g
    silent! %s/<+FILENAME+>/\=expand('%:r')/g
endfunction
" テンプレート中に含まれる'<+CURSOR+>'にカーソルを移動
au MyAutoCmd User plugin-template-loaded
    \   if search('<+CURSOR+>')
    \ |   silent! execute 'normal! "_da>'
    \ | endif
'''

参照元

neovim
dein.vim
NeoVim と dein.vim を使ってみる!
NeoVim、そしてdein.vimへ
thinca/vim-template

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?