How can I delete multiple lines in vi?

后端 未结 11 1132
天命终不由人
天命终不由人 2021-01-29 20:53

I have tried to follow the following:

How to delete selected text in VI editor

but

5dd

gives

E492: Not a

相关标签:
11条回答
  • 2021-01-29 21:36

    d5d "cuts" five lines

    I usually just throw the number in the middle like:

    d7l = delete 7 letters

    0 讨论(0)
  • 2021-01-29 21:39

    it is dxd, not ddx

    if you want to delete 5 lines, cursor to the beginning of the first line to delete and d5d

    0 讨论(0)
  • 2021-01-29 21:40

    If you prefer a non-visual mode method and acknowledge the line numbers, I would like to suggest you an another straightforward way.

    Example

    I want to delete text from line 45 to line 101.

    My method suggests you to type a below command in command-mode:

    45Gd101G
    

    It reads:

    Go to line 45 (45G) then delete text (d) from the current line to the line 101 (101G).

    Note that on vim you might use gg in stead of G.

    Compare to the @Bonnie Varghese's answer which is:

    :45,101d[enter]
    

    The command above from his answer requires 9 times typing including enter, where my answer require 8 - 10 times typing. Thus, a speed of my method is comparable.

    Personally, I myself prefer 45Gd101G over :45,101d because I like to stick to the syntax of the vi's command, in this case is:

    +---------+----------+--------------------+
    | syntax  | <motion> | <operator><motion> |
    +---------+----------+--------------------+
    | command |   45G    |        d101G       |
    +---------+----------+--------------------+
    
    0 讨论(0)
  • 2021-01-29 21:40

    To delete all the lines use - ESC gg dG To delete few lines lets say 5 then use ESC 5dd

    0 讨论(0)
  • 2021-01-29 21:43

    Commands listed for use in normal mode (prefix with : for command mode).
    Tested in Vim.

    By line amount:

    • numdd - will delete num lines DOWN starting count from current cursor position (e.g. 5dd will delete current line and 4 lines under it => deletes current line and (num-1) lines under it)
    • numdk - will delete num lines UP from current line and current line itself (e.g. 3dk will delete current line and 3 lines above it => deletes current line and num lines above it)

    By line numbers:

    • dnumG - will delete lines from current line (inclusive) UP to line number num (inclusive) (e.g. if cursor is currently on line 5 d2G will delete lines 2-5 inclusive)
    • dnumgg - will delete lines from current line (inclusive) DOWN to the line number num (inclusive) (e.g. if cursor is currently on line 2 d6gg will delete lines 2-6 inclusive)
    • (command mode only) :num1,num2d - will delete lines line number num1 (inclusive) DOWN to the line number num2 (inclusive). Note: if num1 is greater than num2 — vim will react with Backwards range given, OK to swap (y/n)?
    0 讨论(0)
提交回复
热议问题