カーソル下の 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 がある場合は、うまく動作しませんのであしからず。