在 vim 上突出显示复制的区域

use*_*544 5 vim yank

我想模仿 Vim Adventure 游戏中的一个不错的效果:当执行 yank 命令时,我希望 yank 区域高亮显示(假设为红色)一秒钟,以向我表明我的选择是正确的。

例如,yy会以红色突出显示当前行一秒钟,然后我就会知道选择了什么。

jdh*_*hao 13

对于 Neovim 和 Vim

有一个名为vim-highlightedyank 的插件可以用于此目的,它适用于 Vim 和 Neovim。安装它就可以了。您还可以通过添加以下配置来设置突出显示持续时间:

" set highlight to 1000 ms
let g:highlightedyank_highlight_duration = 1000
Run Code Online (Sandbox Code Playgroud)

仅 Neovim

如果您使用的是 nvim 0.5+,他们已经在这个 pull request中内置了这个小功能。

在这种情况下不需要插件。只需安装 nvim 0.5+ 并将以下配置添加到您的init.vim

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

有关此功能的更多信息,请参阅Neovim 的文档。


lch*_*lus 10

对于 Neovim >= 0.7

Neovim 包含一个用于突出显示 yank 选项的功能,请参阅Neovim Lua 文档

使用 Neovim 版本 >= 0.7,您还可以使用 Neovim API 来定义自动命令以将其与TextYankPost事件一起使用。在您的文件中添加此配置init.lua

vim.api.nvim_create_autocmd('TextYankPost', {
  group = vim.api.nvim_create_augroup('highlight_yank', {}),
  desc = 'Hightlight selection on yank',
  pattern = '*',
  callback = function()
    vim.highlight.on_yank { higroup = 'IncSearch', timeout = 500 }
  end,
})
Run Code Online (Sandbox Code Playgroud)

  • 这里我只需要把第二行改为`group = vim.api.nvim_create_augroup('highlight_yank', {}),`。我正在使用 NeoVim 版本 0.8.0。 (6认同)

Yos*_*osh 1

一位 vimmer(不是我)看到了这个问题,并为此编写了一个插件。请注意,这不是一个简单的解决方案,可能不适合那些喜欢将 vim 保持在最低限度的人,但它的作用就像一个魅力。另请注意,这并不是一项严肃的工作,因此您不一定能寻求稳定的支持。


要安装的插件

使用您喜欢的方式安装这些插件。

设置

假设您想使用 Meta+y 来“拖动并突出显示”。将以下设置写入您的.vimrc.

noremap <expr> <Plug>(yank-highlight) operator#sequence#map("y", "\<Plug>(operator-highlight)")
nmap <A-y> <Plug>(yank-highlight)
vmap <A-y> <Plug>(yank-highlight)
Run Code Online (Sandbox Code Playgroud)

例如,更改为您想要使用的<A-y>任何键盘映射(可能不起作用):可能会很好。y<Leader>y

高亮显示可以自动清除。写下以下内容:

let g:operator#highlight#clear_time=2.0
Run Code Online (Sandbox Code Playgroud)

这将在大约 2 秒内清除该突出显示。间隔还取决于:set updatetime?,默认为4000(ms),因此如果这似乎无法清除突出显示,请尝试设置updatetime为较小的值。