3

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

我尝试在我的 vimrc 文件中使用这些映射来使用选项卡导航。但它根本不起作用。

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 

注意:我安装了ctagscscopectrl-t所以我认为从某个标签跳回来可能会有一些冲突。只有这个映射适用于新标签。

我也检查过ctrl-PageDown是否可以正常工作。

第二个问题:

这个关键符号在 vimrc 中是如何工作的。是这样的吗:

  1. 所有修饰键都应在 Caps 中使用,例如

    • C 为 Ctrl。
    • A代表替代。
    • S 表示换档。
  2. 其他钥匙都很小。

但是像这样的键呢:

  • 结尾
  • 退格
  • 逃脱
  • 向上翻页
  • 向下翻页
  • 标签
  • 功能键等

如何使用它们?

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

4

2 回答 2

3

为失望做好准备。

终端键码

Vim 接受终端键码,所以不是所有的键组合都是可能的。确定哪些键可识别的最佳方法是打开插入模式,然后按ctrl+ ,v然后按您的组合键。这将向您显示原始代码。对另一个组合键执行此操作。如果原始代码相同,则 Vim 无法区分它们。例如ctrl+ v ctrl+ shift+ tab

你的映射

您可能应该避免使用插入模式映射来切换选项卡。它根本不是 Vim 方式,因为插入模式只能在短时间使用。

您的:tabprevand:tabnext映射可以简化为gTandgt映射。我个人不介意默认gtgT映射。

<key>符号

据我所知,情况无关紧要。我所有的映射都是小写的。有关<>符号列表,请参阅:h key-notation

您在<c-..>for control、<a-...>alt 和<s-...>shift 上是正确的。示例组合是<c-s-space>. 注意:大多数<c-s-...>映射都会失败。

使用标签

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

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

结论

我建议你快速打破这个选项卡工作流程并学会喜欢缓冲区。你不会真的需要你的映射,也不会违背 Vim 的本质。

于 2014-10-27T13:51:41.983 回答
2

阅读:help key-notation以了解... Vim 的关键符号。


安全起见通常是个好主意,因此我建议在映射组合时遵循以下约定:

  • 修饰键始终使用大写字母 for , for C, for , for ( MacVim GUI only), for ,ControlSShiftAAltDCommandMMeta

  • 始终使用小写字母作为字母键abc…xyz,,

  • 始终将“特殊”键的第一个字母大写Tab,, Space, Up, 等。

例子:

<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>在正常模式下。


<C-S-w>与 无法区分<C-w>


:verbose map <C-t>

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


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

于 2014-10-27T13:56:48.610 回答