如何在vim中将<C-/>映射为切换注释?

51

我在iterm2下使用vim。我正在使用NERDCommenter插件,我想使用Ctrl + /来切换注释(试图从Idea / Eclipse切换到vim)。这是我的.vimrc中的映射:

 nmap <C-/> <leader>c<Space>
 vmap <C-/> <leader>c<Space>

但它似乎并不起作用。可能的原因是什么?

4个回答

73

由于某些原因,vim将<C-/>识别为<C-_>(您可以在插入模式下使用<C-v><C-/>查看)。这可能是终端或历史设计问题,终端应用程序必须受此影响。

Gvim甚至不会尝试识别<C-/>。它将其视为单个/


5
谢谢!我刚把它映射到 "<C-_> ",现在可以用了!最初的想法是映射到 "<D-/>",但那好像在vim中没有反应。 - dev_nut
2
这只是在iterm2上吗?我正在使用Terminal.app,但只会得到铃声错误,什么也不会发生。然而,当我实际按下<C-_>绑定中的_键时,它将执行注释切换。如何让Terminal.app使用<C-/>绑定? - skilbjo
1
以上提到的 <C-_> 只适用于数字键盘(10key)上的下划线,而不适用于苹果紧凑型键盘。此外,<C-/> 不是有效的按键码(显然只有有限的 CTRL + 字母 组合,/ 不在其中)。来源:http://vim.1045645.n5.nabble.com/How-to-map-Ctrl-td1192843.html - skilbjo
<C-_>在终端和iTerm上可以完美地运行,但是在MacVim上却不行。有没有人碰巧找到了解决办法? - Anton Kastritskiy
这是tmux的问题。由于某种原因,在tmux中,<C-/>“不存在”。在tmux会话之外,在现代终端中似乎可以正常工作。 - ABabin

24

如果你处于可视模式,以下是如何恢复选择的方法:

nmap <C-_>   <Plug>NERDCommenterToggle
vmap <C-_>   <Plug>NERDCommenterToggle<CR>gv

对我来说,<Bar> 起到了作用,因为我已经映射了 <CR>:vmap <C-_> <Plug>NERDCommenterToggle<Bar>gv - tebanep

4

总结其他答案的信息。对我来说(可能由于我使用 neovim),<C-/> 在 Windows 上运行良好,但在 Linux 上需要使用 <C-_>

if has('win32')
  nmap <C-/> <leader>c<Space>
  vmap <C-/> <leader>c<Space>
else
  nmap <C-_> <leader>c<Space>
  vmap <C-_> <leader>c<Space>
endif

我使用 neovide --remote-tcp=localhost:6666 命令在 WSL 中运行 neovim,并使用 neovide 进行编辑,但无法使用 nmap <C-/> <leader>c<Space>。 - Good Pen
这是不正确的说法。在旧版Windows系统上可能是这样,但现在不再是了。至少在Windows 11上,使用Windows终端和neovim,<c-/>不被识别,而<c-_>的效果与Unix系统相同。 - adamency
那是不真实的。这可能在旧版Windows系统上是这样,但现在不再是了。至少在Windows 11上,使用Windows Terminal和neovim,<c-/>不被识别,而<c-_>与Unix系统上的操作方式相同。 - adamency
1
其次,重新映射另一个映射是个坏主意。最好的方法是去源头,使用原始命令nerdcommenter#Comment(0,"toggle")(替代已弃用的NERDCommenterToggle)。这将防止在未来某些旧映射的某些部分被重新映射到其他内容时出现问题。 - adamency

2
如果你正在使用iTerm2 + vim,也许以下步骤可以帮助你:
  1. 将以下代码添加到你的.vimrc文件中。

    map ,cc <plug>NERDCommenterToggle

    或者如果你已经将<leader>定义为逗号,则使用以下代码:

    map <leader>cc <plug>NERDCommenterToggle

  2. 检查是否可以使用,cc在vim中切换注释

  3. 打开,点击+按钮

  4. 选择Send Text with "vim" Special Chars,输入,cc如此

  5. 现在你可以使用C-/在vim中切换注释了。


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