【问题标题】:Vim simple mappingVim 简单映射
【发布时间】:2017-10-15 03:33:43
【问题描述】:

我最近开始使用 Vim,刚刚安装了 NERDTree(一个导航文件的插件)。 访问该插件的命令是 :NERDTree,所以我认为通过为该命令分配一个来开始学习映射是个好主意。

所以我在我的.vimrc 文件中添加了以下行:map :nt :NERDTree - 但是当我在 vim 文件中键入 :nt 时(即使在重新启动后)我收到以下错误消息:not an editor command: nt

我也尝试在编辑文件时直接添加映射,方法是键入:map :nt :NERDTree,但当我尝试使用该命令时,它返回了相同的错误。

我检查了答案:What is the difference between the remap, noremap, nnoremap and vnoremap mapping commands in vim?,所以在我看来:map(与noremap 等相反)是一个很好的命令。

在输入原始命令时插件工作正常。

我做错了什么? (对不起菜鸟问题)

【问题讨论】:

    标签: vim


    【解决方案1】:
    • :NERDTree 是一个命令,而不是一个映射,所以这里没有理由创建递归映射。

    • :map 太过分了。您应该使用 :<mode>map(用于递归映射)或 :<mode>noremap(用于 nn 递归映射)。

    • 您在映射末尾缺少 <CR> 来告诉 Vim 实际执行 :NERDTree 命令。

    在这种特定情况下,正确的映射应该是:

    nnoremap :tn :NERDTree<CR>
    

    但是将某些内容映射到:&lt;anything&gt; 并不是一个好主意,因为每当您尝试执行 Ex 命令时它都会引入超时。这意味着您需要找到另一个组合。为什么不&lt;Space&gt;n

    nnoremap <Space>n :NERDTree<CR>
    

    【讨论】:

    • 非常好,非常感谢!快速提问“因为每当您尝试执行 Ex 命令时它都会引入超时”是什么意思?
    • : 是让您进入命令行模式的普通模式命令。如果你在正常模式下将某些东西映射到:,比如:tn,Vim 需要决定你真正想要做什么并为此使用超时。如果您是一个快速打字员,您可能不会注意到它,但如果您是一个正常人,您肯定会注意到它。
    【解决方案2】:

    使用您拥有的映射,将需要多次击键。您可以使用像 F2 这样的单个键吗?

     nnoremap <F2> :NERDTreeToggle<CR>
    

    这将在按下 F2 时切换打开/关闭NERDTree 并为您节省一些击键。

    【讨论】:

      【解决方案3】:

      Here 你可以弄清楚 vim 的映射是如何工作的,看起来像 ;)。使用前不要忘记获取新的 .vimrc。

      【讨论】:

      • 好的,谢谢。 “在使用之前不要忘记获取新的 .vimrc”是什么意思?
      • 他的意思是如果你给你的.vimrc添加一个映射,你要么需要重启vim,要么在映射生效前source你的.vimrc::source ~/.vimrc
      • @jimbasquiat 太棒了!如果您认为这个答案是正确的,请将此答案标记为正确或请点赞。关于您的另一个问题:每个 rc 文件,无论是哪个,都需要在更新后获取。因此,如果您的 .vimrc 文件有任何更改,您需要获取它。如果您的pwd 是您的.vimrc 所在的位置,您必须输入您的终端:source .vimrc 或简写形式. .vimrc。只有你的更新才会被 vim 识别。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多