【问题标题】:Is there a way to map plugin specific keys to do multiple keys in Vim?有没有办法将插件特定的键映射到 Vim 中的多个键?
【发布时间】:2015-04-10 21:59:07
【问题描述】:

我想映射 NERDTree 的选项卡打开键“t”来执行多项操作。即,我希望它打开选项卡,然后执行以下命令列表:TlistToggle Ctrl W、Ctrl T、Ctrl W、Shift K、30、Ctrl W、减号。这样我打开文件的taglist,然后水平拆分列表和文件,然后调整标签列表的大小。

我尝试了以下方法:

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

但这似乎没有任何作用。

想法?我是不是完全做错了。这甚至可能吗?

【问题讨论】:

    标签: vim mapping shortcut nerdtree


    【解决方案1】:
    • NERDTree 映射不是全局映射,它只存在(并且有意义)在插件的侧边栏中。这使得覆盖变得更加困难,但您可以连接到 NERDTree 设置其 'filetype',然后定义一个 buffer-local 映射来覆盖 NERDTree:

      :autocmd FileType nerdtree nnoremap t ...

    • 虽然 normal 模式命令(如 &lt;C-w&gt;... 东西)确实可以连接,但插件调用并非如此。你可以通过:nmap &lt;buffer&gt; t找到NERDTree:

      :调用nerdtree#invokeKeyMap("t")

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

    :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>-
    

    【讨论】:

    • 有什么问题?尝试通过(串联)命令构建此命令。
    • 问题是什么都没有发生。有没有办法启用某种详细的错误输出?
    • 我在 nerdtree 面板中使用了“verb map t”,它给了我这个:“*@:call 12_openInNewTab(0)”。我是否需要覆盖 nerdtree.vim 中的特定调用,或者有没有办法在 .vimrc 中覆盖它?或者也许是一种将我的 autocmd 升级到 nerdtree 之上的方法?
    • 问题是 nerdtree 有一个更新,其中“nerdtree#invokeKeyMap”已更改为“nerdtree#ui_glue#invokeKeyMap”
    • 很高兴看到您找到了解决方案并发布了该解决方案。不过,您至少可以对我的回答表示赞赏。
    【解决方案2】:

    这是我用来从 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%。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多