如何停止在PHP中输入>时Vim发出哔哔声

4

下面是一段 PHP 代码

 $foo = array( 'bar' => 'baz' );

当我在Vim中输入这个,按>键时会发出响声。如果我输入<something>,它就不会响了,所以我认为它试图帮助我并说:“啊,你关闭了一个尖括号,但你没有打开一个!”但它并没有帮助我,似乎它并没有理解上下文:分配到关联数组。
当我输入$foo->bar时,它也会响起。
我已经设置了set ft=php,其他都正常工作,除了这个令人恼火的响声。
我知道我可以完全禁用响声,但我更愿意保留对我真正需要响铃的事情的响声。我知道有可视化提示,但我不想每次访问方法、属性或将其分配给新数组时都闪烁引起头痛!
3个回答

6

你可能已经在代码中加入了 set showmatch 这一行,它会尝试自动匹配括号,帮助你更好地阅读代码。

你可以在你的 .vimrc 文件中加入以下代码:

au BufWinEnter *.php set mps-=<:>

或者只是
setlocal matchpairs-=<:>

在PHP的vim配置中。

4
蜂鸣声是由于“showmatch”选项试图定位相应的“<”,但无法找到。因此,您可以通过以下方式之一防止蜂鸣声:
- 从“matchpairs”选项中删除尖括号;然而,这也会禁用HTML标签开始/结束的功能:`:setlocal matchpairs-=<:>` - 关闭“showmatch”;与前者相反,这不幸是全局设置:`set noshowmatch`

我已经创建了一个功能请求,以添加一个新选项来避免在这种情况下出现哔声:https://code.google.com/p/vim/issues/detail?id=319 - blueyed

1

您可以完全禁用插入模式下的提示音:

" Disable bell during insert mode, to avoid beep with 'showmatch'.
" Source: https://code.google.com/p/vim/issues/detail?id=319
augroup NoBellDuringInsert
    au!
    au InsertEnter * :call SetBell(1)
    au InsertLeave * :call SetBell(0)
augroup END

fun! SetBell(disable)
  if a:disable
    let s:mybell = [&eb, &vb, &t_vb]
    " need to set visualbell, else bell will still be called.
    set noeb vb t_vb=
  else
    let [&eb, &vb, &t_vb] = s:mybell
  endif
endfun

vim_dev邮件列表中有一项新设置的待处理补丁: https://groups.google.com/d/msg/vim_dev/-jN4_nsSls0/Nbjbrh4jXYEJ


这绝对是一个更好的通用答案。例如,禁用与Alt-相关联的命令上的错误提示音可以使用nnoremap <silent> <M-h> :call SetBell( 1 )<esc><C-W><Left>:call SetBell( 0 )<CR> - DavisDude

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