ファイル名を手で入力している人
私です。
普段コーディングをしている時、モジュール化したファイルを読み込むためにそのファイル名を記述する事があるかと思います。「いい方法があるんだろうなー」と思いつつも、ついファイル名を素手で入力してしまいます。
しかしVimmerたるもの常に効率化のことを考えなくてはならないので、ファイル名を一々入力している方は断固改善すべきです。今回はファイル名をクリップボード及び無名レジスタにコピーするExコマンドを作りたいと思います。
ファイル名レジスタ
Vimには読み取り専用のファイル名レジスタという特殊なレジスタがあります。これにはカレントバッファのファイル名が格納されています。
また様々な修飾子がありこれらを活用することでファイル名だけでなく、フルパスや相対パスも取得することが可能です。
※下記のVim scriptをコピペすれば動作しますが、レジスタに興味がある方はこちらをご覧下さい。
Vim scriptを書く
ファイル名やパスを入力されることが予想されるExコマンドではタブ補完が有効になるのですが、標準だと挿入モードだとタブを押してもタブが入力されるだけで補完されることはありません。
そこで最初に述べた通りファイル名をクリップボード及び無名レジスタにコピーするExコマンドを作ります。Vimスクリプトの作り方が全く分からない方はこちらをご参考下さい。
早速ですがVim scriptは下記の通りです。
command! FileName :call s:FileName()
function! s:FileName()
let @* = expand('%:t')
let @" = expand('%:t')
endfunction
expand()
は変数や特殊キーワードを展開するVimに組み込まれている関数です。引数にファイル名レジスタとファイル名のみを切り取る修飾子を渡しています。
そして返り値をクリップボードレジスタと無名レジスタに代入するという内容です。
※クリップボードへのコピーに関してはVim本体のクリップボード連携が完了している必要があります。
フルパス
もうお気づきかと思いますが先程のVim scriptをフルパスを取得する修飾子に変えれば、フルパスを取得出来ます。
command! FileNameFull :call s:FileNameFull()
function! s:FileNameFull()
let @* = expand('%:p')
let @" = expand('%:p')
endfunction
相対パス
相対パスも同じです。
command! FileNameRelative :call s:FileNameRelative()
function! s:FileNameRelative()
let @* = expand('%:.')
let @" = expand('%:.')
endfunction