【问题标题】:Highlight copied area in Vim在 Vim 中突出显示复制区域
【发布时间】:2014-11-22 00:55:26
【问题描述】:

我想模仿在游戏Vim Adventures 中发现的一个不错的效果:当拉出命令完成时,我希望拉出的区域突出显示(比如说红色),以显示我的选择是正确的。

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

【问题讨论】:

  • 为什么不直接在拉动之前进行视觉选择?
  • 因为命令 yi( 比 vi(y 例如,键入起来简单。无论以何种方式,看到复制完成总是令人放心
  • 你需要在自信和简单/速度之间找到平衡。
  • 这个想法+1 --- 我觉得它很有趣。但是,按时间删除高亮可能有点棘手,因为据我所知,vim 缺乏计时器/异步功能(没有某些类型的插件/补丁)。

标签: vim yank


【解决方案1】:

对于 Neovim 和 Vim

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

" set highlight to 1000 ms
let g:highlightedyank_highlight_duration = 1000

仅限 Neovim

如果您使用的是 nvim 0.5+,他们已经在 this 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

有关此功能的更多信息,请参阅 Neovim's documentation

【讨论】:

  • 对于最新的neovim版本是否需要安装插件?
  • @prateek 如果你有最新版本的 neovim。您可以尝试仅使用 neovim 的方法。无需安装 vim-highlightedyank。
【解决方案2】:

一个 vimer(不是我)看到了这个问题,并为此编写了一个插件。请注意,这不是一个简单的解决方案,可能不适合那些喜欢将 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)

&lt;A-y&gt; 更改为您想使用的任何键盘映射(只是y 可能不起作用):例如,&lt;Leader&gt;y 可以很好。

高亮可以自动清除。写下:

let g:operator#highlight#clear_time=2.0

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

【讨论】:

  • 哇,我期待着测试!谢谢!
  • 我得到一个错误 E15: Invalid expression: operator#sequence#map("y", "\(operator-highlight)") 我该怎么办解决这个问题?
  • 嗯....我不确定,抱歉。当未安装 vim-operator-sequence 时,我会收到这种错误,所以也许你可以仔细检查一下,如果你没有安装,一方面?
  • Ok 插件已安装,我可以看到它的状态 Ok.
  • 在这种情况下,对不起,我帮不上忙。我已经从我的.vimrc 中删除了除了这三个插件和设置之外的所有内容,它仍然可以工作。我提出的唯一建议是(因为我对 vim 脚本知之甚少),如果您使用的是旧的 vim(我尝试使用 Ubuntu 存储库中的 7.4.52 并且没有问题)或类似的东西,请尝试使用较新的 vim。对不起。如果nnoremap &lt;expr&gt; &lt;A-y&gt; operator#sequence#map("y") 失败(这不太可能,因为您看到它的状态正常),这表明问题不是来自 vim-operator-highlight..
【解决方案3】:

我使用 markonm 的插件,名为 hlyank.vim

我打开插件并更改了时间,因为它只会在屏幕上闪烁颜色,因此将其从 200 更改为 800。在自动加载文件夹中,我打开了 hlyank.vim 并编辑了以下几行:

  call timer_start(800, {-> matchdelete(id, winid)})
else
  call timer_start(800, {-> matchdelete(id)})

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2012-08-21
    • 1970-01-01
    • 2015-05-17
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多