🐈
CtrlPで選択したパスを挿入
Sphinx で社内に公開しているWebページに掲載するドキュメントを書いていますが画像のパス入力がちょっとメンドクサイ。
画像ファイルは _image
ディレクトリ配下にあるので、 CtrlP でファイルを選択したら挿入してくれるといいのにと思い調べてみました。
g:ctrlp_open_func
でエクステンションごとに実行する関数を指定できるようです。
一時的に :CtrlP
を実行して選択したファイルにプレフィックス、サフィックスを付けてパスを挿入する処理を書いてみました。
~/vimfiles/autoload/vimrc.vim
へ以下のようなコードを追加しています。
call vimrc#CtrlPFilenameInsert('.. image:: ', '')
と実行して _image/img.png を選択すると .. image:: _image/img.png
といった内容がバッファに挿入されます。
~/vimfiles/autoload/vimrc.vim 抜粋
" CtrlP で選択したファイルをバッファに挿入
function! vimrc#CtrlPPasteFunc(action, line) abort
call setreg('9', getreg('7') .. a:line .. getreg('8'))
call ctrlp#exit()
normal! "zp
call setreg('7', s:backreg7)
call setreg('8', s:backreg8)
call setreg('9', s:backreg9)
let g:ctrlp_open_func = {}
endfunction
function! vimrc#CtrlPFilenameInsert(prefix, suffix) abort
let s:backreg7 = getreg('7')
let s:backreg8 = getreg('8')
let s:backreg9 = getreg('9')
call setreg('7', a:prefix)
call setreg('8', a:suffix)
let g:ctrlp_open_func = { 'files': 'vimrc#CtrlPPasteFunc' }
CtrlP
" ここで setreg('7', backreg7) などと書いても駄目。
" CtrlP が非同期で動くため先にレジスタの値が元に戻ってしまう。
endfunction
環境
OS: Windows10
Vim: gVim Release v8.2.3848
ctrlpvim/ctrlp.vim at fc153aabd54f9189e576c9bfb07bac09f36f2ccd
Discussion