On Thu, 15 Jun 2006, Sylvain wrote: [snip]
I'm using setline() function to replace the line..so I will delete it before I add mine, it's not very elegant so if anyone has a better way, I will take it also :-)
[snip]
I modified Vimtip#329 some time ago to be able to swap visual highlighted words. I also modified it into a function form because it got long. The code below has an advantage over tip#329 in that it does not pollute the search history. In addition, it also works for swapping words on different lines. It does, however, clobber marks 'y & 'z for positioning purposes. You can code around this if you want. === "tested for GVim 6.3 & 7.0 "shift word forward/backward nnoremap <silent><A-S-Left> "_yiw:cal ShiftWord(0)<CR> nnoremap <silent><A-S-Right> "_yiw:cal ShiftWord(1)<CR> vnoremap <silent><A-S-Left> <Esc><S-Left><S-Left>:cal ShiftWord(2)<CR>myf<C-a>a<BS><Esc>mzgvg`zog`y vnoremap <silent><A-S-Right> <Esc><S-Right><S-Right>:cal ShiftWord(3)<CR>"_xmyf<C-a>a<BS><Esc>mzgvg`yog`z function! ShiftWord(...) let delimiter = "\<C-a>" if a:1 == 0 let @/ = '\w\+\_W\+\%#' execute "normal! ?\<CR>" let @/ = '\%#\(\w\+\)\(\_W\+\)\(\w\+\)' silent! s//\3\2\1 execute "normal! \<C-o>" elseif a:1 == 1 let @/ = '\%#\(\w\+\)\(\_W\+\)\(\w\+\)' silent! s//\3\2\1 execute "normal! \<C-o>" let @/ = '\%#\w\+\_W\+\zs' execute "normal! /\<CR>" elseif a:1 == 2 let t_paste = &paste set paste execute "normal! g`>a\<C-v>".delimiter execute "normal! g`<i\<C-v>".delimiter let &paste = t_paste let @/ = '\w\+\_W\+\w*\%#' execute "normal! ?\<CR>" let @/ = '\%#\(\w\+\)\(\_W\{-1,}\)\(\w*\)'.delimiter.'\(.\{-1,}'.delimiter.'\)' silent! s//\4\2\3\1 execute "normal! \<C-o>" elseif a:1 == 3 let t_paste = &paste set paste execute "normal! g`>a\<C-v>".delimiter execute "normal! g`<i\<C-v>".delimiter let &paste = t_paste let @/ = '\%#\('.delimiter.'.\{-1,}'.delimiter.'\)\(\w*\)\(\_W\+\)\(\w\+\)' silent! s//\4\2\3\1 execute "normal! \<C-o>" let @/ = '\%#\w\+\_W\+\zs'.delimiter execute "normal! /\<CR>" endif nohlsearch endfunction === HTH :) -- Gerald