如何在vi编辑器中删除选定的文本

135

我正在使用 PuTTY 和 vi 编辑器。如果我使用鼠标选择了五行文本并且想要删除这些行,我该怎么做?

另外,如何像在 Windows 中一样使用键盘选择文本?在 Windows 中,我可以按住Shift并按箭头移动来选择文本。在 vi 中我该怎么做呢?


1
我有打印的人员列表,但找不到如何删除所选文本。 - John
x 删除光标右侧的字符 X 删除光标左侧的字符 D 删除至行尾 dd 删除当前行 :d 删除当前行来自http://www.lagmonster.org/docs/vi.html希望这能有所帮助。 - Mawg says reinstate Monica
1
VIM在superuser上的问题?哈哈! - Pascal Thivent
1
@Pascal:嗯,是的,你说得对。顺便说一句,回答格式很好。哦,他/她的问题不是关于VIM,而是关于VI。 ;) - Marcel Korpel
6个回答

234
我正在使用PuTTY和vi编辑器。如果我使用鼠标选择了五行文本并且想要删除这些行,我该怎么做?
忘记使用鼠标。要删除5行,请执行以下操作之一:
- 转到第一行并键入d5d(dd删除一行,d5d删除5行); - 键入Shift-v以进入行选择模式,然后使用j向下移动光标(是的,使用h、j、k和l分别向左、向下、向上、向右移动光标比使用箭头更有效),并键入d以删除所选内容。
此外,在vi中如何像在Windows中按住Shift并移动箭头来选择文本一样使用键盘选择行?
正如我所说,可以使用Shift-v进入行选择模式或v进入字符选择模式或Ctrl-v进入块选择模式。然后使用h、j、k和l移动。
我建议花些时间学习Vim教程(运行vimtutor),以一种很有教育意义的方式更加熟悉Vim。

另请参阅


1
实际上,如果您的终端支持它,vim具有出色的鼠标支持。例如,在控制台中使用gpm守护程序,或在图形环境中运行xtermkonsole,您可以告诉vim set mouse=a(或将其添加到您的.vimrc),然后鼠标可以用于选择、调整分割等操作。 - Ben Voigt
此外,很难分辨您的 V 是否为大写...我建议在行选择模式下使用 [Shift] + [V]。 - Ben Voigt
1
我知道已经有一段时间了,但是为什么使用 hjkl 比使用箭头高效呢?我觉得使用箭头也没有问题,最终结果看起来也一样。而且,箭头最初就是为了这个目的而设计的,所以它们的排列方式感觉更加直观(至少对我来说是这样)。 - Frederico Pantuzza
1
@FredericoPantuzza 这只是一个手臂运动的问题 - 目标是始终保持手指在主键盘区域。随着时间的推移,不得不抬起右臂并将其滑动到箭头键上使用会累积起来。 - AndrewF
在箭头键和 h、j、k、l 键之间,有时你可能会处于一个糟糕的网络环境,并尝试远程编辑某些东西(即网络出现故障,而你是修复它的英雄)。箭头键发送一系列按键,如果网络数据包被分成两部分,那么你将看到奇怪的字符。在旧的拨号网络时代,这是一个主要问题。 - fchen
显示剩余2条评论

62

用vi的方式来操作。

要删除5行,请按: 5dd (删除5行)

要选择(实际上是将它们复制到剪贴板),您需要键入: 10yy

这有点难以理解,但在使用远程终端时非常方便学习。

要注意某些编辑器的学习曲线:


(来源:unix.rulez.org上的卡尔弗


36

如果您想使用行号删除,可以使用以下命令:

:startingline, last line d

示例:

:7,20 d

这个例子将删除第7行到第20行。


我之前没有意识到这个技巧。它非常有效!谢谢! - Tung

24

使用鼠标选中只能在终端窗口中高亮字符。VI并不能真正获取这些信息,所以你需要用不同的方式进行选中。

按 'v' 键进入选择模式,使用箭头键移动光标。要删除,按下 x 键。 要一次选择多行,按 shift+v。 要选择块,尝试 ctrl+v。例如,在代码前插入大量注释行时可用 :)

我对 VI 感到满意,但我花了一段时间来提高它的使用。我的同事们向我推荐了这张备忘单。我把它打印出来贴在墙上,以备我忘记某些操作的情况。

祝您愉快地编程!


这就是方法。接受的答案都是无意义的。如果用户甚至不能在一个屏幕上看到所有行,他们应该如何计算行数? - wvxvw
如果您正在使用Vim,那么一种实现您要求的方法是在您的.vimrc中设置相对行号。这样做可以快速计算您想要删除的行数,因为您可以在边距处看到距离光标的行数。请参阅此SO答案以获取更多详细信息:https://stackoverflow.com/questions/27151491已经过去12年了,我使用编辑器的方式已经完全改变,但我很高兴您发现了这个答案有用。 - heymatthew
是的,我知道相对行号,但如果你想选择的所有行不能同时显示,它就没有帮助了。 - wvxvw

6
当使用终端软件PuTTY时,通常鼠标点击和选择不会被传输到远程系统。因此,vi不知道您刚刚选择了一些文本。(有例外情况,但通常不会传输鼠标操作。)
要删除vi中的多行,请使用类似5dd的命令删除5行。
如果您没有使用Vim,我强烈建议您使用它。您可以使用可视化选择,其中按下V开始一个可视块,移动光标到另一端,然后按下d进行删除(或任何其他编辑命令,如y进行复制)。

1
@Justin L.:使用 <kbd>a</kbd> - Greg Hewgill
1
谢谢!:D 还有其他的隐藏在某个地方吗? - Justin L.
1
Putty 能够传输鼠标命令;第一句话可能已经过时了。 - congusbongus

3

如果你想从当前行号开始删除文件中的所有行,请使用 dG,它将删除所有行,(shift g) 表示文件末尾。


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