Sunday, February 28, 2016

Re: Replace c cast to c++ style cast

Hi Jorge,

> Luc, I did install your library but the mapping provided ,,sc didn't
> do anything for me.

You have to select the C cast expression before hitting ,,sc. Depending on your leaderleader, it could be something else.

> I did have an error when entering a c++ buffer after loading the
> plugin with VAM, something like:
>
> line 39:
> E227: mapping already exists for <80><fc>^D

Unfortunately, I have to idea which key <80><fc> refers to. It's line 39 from which file? Once you identify it you should be able to provide another keybinding in your .vimrc (or may be in a ftplugin with higher priority)


> I am not sure this is the reason I cannot use the mapping provided in
> your plugin.
>
>
> I did write a function and mapping that for now should suit my needs:

It could be simpler:

" From ftplugin/cpp/cpp_snippets.vim
vnoremap <silent> <buffer> <LocalLeader><LocalLeader>sc
\ <c-\><c-n>:'<,'>call <sid>ConvertToCPPCast('static_cast')<cr>
nmap <silent> <buffer> <LocalLeader><LocalLeader>sc viw<LocalLeader><LocalLeader>sc


function! s:ConvertToCPPCast(cast_type) abort
" Extract text to convert
let save_a = @a
silent normal! gv"ay
" Strip the possible brackets around the expression
" matchlist seems to cause an odd error on multiline C cast expressions: it
" have the fucntion called again.
let [all, type, expr ; tail] = matchlist(@a, '\v^\(\_s*(.{-})\_s*\)\_s*(.{-})\_s*$')
let expr = substitute(expr, '\v^\(\s*(.{-})\s*\)$', '\1', '')
"
" Build the C++-casting from the C casting
let new_cast = a:cast_type.'<'.type.'>('.expr.')'
" Do the replacement
silent exe "normal! gvs".new_cast."\<esc>"
let @a = save_a
endfunction


--
Luc Hermitte

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: