Re: Align one line to another

2011-08-15 Thread Ben Fritz


On Aug 14, 11:42 am, Tim Johnson t...@johnsons-web.com wrote:
 I'd like to find a way to align one or more lines with the same
 indentation as (say) the previous line:
 Example :
     Main entry point for this module.
 Process all.
 Delete all.
 To
     Main entry point for this module.
     Process all.
     Delete all.
 I'm looking at a 'Quick reference Card' 
 athttp://tnerual.eriogerg.free.fr/vimqrc.htmland
 under
 'Advanced insertion'
 are some clues, but blush I am unable to decipher them.
 thanks

What about:

:set autoindent
(visually select area including lines you wish to indent, NOT the line
whose indent you wish to match)
=

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


Re: Align one line to another

2011-08-15 Thread Tim Johnson
* Ben Fritz fritzophre...@gmail.com [110815 08:41]:
 On Aug 14, 11:42 am, Tim Johnson t...@johnsons-web.com wrote:
  I'd like to find a way to align one or more lines with the same
  indentation as (say) the previous line:
  Example :
      Main entry point for this module.
  Process all.
  Delete all.
  To
      Main entry point for this module.
      Process all.
      Delete all.
  I'm looking at a 'Quick reference Card' 
  athttp://tnerual.eriogerg.free.fr/vimqrc.htmland
  under
  'Advanced insertion'
  are some clues, but blush I am unable to decipher them.
  thanks
 
 What about:
 
 :set autoindent
 (visually select area including lines you wish to indent, NOT the line
 whose indent you wish to match)
  `autoindent' has always been set on my configuration. I think Tim
  Chase gave a good tip for 'non-tab' indenting
  thanks Ben
-- 
Tim 
tim at johnsons-web dot com or akwebsoft dot com
http://www.akwebsoft.com

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


Re: Align one line to another

2011-08-14 Thread Tim Chase

On 08/14/2011 11:42 AM, Tim Johnson wrote:

I'd like to find a way to align one or more lines with the same
indentation as (say) the previous line:
Example :
 Main entry point for this module.
Process all.
Delete all.
To
 Main entry point for this module.
 Process all.
 Delete all.


There are lots of ways to do this, so I'll toss a couple out 
there and you can pick  choose depending on your needs.


The first  easiest (assuming the first/previous line is an 
even multiple of 'shiftwidth' and corresponds to your 'expandtab' 
settings) is to just use the  or  commands to shift over 
the range.  In the above example, I'd select the 2nd  3rd lines 
and hit  to shift them right one.  If I needed multiple shifts 
to get them into position, I'd then hit . (period) to repeat 
the shift until they're in place.


If the 1st/previous line's leading whitespace *isn't* a 
multiple of 'sw', making the previous method less helpful, then 
I'd consider using visual-block mode to select the left-hand 
column of the stuff to indent and then hit I (capital-eye) to 
insert at the beginning of the block.  Put in the expected/proper 
indentation, and then hit esc which will put that indentation 
on all the lines.  If the indentation of the 1st/previous line 
is a bit crazy (say, a sick mixture of tabs/spaces), then you 
could copy that indentation from the first line and then after 
hitting I in visual-block-mode, use control+R followed by a 
double-quote to insert the crazy indentation.


Both of those are somewhat manual. If you want to create a 
mapping, you could do something like


  :vnoremap f4 :'+1,'s/^\s*/\=matchstr(getline('), 
'^\s*')cr


which would allow you to visually select the lines in question. 
The mapping will then sniff the indentation of the first line you 
selected and then apply it to all the lines afterward.


Finally, if you have oodles of these in your file and you don't 
want to visually select each piece manually, you can break out 
the nuclear option...something like


 :g/^\s*/ka|+,//s/^\s*/\=matchstr(getline('a), '^\s*')

(this burns the a mark, so adjust the ka and 'a accordingly 
if you don't want to tromp them) which will search for every line 
beginning with three double-quotes (with optionally leading 
whitespace) and then adjust from the following line (+) through 
the next match of three double-quotes and pull down the 
indentation from the first/previous line.  If you don't want to 
burn ANY marks, it might be doable with


:g/^\s*/+,//s/^\s*/\=matchstr(getline(line('.')-1), '^\s*')

So there you have a whole mess of options depending on the time, 
energy, and enormity of the task at hand. :)  Hope it helps,


-tim




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


Re: Align one line to another

2011-08-14 Thread Tim Johnson
* Tim Chase v...@tim.thechases.com [110814 11:36]:
 On 08/14/2011 11:42 AM, Tim Johnson wrote:
 
 There are lots of ways to do this, so I'll toss a couple out there
 and you can pick  choose depending on your needs.
 
 The first  easiest (assuming the first/previous line is an even
 multiple of 'shiftwidth' and corresponds to your 'expandtab'
 settings) is to just use the  or  commands to shift over the
 range.  In the above example, I'd select the 2nd  3rd lines and hit
  to shift them right one.  If I needed multiple shifts to get
 them into position, I'd then hit . (period) to repeat the shift
 until they're in place.
 I use this method all the time... 
 If the 1st/previous line's leading whitespace *isn't* a multiple
 of 'sw', making the previous method less helpful, then I'd consider
 using visual-block mode to select the left-hand column of the stuff
 to indent and then hit I (capital-eye) to insert at the beginning
 of the block.  Put in the expected/proper indentation, and then hit
 esc which will put that indentation on all the lines.  If the
 indentation of the 1st/previous line is a bit crazy (say, a sick
 mixture of tabs/spaces), then you could copy that indentation from
 the first line and then after hitting I in visual-block-mode, use
 control+R followed by a double-quote to insert the crazy
 indentation.
 
 Both of those are somewhat manual. If you want to create a mapping,
 you could do something like
 
   :vnoremap f4 :'+1,'s/^\s*/\=matchstr(getline('),
 '^\s*')cr
 
 which would allow you to visually select the lines in question. The
 mapping will then sniff the indentation of the first line you
 selected and then apply it to all the lines afterward.
 
 Finally, if you have oodles of these in your file and you don't want
 to visually select each piece manually, you can break out the
 nuclear option...something like
 
  :g/^\s*/ka|+,//s/^\s*/\=matchstr(getline('a), '^\s*')
 
 (this burns the a mark, so adjust the ka and 'a accordingly if
 you don't want to tromp them) which will search for every line
 beginning with three double-quotes (with optionally leading
 whitespace) and then adjust from the following line (+) through
 the next match of three double-quotes and pull down the indentation
 from the first/previous line.  If you don't want to burn ANY
 marks, it might be doable with
 
 :g/^\s*/+,//s/^\s*/\=matchstr(getline(line('.')-1), '^\s*')
 
 So there you have a whole mess of options depending on the time,
 energy, and enormity of the task at hand. :)  Hope it helps,
  It sure does. These instructions above open all kinds of
  possibilities.
  Thanks very much

-- 
Tim 
tim at johnsons-web dot com or akwebsoft dot com
http://www.akwebsoft.com

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