On Tue, 29 Mar 2011, Steve wrote:

Le 29-03-2011, à 02:50:47 -0400, Benjamin R. Haskell a écrit :

Does those two mappings help you?

:imap <expr> " getline('.')[col('.')-2]=~'\S' ?  ' »' : '« '
:imap <expr> ' getline('.')[col('.')-2]=~'\S' ?  ' »' : '« '

[...]

[...]

I gave it a try, and it works. But:

- I need to press <"> before typing the work and <'> at the end of the word, not very convenient if I have to go through a file to correct it (in normal mode for instance).

Yes, this solution is not meant for post-processing.


- I can not use those two keys anymore (I had to select from visual mode what you had written, yank it, and then paste it in order to write them in this message).

That's what I meant with "You might want a toggle".

E.g.:

==> ~/.vim/plugin/guillemets-toggle.vim <==
let s:mapped = 0
fun! ToggleGuillemets()
        if s:mapped
                iunmap "
                iunmap '
        else
                imap <expr> " getline('.')[col('.')-2]=~'\S' ?  ' »' : '« '
                imap <expr> ' getline('.')[col('.')-2]=~'\S' ?  ' »' : '« '
        endif
        let s:mapped = 1 - s:mapped
endfun
nmap <F10> :call ToggleGuillemets()<CR>
imap <F10> <C-\><C-O>:call ToggleGuillemets()<CR>
===========================================

Then <F10> toggles the mappings on or off.


- it would be easier to place the cursor under a word (or visual select several words) and then hit a key to achieve my goal).

You might want something like:

nnoremap <Leader>gu "adi"hc2l«<Char-0xa0><Esc>"apa<Char-0xa0>»<Esc>

It'll work inside a quoted string. Basic idea is to yank out the text from between two double quotes, using Vim's text objects. Then change the quotes themselves into «(nbsp)text(nbsp)»

Fully broken down:
nnoremap <Leader>gu "adi"hc2l«<Char-0xa0><Esc>"apa<Char-0xa0>»<Esc>
nnoremap - normal mode mapping, but don't map things on the rhs
         <Leader>gu - choose a key binding
                    "a - use register 'a'
                      d - delete
                       i" - inner quote
                         h - move left one char
                          c2l - change 2 letters
                             « - guillemet
                              <Char-0xa0> - alternate way to enter nbsp
                                         <Esc> - exit insert mode
                                              "a - use register 'a'
                                                p - put text after cursor
                                                 a - append
                                                  <Char-0xa0> - another nbsp
                                                             » - closing 
guillemet
                                                              <Esc> - and finish

And, since email will probably ruin the vertical alignment:
nnoremap    - normal mode mapping, but don't map things on the rhs
<Leader>gu  - choose a key binding
"a          - use register 'a'
d           - delete
i"          - inner quote
h           - move left one char
c2l - change 2 letters « - guillemet
<Char-0xa0> - alternate way to enter nbsp
<Esc>       - exit insert mode
"a          - use register 'a'
p           - put text after cursor
a           - append
<Char-0xa0> - another nbsp
»           - closing guillemet
<Esc>       - and finish

Most of those pieces should be :help-able.  (e.g.:
:help h
:help d
)



I see that Christian answered too, so I will (can not write single quote anymore ;-)) go through his message and come back later.

He had better :h[elp] references.


Thanks for your reply Ben, very informative. The more I learn vim, the more I understand how far I am from mastering it (did not Einstein say something like that?)

Practice practice practice. One of the most important things is to learn how to use the :help system. Vim's built-in :help is extremely useful and comprehensive.

--
Best,
Ben

--
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

Reply via email to