vim|編集中にテンプレートを呼び出す機能を実装~fzf,tmux~

vim
田中太郎
田中太郎

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で使えるテンプレート呼び出し機能を作成しました

コメント

タイトルとURLをコピーしました