在vim中如何选择文本?

95
在大多数文本编辑器中,我可以使用鼠标点击并拖动来选择文本,然后使用Ctrl-C复制该文本或Backspace删除该文本。
但是,由于vim在控制台中运行,如果我用鼠标突出显示某些文本,则我的vim命令不会影响所选内容。
vim中,选择文本的等效方法是什么?

5
在 Meta 上开了一个讨论,关于这个问题的有效性。在投票关闭这个问题之前,请参考那篇帖子并讨论。 - Cory Klein
2个回答

156

vim 中,通过进入可视模式来选择文本。这可以通过多种方式完成。

  • v(小写 v)开始常规可视模式,并类似于使用鼠标选择文本。使用hl向左和向右扩展选择以包括更多单词,使用jk向下和向上扩展选择。
  • V(大写 v)开始行选择模式。这一次选择整行文本。使用jk向上和向下扩展选择。
  • Ctrl+v(小写 v)进入块选择模式。这选择文本以块格式,允许您选择多行的部分而不包括整行。像平常一样使用hjkl
  • 如@FDinoff所建议的那样,如果您的终端模拟器支持它,则可以通过启用鼠标输入并使用鼠标进行可视选择:set mouse=a

一旦选择了所需的文本,可以对其使用各种命令。其中一些更有用的命令是:

  • Esc 退出可视模式
  • d 删除文本
  • y复制文本
  • p将剪贴板粘贴到文本中,替换它
  • c 更改文本,删除它并设置光标进行输入
  • r 用下一个字符替换文本
  • yq/p在文档的其他位置搜索文本

vim中,输入:help v可以了解有关可视化模式的更多信息。


8
根据终端仿真器的不同,如果使用set mouse=a命令,在vim中您可以获得鼠标支持。 - FDinoff
1
谢谢@FDinoff,我已经将这些信息添加到答案中并引用了你。 - Cory Klein
在我使用的终端中,Ctrl+v实际上是粘贴文本的快捷键。是否有其他进入块可视模式的方法? - birgersp
@birgersp 我猜你在使用Windows?他们有关于这个确切情况的文档,只需搜索“vim”。基本思路是告诉你的终端表现得体,并停止窃取你的ctrl+v。 - Cory Klein

1

突出显示已复制的文本

首先,我想推荐突出显示已复制的文本: https://github.com/machakann/vim-highlightedyank(适用于vim和neovim)

这很有用,因为它会给你一个视觉提示,告诉你刚刚复制了什么。

对于neovim:

augroup highlight_yank
    autocmd!
    au TextYankPost * silent! lua vim.highlight.on_yank({higroup="IncSearch", timeout=700})
augroup END

Vim的哲学远远超越选择、复制等操作。

开始花更多时间阅读关于vim/neovim的内容,你就不会再回头使用其他编辑器了。

很高兴认识你亲爱的“文本对象”

  • 这里阅读更多关于它们的内容

将整段复制到剪贴板:

"+yip

"+ .................... clipboard register
y ..................... copy
ip .................... inner paragraph

将整个文件复制到剪贴板

:%y+

从剪贴板测试一些vim命令

:@+

上述命令允许您运行函数和vim命令,即使您没有将它们粘贴到vimrc中,但有一些例外情况,但通常它会起作用。

您可以定义自己的文本对象

" vim line text-objects
xnoremap al :<C-u>norm! 0v$<cr>
xnoremap il :<C-u>norm! _vg_<cr>
onoremap al :norm! val<cr>
onoremap il :norm! vil<cr>

所以你可以使用vildil

有时候你不需要选择复制 如果你想将第二行复制到文件末尾,可以执行以下操作:

:2t$

如果你想把第4-7行移动到文件开头,可以这样做:
:4,7m0

从标记a复制到标记b:

ma .................. mark current line as mark a

Jump to a second place in your file and then

mb .................. mark current line as mark b

finally:

:'a,'by+

from mark a to mark b copy to the clipboard

深入探究高级 Vim:


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