vim's delete command, is a core command used in every editing session. Delete combos such as dw
, dd
, D
, di"
will make you happy you chose vim. However, there's a known caveat with the delete command.
The problem
the delete command also puts the deleted content into the default register, effectively making the 'delete' command a 'cut' command. This becomes a pain when after cutting one word, you realize you also need to delete some chars with x
or words with d
before pasting the original first word. The other x
's and d
's will override the first word.
Common solutions
- Always paste immediately after cutting. This will be OK if you use vim for the occasional editing in a
ssh
session. If you use vim as a primary editor, this solution won't suffice. - Use clipboard managers plugins such as YankRing / YankStack. This helps relief the pain as you can cycle through previous register entries, but it doesn't solve the problem at it's root- the need for different commands for 'cut' and 'delete'. You should use a clipboard manager at any case for yanks. My personal preference is to use OS clipboard managers over plugins.
- Generate mappings to separate 'cut' and 'delete'. The Best solution. The related stackoverflow's question accepted answer suggests a mapping which results in (assuming
leader
is set to,
):
Keys | Result |
---|---|
,d |
delete |
d |
cut |
I used this mapping for some time and it does the job quite well. But since 'delete' is much more frequent than 'cut' I switched the mappings around and create this repo which results in (assuming leader
is set to ,
):
Keys | Result |
---|---|
d |
delete |
,d |
cut |
The mapping will also make D
, x
, X
act as 'delete' rather than 'cut'.