为vim命令设置键盘快捷方式

8
我想让 <C-*> 提供:set nohlsearch 命令的功能。我该怎么做?映射命令似乎只能将一组按键映射到另一组按键。如何将按键组合映射到一个命令?

你应该更改问题,以注明命令需要包括一个“大写字母”(即修改后)。 - New Alexandria
@NewAlexandria:我不理解你的建议,你能否再解释一下? - Amal Antony
在Vim中设置键盘快捷键本身就是一个太琐碎的任务,不适合在这个网站上提问 - 这就是为什么你被踩了。你需要让问题更正确、更不明显:如何使用像shift这样的修饰符。 - New Alexandria
@NewAlexandria:即使不进行改述,我认为这个问题还是可以的。重新映射适用于按键组合到按键组合的映射。我的疑问是,如何将其用于组合到命令的映射。我错过了命令中的<CR>,这也是映射未发生的部分原因。今天我学到了一些符号无法映射的新知识!如果您仍然希望重新表述问题,请随意编辑!如果您是给我投反对票的人,请考虑重新考虑您的投票。非常感谢! - Amal Antony
@NewAlexandria:我不会编辑这个问题,因为我认为它现在看起来很好。无论如何,感谢您的建议。 - Amal Antony
3个回答

16
你要这样做:
:nnoremap <C-*> :set nohlsearch<CR>

""表示同时按下CtrlShift8(至少在英文键盘布局上)。不幸的是,这个特定的组合键不能使用。由于键盘输入的内部处理方式,即使在GVIM中,通常也无法实现。一些键位组合,如Ctrl+非字母键无法映射,而Ctrl+字母键Ctrl+Shift+字母键无法区分。(除非您的终端为其发送了不同的termcap代码,但大多数终端并未这样做。)在插入或命令行模式下,尝试键入键位组合。如果没有发生任何事情/未插入任何内容,则无法使用该键位组合。这也适用于<Tab>/<C-I><CR>/<C-M>/<Esc>/<C-[>等。(唯一的例外是<BS>/<C-H>。)这是一个已知的痛点,并且是vim_dev和#vim IRC频道上各种讨论的主题。"

有些人(尤其是Paul LeoNerd Evans)希望解决这个问题(即使是对于支持此功能的终端中的控制台Vim),并提出了 各种建议

但是,截至今天,还没有补丁或志愿者出现,尽管许多人表达了希望在未来的Vim 8主要版本中实现此功能的愿望。

您可以选择另一个键组合,例如功能键之一:

:nnoremap <F5> :set nohlsearch<CR>

顺便说一句,我真的很想解决这个问题;我已经用完了所有的快捷键 :-) 有了标准回复,当我向 Bram 提出最终解决这个问题的请求时,我就能找到所有这些问题(当我觉得时间已经准备好了)。 - Ingo Karkat

2

正如其他人已经指出的那样,由于按键传递给终端的方式,所有类型的按键绑定都不可能。然而,为了实现你所要求的 (:nohlsearch),下面的代码允许你通过按空格来切换高亮显示。

set nocompatible

let g:highlighting = 0
function! Highlighting()
  if g:highlighting == 1 && @/ =~ '^\\<'.expand('<cword>').'\\>$'
    let g:highlighting = 0
    return ":silent nohlsearch\<CR>"
  endif
  let @/ = '\<'.expand('<cword>').'\>'
  let g:highlighting = 1
  return ":silent set hlsearch\<CR>"
endfunction
nnoremap <silent> <expr> <Space> Highlighting()

0
你应该能够在你的 .vimrc 文件中这样做:
nnoremap <C-*> :set nohlsearch<CR>

虽然我不确定这是否总是被支持的快捷方式。

请参见这里的另一个例子


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