function GetVisualText() let p0 = getpos('''<') let p1 = getpos('''>') if p0[1] == p1[1] return getline(p0[1])[ p0[2] - 1 : p1[2] - 1 ] else return join([ getline(p0[1])[ p0[2] - 1 : ] ] + getline(p0[1] + 1, p1[1] - 1) + \ [ getline(p1[1])[ : p1[2] - 1 ] ] , "\n") endif endfunction
Haskell mode for Vim - ボクノスのs:GetSelect()
function! x:selected_text(...) let [visual_p, pos] = [mode() =~# "[vV\<C-v>]", getpos('.')] let [r_, r_t] = [@@, getregtype('"')] let [r0, r0t] = [@0, getregtype('0')] if visual_p execute "normal! \<Esc>" endif silent normal! gvy let [_, _t] = [@@, getregtype('"')] call setreg('"', r_, r_t) call setreg('0', r0, r0t) if visual_p normal! gv else call setpos('.', pos) endif return a:0 && a:1 ? [_, _t] : _ endfunction