如何在vim中发出蜂鸣声

发布于 2024-11-07 04:55:26 字数 189 浏览 0 评论 0原文

有什么方法可以显式请求 vim 发出蜂鸣声,最好不需要运行外部命令?

原因是我经常运行需要很长时间的命令(例如 :make),因此我开始做其他事情,但需要提醒我任务已完成。所以没有错误会导致 vim 发出蜂鸣声,但我可以运行任意命令,所以我需要一些命令让它发出蜂鸣声(好吧,运行外部程序是可行的,但我更喜欢更便携的方法)。

Is there any way to explicitly request vim to beep, preferably without having to run external commands?

The reason is that I often run commands (like :make) that take quite long, so I start doing something else, but than I need to be alerted to the fact that the task finished. So there is no error that would cause vim to beep, but I can run arbitrary command, so I need some command that would make it beep (ok, with running external program it's doable, but I'd prefer more portable method).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泪眸﹌ 2024-11-14 04:55:26

是:

:set novisualbell
:set errorbells
:exe "normal \<Esc>"

有关详细信息,请参阅:

Yes:

:set novisualbell
:set errorbells
:exe "normal \<Esc>"

For more information see:

拥抱影子 2024-11-14 04:55:26

打印 Bell 字符 (Ctrl-G)。在 Windows 上 echo ^G 会发出蜂鸣声。根据您的终端设置,它也可以在 Linux 上运行。

Print the Bell character (Ctrl-G). On Windows echo ^G will cause a beep. Depending on your terminal setup it also works on Linux.

半山落雨半山空 2024-11-14 04:55:26

这是 @johnsyweb-supports-our-mods 的答案,处理了更多边缘情况并包装在可重用命令中:

command -bar Bell call s:Bell()
function s:Bell()
  const l:belloff = &g:belloff
  const l:visualbell = &g:visualbell
  const l:mode = mode()
  const l:visual =
  \   l:mode ==? 'v' || l:mode ==# "\<C-V>"
  \|| l:mode ==? 's' || l:mode ==# "\<C-S>"
  try
    set belloff-=esc
    set novisualbell
    if l:visual
      execute "normal! \<Esc>"
    endif
    execute "normal! \<Esc>"
  finally
    let &g:belloff = l:belloff
    let &g:visualbell = l:visualbell
    if l:visual
      normal! gv
    endif
  endtry
endfunction

说明:

  • set belloff-=esc 使得在中点击 Escape正常模式响铃。
  • set novisualbell 使铃声响起。
  • 在可视或选择模式下点击 Escape 只会让我们返回到正常模式,而不会敲响铃声,因此我们需要先通过 execute "normal! \" 确保我们处于正常模式。
  • 执行“正常!\响铃。
  • 正常!如果我们以其中一种模式开始,则 gv 将返回到“可视”或“选择”模式。

Here's @johnsyweb-supports-our-mods's answer, with more edge cases taken care of and wrapped in a reusable command:

command -bar Bell call s:Bell()
function s:Bell()
  const l:belloff = &g:belloff
  const l:visualbell = &g:visualbell
  const l:mode = mode()
  const l:visual =
  \   l:mode ==? 'v' || l:mode ==# "\<C-V>"
  \|| l:mode ==? 's' || l:mode ==# "\<C-S>"
  try
    set belloff-=esc
    set novisualbell
    if l:visual
      execute "normal! \<Esc>"
    endif
    execute "normal! \<Esc>"
  finally
    let &g:belloff = l:belloff
    let &g:visualbell = l:visualbell
    if l:visual
      normal! gv
    endif
  endtry
endfunction

Explanation:

  • set belloff-=esc makes hitting Escape in Normal mode ring the bell.
  • set novisualbell makes the bell audible.
  • Hitting Escape in Visual or Select mode simply returns us to Normal mode without ringing the bell, so we need to ensure we are in Normal mode first with execute "normal! \<Esc>".
  • execute "normal! \<Esc>" rings the bell.
  • normal! gv returns us to Visual or Select mode if we started in one of those modes.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文