Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vim中删除(不剪切)?_Vim_Copy Paste - Fatal编程技术网

如何在Vim中删除(不剪切)?

如何在Vim中删除(不剪切)?,vim,copy-paste,Vim,Copy Paste,如何删除一行而不将其放入默认缓冲区 例如: line that will be copied. line that I want to be substitued with the previous one. 我想做的是: yy dd p 但是Vim将最近复制的字符串替换为已删除(剪切)的字符串。我知道我可以使用缓冲区,比如,“1yy,dd,然后“1p,但我总是忘记将复制的字符串放入缓冲区,然后我需要先粘贴我的内容(将被复制的行),然后删除我想要的内容(我想用前一行替换的行) 如何在不复制

如何删除一行而不将其放入默认缓冲区

例如:

line that will be copied.

line that I want to be substitued with the previous one.
我想做的是:

yy
dd
p
但是Vim将最近复制的字符串替换为已删除(剪切)的字符串。我知道我可以使用缓冲区,比如,
“1yy
dd
,然后
“1p
,但我总是忘记将复制的字符串放入缓冲区,然后我需要先粘贴我的内容(将被复制的行),然后删除我想要的内容(我想用前一行替换的行)

如何在不复制的情况下删除Vi(m)中的文本

另一个相关问题是如何在插入模式下向前删除单词?我想要类似于Ctrl+w的东西。

你可以使用
“\u d
来防止内容覆盖你的被拖动文本。你可以使用
将被拖动或删除的文本存储在你想要的任何寄存器中,
是“黑洞”寄存器,你可以在其中发送你不关心的内容

有关详细信息,您可以键入
:help“\uu
:help deleting
使用“黑洞寄存器”
“\u
来真正删除某些内容:
”\u d

使用
“\u dP
粘贴某些内容并使其可用于进一步粘贴

对于第二个问题,可以使用
dw
<代码>用于在不离开插入模式的情况下执行正常命令

当然,您可以设置自己的映射以保存键入。我有:

nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP
nnoremap d”\u d
xnoremap d“\u d
xnoremap“\u dP

这是我不喜欢vim的原因之一…我最终将
dd
映射到了我的.vimrc中的黑洞寄存器,从此生活一直很好:

nnoremap d "_d
vnoremap d "_d

黑洞寄存器
会起作用,但有一个更好的解决方案:

使用
p
命令返回该行时,您正在粘贴(volatile)默认寄存器的内容,该寄存器已被
dd
覆盖。但是您仍然可以从(非易失性)yank寄存器
“0
,该寄存器不会被delete命令
dd
覆盖

根据您的示例,以下是您希望使用的命令:

yy
dd
"0p

以下映射将生成:

  • d=>“删除”
  • 引线d=>“切割”
这两个代码段将使“、d”成为您的新剪切命令

如果要将这些映射与共享系统剪贴板配置一起使用,请参阅

在视觉模式下,
x
将删除所选内容,因此如果要删除整行内容,请先按
V
在视觉模式下选择该行,然后按
x
删除所选内容。

我在my.vimrc中使用
noremap'.

这保留了
dd
的行为,因此我可以像以前一样使用它进行剪切


但是当我真的想删除某些内容时,只需使用前缀
。例如:
'dd
'dw

thx,你回答了我的两个问题。但我不明白这些noremap命令将如何帮助我。我是否丢失了剪切功能,对吗?否,
d
仍然“剪切”和
p
仍然“粘贴”,而
d
实际删除和
p
丢弃所选文本并粘贴默认寄存器的内容
p
允许我多次粘贴相同的文本,而不必使用命名的寄存器。可能重复的文本如何剪切?
v/v
x
也会被剪切。在任何操作系统中,用
x
剪切也与
Ctrl+x
一致。我希望我能不止一次地更新这个答案——我用的是kprobst的答案,但为了剪切一行,我不得不用
yydd
,这在我的手指上有点不可持续
;-).intellij在这之后表现得很奇怪。dd什么也不做,d什么都不做我非常喜欢这个解决方案。有一件事对我不起作用,那就是用
,dd
切线。添加
nnoremap dd“dd
后,它开始工作。这将删除的行复制到剪贴板中,这正是OP希望避免的。谢谢!不知何故,这在Emacs的邪恶插件上非常有效,这应该是公认的答案。每当我想粘贴时手动指定一个寄存器要比每次删除任何内容时一直指定一个寄存器容易得多。
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d
let mapleader = ","
let g:mapleader = ","
yy
Vx
p