Why is the underscore command _ useful?Using the % command on a line without a bracketApplying an ex command to a visual selection or text objectWhy do `cw` and `ce` do the same thing?What does vim consider a paragragh?How to change fchar to search left if no char was found searching right?How to make fchar case insensitive?Why is :execute required in this --remote-silent command?Automatically jump to text object during `ci(`
SSD or HDD for server
Why are KDFs slow? Is using a KDF more secure than using the original secret?
Are there any rules around when something can be described as "based on a true story"?
Fill a bowl with alphabet soup
Can you take Bowwow out after returning him to MeowMeow?
Sum in bash outside while read line
C4_4 Reflection!
Why are Starfleet vessels designed with nacelles so far away from the hull?
Is Having my Players Control Two Parties a Good Idea?
My professor says my digit summing code is flawed. Is he right?
A Grandma Riddle
Why does 1.1.1.1 not resolve archive.is?
How can I attach a set of five panniers?
How is the corresponding author on a (math) paper typically chosen?
Proofreading a novel: is it okay to use a question mark with an exclamation mark - "?!"
I'm not alive, but I can be lively
Delete line if next line is the same
'Kukhtarev's model' or 'THE Kukhtarev's model'?
Did smallpox emerge in 1580?
Is consistent disregard for students' time "normal" in undergraduate research?
How do I weigh a kitchen island to determine what size castors to get?
5v home network
Slow coworker receiving compliments while I receive complaints
Can Slack really claim not to be a data controller?
Why is the underscore command _ useful?
Using the % command on a line without a bracketApplying an ex command to a visual selection or text objectWhy do `cw` and `ce` do the same thing?What does vim consider a paragragh?How to change fchar to search left if no char was found searching right?How to make fchar case insensitive?Why is :execute required in this --remote-silent command?Automatically jump to text object during `ci(`
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty
margin-bottom:0;
I'm a bit puzzeled as to why the underscore command _
, which jumps to
the beginning of the (COUNT - 1)th line below the cursor, gets its own
key. When would I use this rather than +
or ^
?
cursor-motions
add a comment
|
I'm a bit puzzeled as to why the underscore command _
, which jumps to
the beginning of the (COUNT - 1)th line below the cursor, gets its own
key. When would I use this rather than +
or ^
?
cursor-motions
add a comment
|
I'm a bit puzzeled as to why the underscore command _
, which jumps to
the beginning of the (COUNT - 1)th line below the cursor, gets its own
key. When would I use this rather than +
or ^
?
cursor-motions
I'm a bit puzzeled as to why the underscore command _
, which jumps to
the beginning of the (COUNT - 1)th line below the cursor, gets its own
key. When would I use this rather than +
or ^
?
cursor-motions
cursor-motions
edited Apr 25 at 17:54
Toothrot
asked Apr 25 at 17:29
ToothrotToothrot
1,4766 silver badges19 bronze badges
1,4766 silver badges19 bronze badges
add a comment
|
add a comment
|
1 Answer
1
active
oldest
votes
Good question!
As a motion by itself, you're right, _
is not a particularly useful key. :h _
*_*
_ <underscore> [count] - 1 lines downward, on the first non-blank
character |linewise|.
The key word here is "linewise". So if your goal is to just move the cursor, then ^
, j
, and +
all get the job done, and there's not much point to _
. But as an argument to an operator, _
is super powerful.
A lot of double-key shortcuts are actually just shortcuts for _
. For example,
dd -> d_
cc -> c_
yy -> y_
Y -> y_
etc. Because it's a linewise motion, it basically selects the entire line to be operated on regardless of where your cursor starts, whereas ^
just goes from your character to the first non-blank.
It helps me when thinking about linewise vs blockwise motions to imagine that I'm pressing either v
or V
right before the motion. So I imagine d^
to be equivalent to v^d
and I imagine d_
to be equivalent to V_d
or V^d
. Of course, you can also override a motion to force it to be linewise or characterwise. So dv_
is actually exactly the same as d^
or v^d
, and dVw
is like Vwd
which is exactly like d_
.
The reason it is specifically the "count-1th" line is so that 1dd
(which is really d1_
) deletes one entire line, 2dd
(which is really d2_
) deletes 2 entire lines, 3dd
deletes 3 entire lines, etc.
1
All right, but would I ever actually use it?dd
is easier thand_
and3yj
is easier than4y_
.
– Toothrot
Apr 25 at 18:02
5
@toothrot If you were creating your own operator and wanted to operate on the next n lines.
– DJMcMayhem♦
Apr 25 at 18:07
5
@Toothrot I guess I want to clarify that a little bit. In day to day vim editing, no it's really not particularly useful. I've almost never used it either. The reason it's useful is because it is the definition of a lot of useful commands.dd
might be more convenient thand_
, but that's becausedd
is just a mapping tod_
. And it's also useful in vimscript.
– DJMcMayhem♦
Apr 25 at 19:24
9
Some actions that act on a "motion" may not have other shortcuts. Something like "gU_" will uppercase everything on the current line, even if the cursor is not at the start of the line.
– bmb
Apr 25 at 23:08
1
@bmb What aboutgUU
? I think it would be worthwhile to find an actual example where<operator>_
would be used.
– Hotschke
May 15 at 18:08
|
show 1 more comment
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "599"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
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%2f19745%2fwhy-is-the-underscore-command-useful%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Good question!
As a motion by itself, you're right, _
is not a particularly useful key. :h _
*_*
_ <underscore> [count] - 1 lines downward, on the first non-blank
character |linewise|.
The key word here is "linewise". So if your goal is to just move the cursor, then ^
, j
, and +
all get the job done, and there's not much point to _
. But as an argument to an operator, _
is super powerful.
A lot of double-key shortcuts are actually just shortcuts for _
. For example,
dd -> d_
cc -> c_
yy -> y_
Y -> y_
etc. Because it's a linewise motion, it basically selects the entire line to be operated on regardless of where your cursor starts, whereas ^
just goes from your character to the first non-blank.
It helps me when thinking about linewise vs blockwise motions to imagine that I'm pressing either v
or V
right before the motion. So I imagine d^
to be equivalent to v^d
and I imagine d_
to be equivalent to V_d
or V^d
. Of course, you can also override a motion to force it to be linewise or characterwise. So dv_
is actually exactly the same as d^
or v^d
, and dVw
is like Vwd
which is exactly like d_
.
The reason it is specifically the "count-1th" line is so that 1dd
(which is really d1_
) deletes one entire line, 2dd
(which is really d2_
) deletes 2 entire lines, 3dd
deletes 3 entire lines, etc.
1
All right, but would I ever actually use it?dd
is easier thand_
and3yj
is easier than4y_
.
– Toothrot
Apr 25 at 18:02
5
@toothrot If you were creating your own operator and wanted to operate on the next n lines.
– DJMcMayhem♦
Apr 25 at 18:07
5
@Toothrot I guess I want to clarify that a little bit. In day to day vim editing, no it's really not particularly useful. I've almost never used it either. The reason it's useful is because it is the definition of a lot of useful commands.dd
might be more convenient thand_
, but that's becausedd
is just a mapping tod_
. And it's also useful in vimscript.
– DJMcMayhem♦
Apr 25 at 19:24
9
Some actions that act on a "motion" may not have other shortcuts. Something like "gU_" will uppercase everything on the current line, even if the cursor is not at the start of the line.
– bmb
Apr 25 at 23:08
1
@bmb What aboutgUU
? I think it would be worthwhile to find an actual example where<operator>_
would be used.
– Hotschke
May 15 at 18:08
|
show 1 more comment
Good question!
As a motion by itself, you're right, _
is not a particularly useful key. :h _
*_*
_ <underscore> [count] - 1 lines downward, on the first non-blank
character |linewise|.
The key word here is "linewise". So if your goal is to just move the cursor, then ^
, j
, and +
all get the job done, and there's not much point to _
. But as an argument to an operator, _
is super powerful.
A lot of double-key shortcuts are actually just shortcuts for _
. For example,
dd -> d_
cc -> c_
yy -> y_
Y -> y_
etc. Because it's a linewise motion, it basically selects the entire line to be operated on regardless of where your cursor starts, whereas ^
just goes from your character to the first non-blank.
It helps me when thinking about linewise vs blockwise motions to imagine that I'm pressing either v
or V
right before the motion. So I imagine d^
to be equivalent to v^d
and I imagine d_
to be equivalent to V_d
or V^d
. Of course, you can also override a motion to force it to be linewise or characterwise. So dv_
is actually exactly the same as d^
or v^d
, and dVw
is like Vwd
which is exactly like d_
.
The reason it is specifically the "count-1th" line is so that 1dd
(which is really d1_
) deletes one entire line, 2dd
(which is really d2_
) deletes 2 entire lines, 3dd
deletes 3 entire lines, etc.
1
All right, but would I ever actually use it?dd
is easier thand_
and3yj
is easier than4y_
.
– Toothrot
Apr 25 at 18:02
5
@toothrot If you were creating your own operator and wanted to operate on the next n lines.
– DJMcMayhem♦
Apr 25 at 18:07
5
@Toothrot I guess I want to clarify that a little bit. In day to day vim editing, no it's really not particularly useful. I've almost never used it either. The reason it's useful is because it is the definition of a lot of useful commands.dd
might be more convenient thand_
, but that's becausedd
is just a mapping tod_
. And it's also useful in vimscript.
– DJMcMayhem♦
Apr 25 at 19:24
9
Some actions that act on a "motion" may not have other shortcuts. Something like "gU_" will uppercase everything on the current line, even if the cursor is not at the start of the line.
– bmb
Apr 25 at 23:08
1
@bmb What aboutgUU
? I think it would be worthwhile to find an actual example where<operator>_
would be used.
– Hotschke
May 15 at 18:08
|
show 1 more comment
Good question!
As a motion by itself, you're right, _
is not a particularly useful key. :h _
*_*
_ <underscore> [count] - 1 lines downward, on the first non-blank
character |linewise|.
The key word here is "linewise". So if your goal is to just move the cursor, then ^
, j
, and +
all get the job done, and there's not much point to _
. But as an argument to an operator, _
is super powerful.
A lot of double-key shortcuts are actually just shortcuts for _
. For example,
dd -> d_
cc -> c_
yy -> y_
Y -> y_
etc. Because it's a linewise motion, it basically selects the entire line to be operated on regardless of where your cursor starts, whereas ^
just goes from your character to the first non-blank.
It helps me when thinking about linewise vs blockwise motions to imagine that I'm pressing either v
or V
right before the motion. So I imagine d^
to be equivalent to v^d
and I imagine d_
to be equivalent to V_d
or V^d
. Of course, you can also override a motion to force it to be linewise or characterwise. So dv_
is actually exactly the same as d^
or v^d
, and dVw
is like Vwd
which is exactly like d_
.
The reason it is specifically the "count-1th" line is so that 1dd
(which is really d1_
) deletes one entire line, 2dd
(which is really d2_
) deletes 2 entire lines, 3dd
deletes 3 entire lines, etc.
Good question!
As a motion by itself, you're right, _
is not a particularly useful key. :h _
*_*
_ <underscore> [count] - 1 lines downward, on the first non-blank
character |linewise|.
The key word here is "linewise". So if your goal is to just move the cursor, then ^
, j
, and +
all get the job done, and there's not much point to _
. But as an argument to an operator, _
is super powerful.
A lot of double-key shortcuts are actually just shortcuts for _
. For example,
dd -> d_
cc -> c_
yy -> y_
Y -> y_
etc. Because it's a linewise motion, it basically selects the entire line to be operated on regardless of where your cursor starts, whereas ^
just goes from your character to the first non-blank.
It helps me when thinking about linewise vs blockwise motions to imagine that I'm pressing either v
or V
right before the motion. So I imagine d^
to be equivalent to v^d
and I imagine d_
to be equivalent to V_d
or V^d
. Of course, you can also override a motion to force it to be linewise or characterwise. So dv_
is actually exactly the same as d^
or v^d
, and dVw
is like Vwd
which is exactly like d_
.
The reason it is specifically the "count-1th" line is so that 1dd
(which is really d1_
) deletes one entire line, 2dd
(which is really d2_
) deletes 2 entire lines, 3dd
deletes 3 entire lines, etc.
answered Apr 25 at 17:55
DJMcMayhem♦DJMcMayhem
12k3 gold badges31 silver badges67 bronze badges
12k3 gold badges31 silver badges67 bronze badges
1
All right, but would I ever actually use it?dd
is easier thand_
and3yj
is easier than4y_
.
– Toothrot
Apr 25 at 18:02
5
@toothrot If you were creating your own operator and wanted to operate on the next n lines.
– DJMcMayhem♦
Apr 25 at 18:07
5
@Toothrot I guess I want to clarify that a little bit. In day to day vim editing, no it's really not particularly useful. I've almost never used it either. The reason it's useful is because it is the definition of a lot of useful commands.dd
might be more convenient thand_
, but that's becausedd
is just a mapping tod_
. And it's also useful in vimscript.
– DJMcMayhem♦
Apr 25 at 19:24
9
Some actions that act on a "motion" may not have other shortcuts. Something like "gU_" will uppercase everything on the current line, even if the cursor is not at the start of the line.
– bmb
Apr 25 at 23:08
1
@bmb What aboutgUU
? I think it would be worthwhile to find an actual example where<operator>_
would be used.
– Hotschke
May 15 at 18:08
|
show 1 more comment
1
All right, but would I ever actually use it?dd
is easier thand_
and3yj
is easier than4y_
.
– Toothrot
Apr 25 at 18:02
5
@toothrot If you were creating your own operator and wanted to operate on the next n lines.
– DJMcMayhem♦
Apr 25 at 18:07
5
@Toothrot I guess I want to clarify that a little bit. In day to day vim editing, no it's really not particularly useful. I've almost never used it either. The reason it's useful is because it is the definition of a lot of useful commands.dd
might be more convenient thand_
, but that's becausedd
is just a mapping tod_
. And it's also useful in vimscript.
– DJMcMayhem♦
Apr 25 at 19:24
9
Some actions that act on a "motion" may not have other shortcuts. Something like "gU_" will uppercase everything on the current line, even if the cursor is not at the start of the line.
– bmb
Apr 25 at 23:08
1
@bmb What aboutgUU
? I think it would be worthwhile to find an actual example where<operator>_
would be used.
– Hotschke
May 15 at 18:08
1
1
All right, but would I ever actually use it?
dd
is easier than d_
and 3yj
is easier than 4y_
.– Toothrot
Apr 25 at 18:02
All right, but would I ever actually use it?
dd
is easier than d_
and 3yj
is easier than 4y_
.– Toothrot
Apr 25 at 18:02
5
5
@toothrot If you were creating your own operator and wanted to operate on the next n lines.
– DJMcMayhem♦
Apr 25 at 18:07
@toothrot If you were creating your own operator and wanted to operate on the next n lines.
– DJMcMayhem♦
Apr 25 at 18:07
5
5
@Toothrot I guess I want to clarify that a little bit. In day to day vim editing, no it's really not particularly useful. I've almost never used it either. The reason it's useful is because it is the definition of a lot of useful commands.
dd
might be more convenient than d_
, but that's because dd
is just a mapping to d_
. And it's also useful in vimscript.– DJMcMayhem♦
Apr 25 at 19:24
@Toothrot I guess I want to clarify that a little bit. In day to day vim editing, no it's really not particularly useful. I've almost never used it either. The reason it's useful is because it is the definition of a lot of useful commands.
dd
might be more convenient than d_
, but that's because dd
is just a mapping to d_
. And it's also useful in vimscript.– DJMcMayhem♦
Apr 25 at 19:24
9
9
Some actions that act on a "motion" may not have other shortcuts. Something like "gU_" will uppercase everything on the current line, even if the cursor is not at the start of the line.
– bmb
Apr 25 at 23:08
Some actions that act on a "motion" may not have other shortcuts. Something like "gU_" will uppercase everything on the current line, even if the cursor is not at the start of the line.
– bmb
Apr 25 at 23:08
1
1
@bmb What about
gUU
? I think it would be worthwhile to find an actual example where <operator>_
would be used.– Hotschke
May 15 at 18:08
@bmb What about
gUU
? I think it would be worthwhile to find an actual example where <operator>_
would be used.– Hotschke
May 15 at 18:08
|
show 1 more 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.
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%2f19745%2fwhy-is-the-underscore-command-useful%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