はじまり
研究室に所属してから、emacsを習い…vimに手を出し…vim主軸の生活で基本的な操作に慣れました。その結果、pluginによる補完とかに興味を持ったので、pluginを管理する上でneobundleを扱うか、neovimに移行して、dein.vimを扱うかでneovimを選びました。
日々新しいプログラムを書き続けているわけではないものの、基本的情報が含まれたテンプレートってやっぱ便利そうじゃないですか。あと、スマートさを感じます。
そんなモチベーションでneovimでテンプレート読み込みをできるようにしました。
neovimとdein.vimについて
記事を書いてる方がたくさんいらっしゃるので、そちらをご参照ください。私は以下の記事などを参照しながら、設定しました。
thinca/vim-template
を使う
自作の環境設定を投稿されている方は多くて、いろいろ拝見させていただいたのですが、pluginを用いるのが初心者にはわかりやすいかなと思って、thinca/vim-templateを使用することにしました。
とりあえず、dein.toml
にどう書けばいいのかで、vim-template/doc/template.jaxとにらめっこした結果、動作するようになったのが以下の通りです。
[[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のテンプレートを用意してます。
~/.config
├── dein
│ ├── clang.toml
│ ├── dein.toml
│ └── dein_lazy.toml
├── nvim
| └── init.vim
└── template
├── template.c
├── template.py
└── template.tex
テンプレートを書いてみる
pythonのテンプレートを例に説明していきます。
#!/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+>
を変換してくれます。
" テンプレート中に含まれる文字を置き換える
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言語
//
// FileName: <+FILENAME+>
// CreatedDate: <+DATE+>
//
#include <stdio.h>
int main(void){
<+CURSOR+>
return 0;
}
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
に記載すればよかったですね。
[[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