Re: Unexpected indentation with :left

Salman Halim <[email protected]>
Newsgroups gmane.editors.vim
Message-ID <CANuxnEdBcSh+_qe4ZQ7mhZvZtV9DcnC+ZsumDvZcZGDnV-XuwQ@mail.gmail.com>
On Wed, Feb 26, 2025 at 7:44 PM Tim Chase <[email protected]> wrote:

>
> The gist of my question/hope was wanting to get the N in
>
>   :left N
>
> to prepend N *indents* (using N tabs if 'noet' and N*shiftwidth if 'et'
> is set)
>
> As it currently stands, with 'et' set, I get N spaces, not N
> 'shiftwidth', and if I have 'noet' set, I get int(N/tabstop) tabs
> followed by mod(N, tabstop) spaces.  E.g.
>
>   :set ts=8 sw=4
>
> with
>
>   :set et
>   :'<,'>left 10
>
> puts 10 spaces at the beginning of each trimmed line.
>
> And without 'et' set:
>
>   :set noet
>   :'<,'>left 10
>
> gives me one tab (8-worth) followed by 2 spaces.
>
> Neither gives me 10 tabstops or 10 shiftwidths which is what I'd
> expected.
>
> -tim
>

This seemed like it might be useful, so I wrote it:

# Different from regular :left in that the indent is taken to be a multiple
of the &shiftwidth setting and not just a number of spaces.
export def g:LeftIndentLines( line1: number, line2: number, indent: string )
  var indentSize: number = indent == '' ? 0 : str2nr( indent )

  if ( indentSize > 0 )
    # Replace existing indent with the number of spaces required
    execute $':{line1},{line2}s/^\s*/{repeat(" ", indentSize *
&shiftwidth)}'

    # Use retab to insert tabs if tab-based indentation is enabled3
    execute $':{line1},{line2}retab!'
  else
    execute $':{line1},{line2}left'
  endif
enddef
com! -nargs=? -range Left g:LeftIndentLines( <line1>, <line2>, <q-args> )

Call just like the regular :left, except with :Left. Takes a range and an
indent (default is 0, just like regular :left). The only difference between
this and the built in version is that the number passed to this is seen as
a multiple of the shiftwidth instead of an absolute number of spaces. It
will also call `retab!` to convert indents to tabs as needed.

-- 
-- 
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 [email protected].
To view this discussion visit https://groups.google.com/d/msgid/vim_use/CANuxnEdBcSh%2B_qe4ZQ7mhZvZtV9DcnC%2BZsumDvZcZGDnV-XuwQ%40mail.gmail.com.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.