Welcome to the Power Users community on Codidact!
Power Users is a Q&A site for questions about the usage of computer software and hardware. We are still a small site and would like to grow, so please consider joining our community. We are looking forward to your questions and answers; they are the building blocks of a repository of knowledge we are building together.
How to make selection and overwrite from register all from ex mode
MWE
line 1
line 2
line 3
line 4
line 5
line 6
line 7
- Go to "line 4":
/line 4
ENT
. - Delete into register:
dd
. - Replace everything with register using only ex mode. (Non-ex equivalent:
gg
V
G
p
.)
line 4
Problem
I am uncertain how to proceed with Step 3. I would assume it's something
like :-3,+2v | p
, with relative line numbering, but that doesn't work.
Notes
I understand in this example you can take the approach of deleting everything but line 4, but that's not what I'm looking for. This is just an example, the use case is more complex.
1 answer
The following users marked this post as Works for me:
User | Comment | Date |
---|---|---|
mcp | (no comment) | Nov 17, 2022 at 19:07 |
If you know the normal mode key sequence to achieve the desired result, you can always feed it to the ex-mode normal
command.
Step 3 translates to
:norm ggVGp
See the documentation in :help :norm
,
:norm[al][!] {commands} *:norm* *:normal*
Execute Normal mode commands {commands}. This makes
it possible to execute Normal mode commands typed on
the command-line. {commands} are executed like they
are typed.
You could also combine :d
and :put
,
:%d|pu!2
-
%
is a range that means "all lines". -
d
, short fordelete
, deletes all in that range. -
|
is the command separator. -
pu
, short forput
, inserts text from register2
.
line 4
turns up in register 2 after being displaced from register 1 by the remaining lines deleted by %d
.
That would leave an empty line behind, so a pedantically correct answer would be
:%d|pu!2|$d
0 comment threads