Macでクリップボードにアクセスするための通常の端末コマンドはpbpaste
です。ただし、これは画像データでは機能しないため、AppleScriptを使用する必要があります。
nnoremap <silent> <buffer> p :call MarkdownClipboardImage()<cr>
function! MarkdownClipboardImage() abort
" Create `img` directory if it doesn't exist
let img_dir = getcwd() . '/img'
if !isdirectory(img_dir)
silent call mkdir(img_dir)
endif
" First find out what filename to use
let index = 1
let file_path = img_dir . "/image" . index . ".png"
while filereadable(file_path)
let index = index + 1
let file_path = img_dir . "/image" . index . ".png"
endwhile
let clip_command = 'osascript'
let clip_command .= ' -e "set png_data to the clipboard as «class PNGf»"'
let clip_command .= ' -e "set referenceNumber to open for access POSIX path of'
let clip_command .= ' (POSIX file \"' . file_path . '\") with write permission"'
let clip_command .= ' -e "write png_data to referenceNumber"'
silent call system(clip_command)
if v:shell_error == 1
normal! p
else
execute "normal! i[](" . file_path . ")"
endif
endfunction
上記のコードをに追加します~/.vim/after/ftplugin/markdown.vim
。
これにより、PNGデータが含まれている場合、クリップボードデータがファイル「img / image1.png」に保存されます。次に、を使用し:normal!
て目的のマークダウンリンクを挿入します。
クリップボードにPNGデータが含まれていない場合(またはMarkdownファイルに含まれていない場合)、通常のpコマンドが実行されます。
これを使用している場合は、さらに画像タイプをサポートし、カーソルをより役立つ位置に残すために整頓しておきますが、これは概念実証としてうまく機能します。
(私はKarl YngveLervågによって提案された<leader>p
マッピングも使用します —これは私が特に呼び出したい機能のように見えます—しかし、それはあなたが要求したものではありません)。
参考文献
:help :map-<buffer>
:help system()
:help v:shell_error
:help :normal
- AppleScriptドキュメント