カーソル下の URL を短縮URL に変換する Vim script 書いた
TweetVim などでツイートする場合、長い URL を短縮する機能が欲しかったので書いてみました。
カーソル下の URL を取得する処理は open-browser.vim のコードを参考にさせて頂きました。
わたしは ftplugin/tweetvim_say.vim に記述して使っています。
[ftplugin/tweetvim_say.vim]
let s:iskeyword = join( \ range(char2nr('A'), char2nr('Z')) \ + range(char2nr('a'), char2nr('z')) \ + range(char2nr('0'), char2nr('9')) \ + [ \ '_', \ ':', \ '/', \ '.', \ '-', \ '+', \ '%', \ '#', \ '?', \ '&', \ '=', \ ';', \ '@', \ '$', \ ',', \ '[', \ ']', \ '!', \ "'", \ "*", \ "~", \], ',') function! s:get_url_on_cursor() "{{{ let save_iskeyword = &iskeyword if &iskeyword !=# s:iskeyword let &iskeyword = s:iskeyword endif try return expand('<cword>') finally if &iskeyword !=# save_iskeyword let &iskeyword = save_iskeyword endif endtry endfunction "}}} function! s:replace_short_url_on_cursor() let url = s:get_url_on_cursor() echo url let short_url = get(bitly#shorten(url), "url", "") if empty(short_url) return endif call setline(getpos(".")[1], substitute(getline("."), url, short_url, "")) endfunction " URL を短縮するマッピング nnoremap <buffer> <C-x><C-d> :call <SID>replace_short_url_on_cursor()<CR>
マッピングなどは好みに合わせて適当に。
カーソル下の URL ではなくて、カーソル行の URL なのがミソ。
なので、カーソル行に複数の URL がある場合は、うまく動作しませんのであしからず。