O comando terminal habitual para acessar a área de transferência no Mac é pbpaste
. No entanto, como isso não funciona para dados de imagem, precisamos recorrer ao 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
Adicione o código acima a ~/.vim/after/ftplugin/markdown.vim
.
Isso salva os dados da área de transferência no arquivo "img / image1.png" se ele contiver dados PNG. Em seguida, apenas usa o :normal!
botão para inserir o link de remarcação desejado.
Se a área de transferência não contiver dados PNG (ou se não estivermos em um arquivo Markdown), ela executará um pcomando regular .
Se eu estivesse usando isso, eu o arrumaria para oferecer suporte a outros tipos de imagem e deixar o cursor em uma posição mais útil, mas isso funciona bem como uma prova de conceito.
(Eu também usaria um <leader>p
mapeamento como sugerido por Karl Yngve Lervåg - isso parece ser a funcionalidade que eu preferiria chamar especificamente - mas não foi isso que você pediu).
Leitura adicional