在vim中如何“yank”(即复制)X个字符?

73

我知道在vim中可以通过输入5x来删除5个字符,而且我经常使用这个方法通过5xu来复制和粘贴文本。

但是我懒得去撤销刚刚的剪切操作,所以我更想直接复制这5个字符。

我该怎么做呢?


2
x 只是 dl 的快捷方式。 - Neil
@Cory:我更新了我的答案,加入了一个键位映射。不确定它是否有用,但我意识到你之前的方法(5xu)实际上并没有比“技术上正确”的y5l使用更多的按键,所以帮助不是太大。 - voithos
4个回答

109

Yank命令支持标准的移动命令。使用y5l(这是小写字母 L)来复制光标后的 5 个字符。

如果您想向后复制 5 个字符,请使用y5h

现在,如果您感到非常懒惰,可以将此特定序列重新映射为一个键组合,方法如下:

:nnoremap <C-l> y5l
在这种情况下,“向右拽5个”被映射为Ctrl+L(小写的L)。
如果你愿意,你可以使用Space代替L朝前拽字符(例如:ySpace表示一个字符或5ySpace表示5个)。一些人可能会发现这比按L更快或更容易。

谢谢您的回答!是否可以选择一段字母范围进行复制,而不是指定范围的数字?就像我们在 MS Word 中按住 Shift 键并移动光标一样。谢谢! - yuqli
1
如果我理解你的问题正确,你想知道是否可以手动“选择”一组字符进行复制?如果是这样,你需要使用“可视模式”。只需按下 v 进入可视模式,开始选择,然后使用正常的移动键移动光标,最后按下 y 进行复制。 - voithos

17

这是对 voithos 答案的补充:

你也可以使用 5 y 空格y5空格 (感谢 @hauleth 的建议)

对我来说,当我只想yank一个字符时,这很有用:

y空格

比敲击l键更容易(至少对我来说)。


"5y<Space>" 将会复制五个字符。 - Hauleth
2
y+空格非常有用,可以复制单个字符。您应该编辑voithos的答案以包括这一点。 - Sean
有些字符占据了超过一个列,比如制表符,所以你可能会在第五列结束时只有不到5个字符。 - mosh

9

我发现这篇文章,因为我也想要摘取x个字符而不是剪切它们,并在测试时学到了这个技巧。

有时候找到某些字符比计算要摘取的字符数更容易。

输入动作tT

ytx视为向前摘取到字符x

yTx视为向后摘取到字符x

enter image description here


1
我在寻找如何向后“yank to”的方法(我的第一个想法是Y t..但实际上是y T),谢谢! - TheGaldozer

-7

y5可以实现。 yy复制行,y复制字符。


16
y5是一个不完整的动作,对吗?你需要指定5个什么。向右移动五个字符? y5l 向左移动五个字符? y5h 等等。 - voithos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接