【问题标题】:Write this in VimScript : "If Lexplore opened a file(anyfile) then close Lexplore"用 VimScript 写:“如果 Lexplore 打开了一个文件(任何文件)然后关闭 Lexplore”
【发布时间】:2022-01-08 14:33:20
【问题描述】:

我想: 打开文件后自动关闭 Lexpore 以获得更好的体验,但我不知道 vim 脚本。 我想应该不难。 我会很感激任何评论!

我现在正在学习 vim 脚本并尝试去做。 这是我现在的位置:

:autocmd <Lexplore> * :<Lexplore-exit>

if <command-mode> == "Lexplore *.*"
    excute \\close last buffer. (because now I am in new buffer)

我只需要知道如何在脚本中说“RUN”/“RUNED” 然后我对任何文件使用正则表达式,我需要说“关闭”。

事实是 我真的绝望了! :))))))))))))))

【问题讨论】:

    标签: vim netrw


    【解决方案1】:

    在全面使用 VimScript 之前,还有其他途径可以尝试。在这种情况下,一个简单的映射可能就足够了。

    基本上,映射的右侧只是一个宏,是您自己键入的一系列命令,这使得映射成为发现 Vim 自动化的一种非常好的和可行的方式。

    假设一个简单的布局,只有一个窗口,你怎么做你描述的手动

    1. 您可以通过:Lexplore 进行浏览。
    2. 在 Netrw 窗口中,按 &lt;CR&gt; 打开文件。
    3. 然后您使用&lt;C-w&gt;p 返回上一个窗口(Netrw 窗口)。
    4. 你用&lt;C-w&gt;q关闭窗口。

    上面的第2-4步很容易变成映射(&lt;key&gt;是占位符,随便用):

    nmap <key> <CR><C-w>p<C-w>q
    

    但该映射将随处可用,这可能不是一个好主意。进入文件类型插件的概念:

    1. 如果这些目录不存在,则创建它们:

      ~/.vim/after/ftplugin/                          (Unix-like systems)
      %userprofile%\vimfiles\after\ftplugin\          (Windows)
      
    2. 在上面的目录中创建一个netrw.vim文件:

      ~/.vim/after/ftplugin/netrw.vim                 (Unix-like systems)
      %userprofile%\vimfiles\after\ftplugin\netrw.vim (Windows)
      
    3. 把上面的映射放到那个文件里:

      nmap <buffer> <key> <CR><C-w>p<C-w>q
      

      &lt;buffer&gt; 告诉 Vim 只在 Netrw 中定义该映射。

    这是最简单的方法,可能适合您,也可能不适合。


    关于您的 cmets 的一些注意事项……

    • 缓冲区编号是实现细节。它们在您的日常工作中根本不重要,因此您不应过多考虑它们。缓冲区名称更有用,也更容易思考。
    • “侧边栏文件资源管理器”UX 模式是新手喜欢从以前的编辑器转移过来的熟悉模式,但它需要与 Vim 本身进行大量斗争才能“工作”。 Netrw 对这种模式的看法是不同的,是的,可能需要时间来适应,但它更适合整体体验。提示:放弃:Lexplore:Explore:Sexplore:Vexplore:Texplore 更有用。
    • 随着您了解更多,您很快就会发现文件浏览器,无论它们遵循何种 UX 模式,一开始都没有那么有用。
    • Netrw 已经有一个在新标签页中打开文件的映射::help netrw-t

    【讨论】:

    • 非常感谢!!!这是正确的答案,除了我在新选项卡而不是新窗口中打开 Lexplore 文件,所以我改变了那部分。它的 gtq.
    • 但是当我有 1 个文件并打开第二个文件时它可以工作,而不是当我有 2 个文件并打开第三个文件时。有没有 gt 的替代品,上面写着“转到最后一个活动标签”??
    • 实际上我在link 找到了一个解决方案,它完全有效!我把那个代码放在我的 ~/nvim/after/ftplugin/netwr.vim
    • 如果我想映射实际 怎么办?它不工作! nmap &lt;buffer&gt; &lt;Leader&gt;, &lt;CR&gt;&lt;leader&gt;lt&lt;C-w&gt;q 正在工作,但是当我用 &lt;CR&gt; 替换 &lt;Leader&gt;, 时,它不是。现在我正在学习vim中的映射。
    • 我知道我不应该在 vim 中那样使用制表符。请不要这么说:))))) 我是新手,但速度很快。我会很感激 A-level 资源来学习。
    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多