vim 是我最常用的編輯器旭贬, 經(jīng)常用它來寫 Markdown 格式的博客呛梆, 既然是寫博客肯定少不了圖片,我使用 SM 作為圖床保存我博客中的圖片犬辰。其實(shí)有很多圖床上傳工具嗦篱,但是我不喜歡在寫博客的時(shí)候來回切換界面,這樣容易打斷思路幌缝。所以就寫了一個(gè)插件直接在 vim 中上傳本地圖片到圖床中灸促,并自動(dòng)插入外鏈。
先看一個(gè)演示:
下面開始詳細(xì)說明如何編寫該工具
接入 SM 的 API
在 SM 首頁(yè)可以找到它提供的一些 API涵卵,這里我只需要用到上傳API即可
在 /usr/local/bin/
下新建文件 sm_picture
#! /usr/bin/ruby
require "json"
re = `curl -s -X POST -F 'smfile=@#{ARGV[0]}' https://sm.ms/api/upload`
puts JSON.parse(re)['data']['url'] + "?filename=#{ARGV[0].split("/").last}"
上傳 API 的 url 是 https://sm.ms/api/upload
浴栽,以 POST 方式提交,需要一個(gè)本地文件名作為參數(shù)轿偎,直接使用 Linux 中自帶的 curl
命令即可典鸡,然后獲取到返回結(jié)果中的圖片鏈接。
然后 sudo chmod +x ./sm_picture
賦予執(zhí)行權(quán)限
腳本寫好以后可以在終端測(cè)試一下是否能夠正確運(yùn)行
編寫 vim 插件
進(jìn)入
~/.vim/plugged/
目錄下坏晦,新建文件夾custom_script/autoload
和custom_script/plugin
萝玷, autoload 下的 vim 腳本會(huì)自動(dòng)加載,plugin 下的腳本則是用來配置一些快捷鍵等操作昆婿。在
custom_script/autoload
下新建sm_picture.vim
文件球碉,打開該文件,編寫下面代碼
function! sm_picture#get_picture_url()
ruby << EOF
class SM
def initialize
@buffer = Vim::Buffer.current
end
def get_current_line
s = @buffer.line # gets the current line
name = s.split("/").last
real_link = `sm_picture #{s}`
real_link = real_link.split(/\n/).last
Vim::Buffer.current.line = "" # sets the current line number
end
end
gem = SM.new
gem.get_current_line
EOF
endfunction
因?yàn)?ruby 處理字符串比較方便挖诸,就使用 vim 給 ruby 提供的接口來進(jìn)行相關(guān)處理汁尺, 首先獲取當(dāng)前行的內(nèi)容,然后調(diào)用剛剛編寫的上傳圖片腳本多律,最后把腳本返回值插入到當(dāng)前行痴突。
在 vim 中 執(zhí)行 :h ruby
可以查看 vim 提供給 ruby 的接口搂蜓。
配置快捷鍵
在 custom_script/plugin
下新建 script_config.vim
文件,變下下面代碼
noremap <leader>sm :cal sm_picture#get_picture_url()<cr><Cr>
依次按下 <leader> s m 就會(huì)觸發(fā)這個(gè)腳本辽装。
后記
可以按照如上的方式編寫自己的 vim 插件帮碰, 然后放到自己 github 中, 在 .vimrc
中 添加 Plug 'custom_script'
拾积,以后就可以使用 :PlugInstall
來安裝你的插件了殉挽。 因?yàn)槲沂褂玫氖?Plug 插件管理工具,可以用 :PlugInstall
安裝插件拓巧。其他的插件管理工具則使用對(duì)應(yīng)的安裝方法斯碌。