田中太郎
fzf, tmuxを使って保存したテンプレートを呼び出す機能を実装します
完成イメージ
vimで編集中に、
tmux popup上で
fzfを起動して
テンプレートを呼び出す機能を実装します
実装
実装環境
・zsh(バージョン:5.5.1)
・fzf (バージョン:0.22.1)
・tmux(バージョン:next-3.3)
注)popupを使うので、3.3以上のバージョンを使用してください
ファイル構成
・/home/vagrant/.vim/templates_for_vim/templates_for_vim.vim
・/home/vagrant/.vim/templates_for_vim/templates_for_vim.zsh
・/home/vagrant/.vim/templates_for_vim/templates/
ファイルの中身
templates_for_vim.vim
function! TEMPLATE(...) abort
:silent r! /home/vagrant/.vim/templates_for_vim/templates_for_vim.zsh
endfunction
function! WTEMPLATE(...) range abort
let inputtext = input("Enter File Name > ")
let str = "/home/vagrant/.vim/templates_for_vim/templates/" . inputtext
if empty(inputtext)
:
else
execute(":silent " . a:firstline . "," . a:lastline . "w " . str)
endif
endfunction
command -nargs=* Template call TEMPLATE(<f-args>)
command -range -nargs=* Wtemplate <line1>,<line2>call WTEMPLATE(<f-args>)
templates_for_vim.zsh
#!/usr/local/bin/zsh
# これらのファイルを入れておくディレクトリを指します
tmp_path="/home/vagrant/.vim/templates_for_vim/"
# tmux popup上でfzfを起動して、選択したファイルのパスを.tmp_fileに保存します
tmux popup -E \
"cd $tmp_path; \
find templates -name '*' -type f \
| fzf --preview 'head -30 {}' --preview-window=up:70% \
> ${tmp_path}/.tmp_file"
# .tmp_fileに保存したファイルのパスを読んで、そのファイルの中身を標準出力します
cat $tmp_path/`cat ${tmp_path}/.tmp_file`
# 使い終わったので削除します
\rm ${tmp_path}/.tmp_file -f
templates/
テンプレートとして保存しておくものを
このディレクトリの下に置いておきます
動作確認
vimrcに以下を追加します
source /home/vagrant/.vim/templates_for_vim/templates_for_vim.vim
vimで適当にファイルを開いて、
「:Template」
を実行します
fzfがtmux popup上で起動します
事前に準備していたテンプレート(テキスト)の一覧が出るので好きなものを選択します
Enterを押すと、テンプレートの中身をファイルに上書きされます
まとめ
fzf, tmuxを使用して、vimで使えるテンプレート呼び出し機能を作成しました
コメント