repeat last command but not write
up vote
2
down vote
favorite
@:
repeats the last colon command I entered, but also seems to include :write
so often I go through this kind of workflow:
:s/foo/bar
:w
Now I go to another line and want to run :s/foo/bar
again, but @:
runs :w
instead.
Can I get @:
to ignore :w
?
command-line
add a comment |
up vote
2
down vote
favorite
@:
repeats the last colon command I entered, but also seems to include :write
so often I go through this kind of workflow:
:s/foo/bar
:w
Now I go to another line and want to run :s/foo/bar
again, but @:
runs :w
instead.
Can I get @:
to ignore :w
?
command-line
IIRC “: is readonly; that said, you might (might) be able to accomplish something with a remapping of@:
by saving the command string in a global var on Enter at command line (but only for : lines, and only if not write (of which there are many variants))
– D. Ben Knoble
2 days ago
Write a function namedExecuteLastNotWrite()
andmap @: :call ExecuteLastNotWrite()<CR>
. In the function get the last entry from the history(histget("cmd", -1)
). If:w
, get the second to last. Then execute the fetched command. See:help histget()
.
– Ralf
2 days ago
1
Do you know that you can repeat the last:s
with&
(current line) and the last:%s
withg&
(run substitute over complete file)?
– Hotschke
2 days ago
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
@:
repeats the last colon command I entered, but also seems to include :write
so often I go through this kind of workflow:
:s/foo/bar
:w
Now I go to another line and want to run :s/foo/bar
again, but @:
runs :w
instead.
Can I get @:
to ignore :w
?
command-line
@:
repeats the last colon command I entered, but also seems to include :write
so often I go through this kind of workflow:
:s/foo/bar
:w
Now I go to another line and want to run :s/foo/bar
again, but @:
runs :w
instead.
Can I get @:
to ignore :w
?
command-line
command-line
asked Nov 27 at 1:38
theonlygusti
300113
300113
IIRC “: is readonly; that said, you might (might) be able to accomplish something with a remapping of@:
by saving the command string in a global var on Enter at command line (but only for : lines, and only if not write (of which there are many variants))
– D. Ben Knoble
2 days ago
Write a function namedExecuteLastNotWrite()
andmap @: :call ExecuteLastNotWrite()<CR>
. In the function get the last entry from the history(histget("cmd", -1)
). If:w
, get the second to last. Then execute the fetched command. See:help histget()
.
– Ralf
2 days ago
1
Do you know that you can repeat the last:s
with&
(current line) and the last:%s
withg&
(run substitute over complete file)?
– Hotschke
2 days ago
add a comment |
IIRC “: is readonly; that said, you might (might) be able to accomplish something with a remapping of@:
by saving the command string in a global var on Enter at command line (but only for : lines, and only if not write (of which there are many variants))
– D. Ben Knoble
2 days ago
Write a function namedExecuteLastNotWrite()
andmap @: :call ExecuteLastNotWrite()<CR>
. In the function get the last entry from the history(histget("cmd", -1)
). If:w
, get the second to last. Then execute the fetched command. See:help histget()
.
– Ralf
2 days ago
1
Do you know that you can repeat the last:s
with&
(current line) and the last:%s
withg&
(run substitute over complete file)?
– Hotschke
2 days ago
IIRC “: is readonly; that said, you might (might) be able to accomplish something with a remapping of
@:
by saving the command string in a global var on Enter at command line (but only for : lines, and only if not write (of which there are many variants))– D. Ben Knoble
2 days ago
IIRC “: is readonly; that said, you might (might) be able to accomplish something with a remapping of
@:
by saving the command string in a global var on Enter at command line (but only for : lines, and only if not write (of which there are many variants))– D. Ben Knoble
2 days ago
Write a function named
ExecuteLastNotWrite()
and map @: :call ExecuteLastNotWrite()<CR>
. In the function get the last entry from the history(histget("cmd", -1)
). If :w
, get the second to last. Then execute the fetched command. See :help histget()
.– Ralf
2 days ago
Write a function named
ExecuteLastNotWrite()
and map @: :call ExecuteLastNotWrite()<CR>
. In the function get the last entry from the history(histget("cmd", -1)
). If :w
, get the second to last. Then execute the fetched command. See :help histget()
.– Ralf
2 days ago
1
1
Do you know that you can repeat the last
:s
with &
(current line) and the last :%s
with g&
(run substitute over complete file)?– Hotschke
2 days ago
Do you know that you can repeat the last
:s
with &
(current line) and the last :%s
with g&
(run substitute over complete file)?– Hotschke
2 days ago
add a comment |
1 Answer
1
active
oldest
votes
up vote
5
down vote
It seems you basically understand correctly: ":
is a readonly register that contains the last executed command. @:
will execute this register. Feel free to read up on this: :help ":
and :help @
.
Further, your issue is that you want to repeat a command but you are issuing a new command in between, :write
, which obviously overwrites ":
. You ask: "Can I get @:
to ignore :w
?". Of course, yes, you can define a new command that uses histget()
and map it to @:
, as is suggested by @Ralf in the comments. However, I will advice that you instead reconsider your own workflow. Instead of changing @:
, try to compose repeatable commands. For instance, instead of
:s/foo/bar
:w
write
:s/foo/bar/e | update
Here I've added the e
flag, which prevents the substitute command from failing if there are no foo
s found. Then I use |
(:help bar
) to add a new command to be executed after, and I use :update
instead of :write
to only write the file if there is a change.
In my opinion, this is a better solution than changing how Vim works.
that's so long to type out every time, and it relies on me knowing that I will want to repeat a substitute in advance
– theonlygusti
yesterday
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
It seems you basically understand correctly: ":
is a readonly register that contains the last executed command. @:
will execute this register. Feel free to read up on this: :help ":
and :help @
.
Further, your issue is that you want to repeat a command but you are issuing a new command in between, :write
, which obviously overwrites ":
. You ask: "Can I get @:
to ignore :w
?". Of course, yes, you can define a new command that uses histget()
and map it to @:
, as is suggested by @Ralf in the comments. However, I will advice that you instead reconsider your own workflow. Instead of changing @:
, try to compose repeatable commands. For instance, instead of
:s/foo/bar
:w
write
:s/foo/bar/e | update
Here I've added the e
flag, which prevents the substitute command from failing if there are no foo
s found. Then I use |
(:help bar
) to add a new command to be executed after, and I use :update
instead of :write
to only write the file if there is a change.
In my opinion, this is a better solution than changing how Vim works.
that's so long to type out every time, and it relies on me knowing that I will want to repeat a substitute in advance
– theonlygusti
yesterday
add a comment |
up vote
5
down vote
It seems you basically understand correctly: ":
is a readonly register that contains the last executed command. @:
will execute this register. Feel free to read up on this: :help ":
and :help @
.
Further, your issue is that you want to repeat a command but you are issuing a new command in between, :write
, which obviously overwrites ":
. You ask: "Can I get @:
to ignore :w
?". Of course, yes, you can define a new command that uses histget()
and map it to @:
, as is suggested by @Ralf in the comments. However, I will advice that you instead reconsider your own workflow. Instead of changing @:
, try to compose repeatable commands. For instance, instead of
:s/foo/bar
:w
write
:s/foo/bar/e | update
Here I've added the e
flag, which prevents the substitute command from failing if there are no foo
s found. Then I use |
(:help bar
) to add a new command to be executed after, and I use :update
instead of :write
to only write the file if there is a change.
In my opinion, this is a better solution than changing how Vim works.
that's so long to type out every time, and it relies on me knowing that I will want to repeat a substitute in advance
– theonlygusti
yesterday
add a comment |
up vote
5
down vote
up vote
5
down vote
It seems you basically understand correctly: ":
is a readonly register that contains the last executed command. @:
will execute this register. Feel free to read up on this: :help ":
and :help @
.
Further, your issue is that you want to repeat a command but you are issuing a new command in between, :write
, which obviously overwrites ":
. You ask: "Can I get @:
to ignore :w
?". Of course, yes, you can define a new command that uses histget()
and map it to @:
, as is suggested by @Ralf in the comments. However, I will advice that you instead reconsider your own workflow. Instead of changing @:
, try to compose repeatable commands. For instance, instead of
:s/foo/bar
:w
write
:s/foo/bar/e | update
Here I've added the e
flag, which prevents the substitute command from failing if there are no foo
s found. Then I use |
(:help bar
) to add a new command to be executed after, and I use :update
instead of :write
to only write the file if there is a change.
In my opinion, this is a better solution than changing how Vim works.
It seems you basically understand correctly: ":
is a readonly register that contains the last executed command. @:
will execute this register. Feel free to read up on this: :help ":
and :help @
.
Further, your issue is that you want to repeat a command but you are issuing a new command in between, :write
, which obviously overwrites ":
. You ask: "Can I get @:
to ignore :w
?". Of course, yes, you can define a new command that uses histget()
and map it to @:
, as is suggested by @Ralf in the comments. However, I will advice that you instead reconsider your own workflow. Instead of changing @:
, try to compose repeatable commands. For instance, instead of
:s/foo/bar
:w
write
:s/foo/bar/e | update
Here I've added the e
flag, which prevents the substitute command from failing if there are no foo
s found. Then I use |
(:help bar
) to add a new command to be executed after, and I use :update
instead of :write
to only write the file if there is a change.
In my opinion, this is a better solution than changing how Vim works.
answered 2 days ago
Karl Yngve Lervåg
6,2571029
6,2571029
that's so long to type out every time, and it relies on me knowing that I will want to repeat a substitute in advance
– theonlygusti
yesterday
add a comment |
that's so long to type out every time, and it relies on me knowing that I will want to repeat a substitute in advance
– theonlygusti
yesterday
that's so long to type out every time, and it relies on me knowing that I will want to repeat a substitute in advance
– theonlygusti
yesterday
that's so long to type out every time, and it relies on me knowing that I will want to repeat a substitute in advance
– theonlygusti
yesterday
add a comment |
Thanks for contributing an answer to Vi and Vim Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fvi.stackexchange.com%2fquestions%2f18078%2frepeat-last-command-but-not-write%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
IIRC “: is readonly; that said, you might (might) be able to accomplish something with a remapping of
@:
by saving the command string in a global var on Enter at command line (but only for : lines, and only if not write (of which there are many variants))– D. Ben Knoble
2 days ago
Write a function named
ExecuteLastNotWrite()
andmap @: :call ExecuteLastNotWrite()<CR>
. In the function get the last entry from the history(histget("cmd", -1)
). If:w
, get the second to last. Then execute the fetched command. See:help histget()
.– Ralf
2 days ago
1
Do you know that you can repeat the last
:s
with&
(current line) and the last:%s
withg&
(run substitute over complete file)?– Hotschke
2 days ago