vim: delete the first 2 spaces for multiple lines

前端 未结 7 1504
无人及你
无人及你 2020-12-22 18:36

What\'s the easiest way to delete the first 2 spaces for each line using VIM? Basically it\'s repeating \"2x\" for each line.

Clarification: here the assumption is t

相关标签:
7条回答
  • 2020-12-22 19:10

    Assuming a shiftwidth=2, then using shift with a range of %

    :%<
    
    0 讨论(0)
  • 2020-12-22 19:17

    I'd try one of two approaches:

    1. Do column editing on the block to delete using Ctrl+V (often mapped to Ctrl+Q).
    2. Record a macro on the first row using q1 (or any other number/letter you want to denote the recording register), then replay that macro multiple times using @1 (to use my previous example. Even better, use a preceding number to tell it how many times to run - 10@1 to run that macro 10 times, for example. It does, however, depends on what you recorded - make sure to rewind the cursor 0 or drop one line j, if that's relevant.
    0 讨论(0)
  • 2020-12-22 19:21

    You could also use a search and replace (in the ex editor, accessed via the : character):

    Remove first two characters no matter what:

    %s/^.\{2}//
    

    Remove first two white space characters (must be at the beginning and both must be whitespace... any line not matching that criteria will be skipped):

    %s/^\s\{2}//
    
    0 讨论(0)
  • 2020-12-22 19:23

    Two spaces, or two characters? (2x does the latter.)

    :[range]s/^  //
    

    deletes two blanks at the beginning of each line; use % (equivalent to 1,$) as [range] do to this for the entire file.

    :[range]s/^..//
    

    deletes the first two characters of each line, whatever they are. (Note that it deletes two characters, not necessarily two columns; a tab character counts as one character).

    If what you're really doing is changing indentation, you can use the < command to decrease it, or the > command to increase it. Set shiftwidth to control how far it shifts, e.g.

    :set shiftwidth=2
    
    0 讨论(0)
  • 2020-12-22 19:24
    1. Enter visual block mode with Ctrl-V (or Ctrl-Q if you use Ctrl-V for paste);
    2. Select the area to delete with the arrows;
    3. Then press d to delete the selected area.
    4. Press Esc
    0 讨论(0)
  • 2020-12-22 19:33

    Some more options. You can decided which is the "easiest way".

    Remove the first 2 characters of every line:

    :%normal 2x
    

    Remove first 2 characters of every line, only if they're spaces:

    :%s/^  /
    

    Note that the last slash is optional, and is only here so that you can see the two spaces. Without the slash, it's only 7 characters, including the :.

    Move indentation to left for every line:

    :%normal <<
    
    0 讨论(0)
提交回复
热议问题