选项卡导航映射不起作用



注意:我使用的是终结者而不是终端。但是,由于所有其他映射都可以正常工作,为什么这些映射不起作用。

我已经尝试在我的vimrc文件中使用这些映射,以便能够使用Tab导航。但它根本不起作用。

nnoremap <C-S-tab> :tabprevious<CR>
"nnoremap <C-tab>   :tabnext<CR>
nnoremap <C-tab> :tabn<CR>     "I also tried this
nnoremap <C-t>     :tabnew<CR>
inoremap <C-S-tab> <Esc>:tabprevious<CR>i
inoremap <C-tab>   <Esc>:tabnext<CR>i
inoremap <C-t>     <Esc>:tabnew<CR>
inoremap <C-S-w>   <Esc>:tabclose<CR>

"还要转到第n个选项卡使用<A-Fn>

nnoremap <A-F1> 1gt
nnoremap <A-F2> 2gt
nnoremap <A-F3> 3gt
nnoremap <A-F4> 4gt
nnoremap <A-F5> 5gt
nnoremap <A-F6> 6gt
nnoremap <A-F7> 7gt
nnoremap <A-F8> 8gt
nnoremap <A-F9> 9gt
nnoremap <A-F10> 10gt 

注意:我安装了ctagcscope。所以我认为可能会有一些冲突,因为ctrl-t是从某个标签跳回来的。只有这个映射适用于新的选项卡。

我还检查了ctrl-PageDown是否出于同样的目的正常工作。

第二个问题:

这个键表示法是如何在vimrc中工作的。是这样的吗:

  1. 所有修改键都应该在类似的大写字母中使用

    • C表示Ctrl
    • A代表Alt
    • S表示移位
  2. 其他的钥匙都是小的。

但是像这样的密钥呢

  • 主页
  • Backspace
  • Escape
  • PageUp
  • PageDown
  • 选项卡
  • 功能键等

如何使用它们?

在这里我读到了这些应该如何在映射中使用,但即使他们在映射中也使用了tab而不是tab

为失望做好准备。

终端密钥

Vim接受终端键代码,因此并非所有的键组合都是可能的。找出哪些键是可识别的最好方法是打开插入模式,然后按ctrl+v,然后按组合键。这将显示原始代码。对另一个组合键执行此操作。如果原始代码相同,则Vim无法区分它们。例如ctrl+v1ctrl+移位1+选项卡

您的映射

您可能应该避免对切换选项卡执行插入模式映射。它根本不是Vim方式,因为插入模式应该只在短脉冲串中使用。

您的:tabprev:tabnext映射可以简化为gTgt映射。就我个人而言,我并不介意默认的gtgT映射。

<key>表示法

据我所知,这个案子无关紧要。我的所有映射都是小写的。有关<>符号的列表,请参见:h key-notation

<c-..>表示控制,<a-...>表示alt,<s-...>表示移位。示例组合为<c-s-space>。注意:大多数<c-s-...>映射都将失败。

使用选项卡

Vim的选项卡不同于大多数文本编辑器选项卡。它们更像是一组窗口/拆分的视口。此外,Vim是以缓冲区为中心的,而不是像大多数编辑器那样以选项卡为中心。例如,使用像Vim的快速修复列表这样的功能通常在没有选项卡的情况下更容易(如果必须使用选项卡,请参见:h 'switchbuf)。Vim的选项卡经常妨碍使用拆分,因为有更好的窗口和缓冲区导航命令可用。我个人有很多文件打开(有时是100+),不使用选项卡,平均使用1-2个拆分,没有任何问题。

底线:学会有效地使用缓冲区。

结论

我建议你尽快打破这个标签工作流程,学会喜欢缓冲区。您不会真正需要映射,也不会违背Vim的本质。

阅读:help key-notation了解…Vim的键表示法的解释。


一般来说,安全起见是个好主意,所以我建议在映射组合时遵循以下约定:

  • 修改键始终使用大写字母,C用于ControlS用于ShiftA用于AltD用于Command(仅限MacVim GUI),M用于Meta

  • 字母键abc…xyz、始终使用小写字母

  • 始终将"特殊"键TabSpaceUp等的第一个字母大写。

示例:

<S-Up>
<C-r>
<A-LeftMouse>

但是,下面的符号也同样有效,所以…无论你选择什么符号,都要尽量保持一致:

<s-UP>

在单个映射中使用多个修饰符是不可靠的,因此从长远来看,如果完全避免使用它们,效果会更好。

nnoremap <C-S-j> :echo "csj"<CR>
nnoremap <C-j>   :echo "cj"<CR>

现在在正常模式下按下<C-j><C-S-j>


CCD_ 36与CCD_。


:verbose map <C-t>

显示映射到<C-t>的内容以及映射发生的位置。您可以使用它来调试映射。


我同意Peter的观点,你错误地使用了标签页插入模式。

相关内容

  • 没有找到相关文章