Lệnh terminal thông thường để truy cập clipboard trên Mac là pbpaste
. Tuy nhiên, điều này không hoạt động đối với dữ liệu hình ảnh, vì vậy chúng tôi phải sử dụng 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
Thêm mã ở trên vào ~/.vim/after/ftplugin/markdown.vim
.
Điều này sẽ lưu dữ liệu clipboard vào tệp "img / image1.png" nếu nó chứa dữ liệu PNG. Sau đó, nó chỉ sử dụng :normal!
để chèn liên kết đánh dấu mong muốn.
Nếu bảng tạm không chứa dữ liệu PNG (hoặc nếu chúng tôi không có trong tệp Markdown), nó sẽ thực hiện một plệnh thông thường .
Nếu tôi đang sử dụng điều này, tôi sẽ thu dọn nó để hỗ trợ các loại hình ảnh khác và để con trỏ ở vị trí hữu ích hơn, nhưng điều này hoạt động tốt như một bằng chứng về khái niệm.
(Tôi cũng sử dụng <leader>p
bản đồ theo đề xuất của Karl Yngve Lervåg - đây có vẻ như là chức năng tôi muốn gọi cụ thể hơn - nhưng đó không phải là những gì bạn yêu cầu).
đọc thêm