5 ms·
Others have mentioned relativenumber, but for horizontal I just use search. For example: This is a line of text. If the cursor is on "is" and you want to
by Izkata 4y ago
Others have mentioned relativenumber, but for horizontal I just use search. For example:
This is a line of text.
If the cursor is on "is" and you want to delete everything before "text", this is what I do:
d/text<enter>
Any movement works for these actions, even searching to "select" everything between the cursor and the target. Often I'll use visual mode to get a quick confirmation before deleting it:
v/text<enter>h
(check selection is what I want)
d
The visual mode one isn't exactly the same because one additional character, the first "t" in "text", is in the visual selection area, hence the "h" to go back one.
- minusf 4y ago> d/text<enter> if you have a unique letter, as in this case ("t"), a quicker way is "dtt" (delete till "t") or "ctt" (change till "t"). in case of non unique character it takes a count but that scales badly for me, and i use /.
- deleted 4y ago[deleted]
- cassepipe 4y agoI have to personally thank you for that one. Thank you.
- oktwtf 4y agoThese discussions are always a gold mine of tips.! Also I like to use "f" for find followed by the character you wish to move cursor to the character you desire to end up on the present line. (ex. "fl" jumps to the first "l" of the line.)
- amelius 4y agoAnd you can also type d2ft to delete everything up to and including the second t, for example. (I personally think of "f" as "find", not "first")
- oktwtf 4y agoI never even thought to numerically increment the action! What beautiful chords at this here fireside chat.
- zefhous 4y agoThere’s also the `;`, which repeats the last movement! So if you did `dft` and didn’t see the extra “t” in the way in the first place, you can then just do `d;`. It’s like `.` but for movement! I think that’s right anyway, no vim terminal at hand to check myself.
- cuddlecake 4y agoWouldn't just `.` do the same as `d;` in that case?
- amelius 4y agoNot always, the ";" sets the repetition-count of the operation to 1. You can type "d2;" however.
- cuddlecake 4y agoGood to know, thank you
- oktwtf 4y agoOh great, I’ll finally have to remove my remap of ‘; = :’ never did I investigate to know what I was opting out of.
- paledot 4y agoNot worth it. That remap has saved me more keystrokes than I can reasonably count. But adding the opposite remap for good measure isn't the worst idea.
- 4y ago
- wyager 4y agoHow does dtt differ from dft?
- aGHz 4y agodtt will stop just before the first t character, dft will delete the t as well.
- kevincox 4y agoIn the case of dtt you can also often repeat it with . if you have a "false positive" before the intended character rather than counting occurances. Not for c but for d if you don't need the yanked text and regular movement.
- u801e 4y agoAnother approach is to use normal mode to delete a block of text you want. For instance, if you want to delete up to the line before the line that contains "This is a line of text", you could run q: .,/This is a line of text/- d . is the current line. /This is a line of text/ is the line that contains it and the - after the regex refers to the line immediately above. You could use _ to refer to the line immediately after, or -x or +x where x refers to the number of lines above or below the line that the regex matched.
- koprulusector 4y agoNever knew about the - or _ as flags for the search regex. This is awesome!
- u801e 4y agoIt's not actually a flag to the s command. It's a way to modify the address. So, for instance, if you want to delete from the third line to the third to last line in the file, you could run: :1+2,$-2 d 1 is the address of the first line in the file and $ is the address of the last line in the file. Add 2 to the first to get the third line and subtract 2 from the last to get the third to last line. The d command deletes the lines in the address range. You can also address lines with a regex, like I did in the example in my previous comment. You can even use regex addressing for ranges. If you wanted to delete a python method definition in between other method definitions, you could do something like: :/def method_to_delete/,/def/- d which would start the range with the line that contains def method_to_delete and delete lines up to the line before the next line that contains the def keyword that starts the next method definition.
- shepherdjerred 4y ago> d/text<enter> You've changed my life