Der übliche Terminalbefehl für den Zugriff auf die Zwischenablage auf dem Mac lautet pbpaste
. Dies funktioniert jedoch nicht für Bilddaten, daher müssen wir auf AppleScript zurückgreifen:
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
Fügen Sie den obigen Code zu hinzu ~/.vim/after/ftplugin/markdown.vim
.
Dadurch werden die Zwischenablagedaten in der Datei "img / image1.png" gespeichert, wenn sie PNG-Daten enthalten. Es wird dann nur das verwendet :normal!
, um den gewünschten Markdown-Link einzufügen.
Wenn die Zwischenablage keine PNG-Daten enthält (oder wenn wir uns nicht in einer Markdown-Datei befinden), führt sie einen regulären pBefehl aus.
Wenn ich dies verwenden würde, würde ich es aufräumen, um weitere Bildtypen zu unterstützen und den Cursor an einer hilfreicheren Position zu belassen, aber dies funktioniert gut als Proof of Concept.
(Ich würde auch ein <leader>p
Mapping verwenden, wie von Karl Yngve Lervåg vorgeschlagen - dies scheint eine Funktionalität zu sein, die ich lieber speziell aufrufen würde - aber das haben Sie nicht verlangt).
Weiterführende Literatur