有没有办法映射插件特定的键在Vim中做多个键?

时间:2015-04-10 21:59:07

标签: vim mapping shortcuts nerdtree

我想映射NERDTree的标签打开键't'来做多件事。也就是说,我想打开选项卡然后执行以下命令列表:TlistToggle Ctrl W,Ctrl T,Ctrl W,Shift K,30,Ctrl W,减号。这样我打开文件的标签列表,然后水平拆分列表和文件,然后调整标签列表的大小。

我尝试了以下内容:

nnoremap <t> NERDTree-t TlistToggle <C-W><C-T><C-W><S-K>30<C-W> -

但这似乎没有做任何事情。

思考?我只是完全做错了。这甚至可能吗?

2 个答案:

答案 0 :(得分:2)

  • NERDTree映射不是全局映射,而是仅在插件的侧栏中存在(并且有意义)。这使得覆盖更加困难,但您可以挂钩NERDTree设置其'filetype',然后定义缓冲区本地映射以覆盖NERDTree:

    :autocmd FileType nerdtree nnoremap t ...

  • 虽然普通模式命令(如<C-w>...内容)确实可以连接,但对于插件调用则不然。您可以通过:nmap <buffer> t找到NERDTree:

    :调用nerdtree#invokeKeyMap(“t”)

Taglist也是一个Ex命令;您可以将两者结合使用|(在映射中写为<Bar>):

:call nerdtree#invokeKeyMap("t")<Bar>TlistToggle<CR>

所以,这样的事情应该有效(我没有测试过):

:autocmd FileType nerdtree nnoremap <buffer> t :call nerdtree#invokeKeyMap("t")<Bar>TlistToggle<CR><C-W><C-T><C-W>K30<C-W>-

答案 1 :(得分:0)

这是我用来在NERDTree的新标签页中打开文件然后拆分并调整文件大小的最终解决方案。 TlistToggle:

autocmd FileType nerdtree nnoremap <buffer> t :call nerdtree#ui_glue#invokeKeyMap("t")<CR> :TlistToggle<CR> <C-w><C-t><C-w>K :exe "resize " . ((winheight(0) + winheight(1)) * 3/20)<CR>

这会将在水平制表符中打开的标记列表的大小调整为整个窗口中总行数的15%。