【问题标题】:vim execute command depending on file typevim 根据文件类型执行命令
【发布时间】:2019-08-12 11:38:26
【问题描述】:

如何让 vim 根据文件类型执行命令?

最近一直在编辑很多 Python 文件和 cmets 自动缩进到第 0 列。

解决此问题的一种方法是运行命令inoremap # X#<left><backspace><right>

如何在每次打开 python (*.py) 文件进行编辑时运行此命令?

【问题讨论】:

  • 你试过autocommand吗?
  • @dlmeetei 那是什么/它是如何工作的?

标签: vim


【解决方案1】:

TL;DR

使用 vim 的文件类型插件机制。

文件类型特定代码

对此有(至少)两种解决方案,其中一种优于另一种。

autocmd FileType

这已经作为答案发布了,但一般形式是

augroup your_group
  autocmd!
  autocmd FileType python your good code
augroup END

这很有效,并且具有在 vimrc 中对代码进行分组的优势。

但还有第二个更强大、可能更高效的替代方案。它 是my preferred solution

after/ftplugin

我有written extensively 关于使用文件类型 vim 中的插件。

它的要点是您需要文件类型检测和插件(至少filetype plugin on,尽管您可能需要filetype plugin indent on)。然后你 在~/.vim/after/ftplugin/<filetype>.vim(或几个 变体,请参阅:h add-filetype-plugin:h ftplugin-name:h ftplugin)。

所以最终,

" ~/.vim/after/ftplugin/python.vim
inoremap # X#<left><backspace><right>

一些注意事项

正确设置b:undo_ftplugin 是一个好习惯:它会有所帮助(相信我)。 你可以借用我的undo script on Github

考虑使用&lt;buffer&gt;-buffersetlocal&lt;LocalLeader&gt;,其中 可能的。毕竟这是本地的东西。

开机

与单行自动命令相比,脚本为您提供了更多的灵活性。你有 在自动命令中跳过更多的障碍来做任何复杂的事情,其中 脚本他们可以坐下来。此外,您感觉更像是在编写程序 (你是)而不是一次性配置。

模块化也非常适合组织:您所有的 python 自定义 代码在一个地方。

而且打字少了很多:)

关于性能

没有测量过任何东西。别开枪。

拥有大量自动命令会降低 vim 的速度,因为它们必须被检查 当他们的事件发生时。而不是用文件类型阻塞自动命令 东西,使用已经为你提供的文件(一个 ftplugin)。

借助现有的自定义机制,您可以获得所有好处 并且没有任何风险。同样,几乎可以肯定让 vim 更有效 按需为您获取文件,然后尝试重新实现它的 ftplugin 轮。

【讨论】:

  • autocmd ! 是做什么的?我也不熟悉小组——他们做什么/他们是如何工作的?
  • 尝试阅读:help augroup;内部帮助是我了解 vim 概念的第一站
【解决方案2】:

这能解决您的问题吗?

au FileType python inoremap # X#<left><backspace><right>

此自动命令运行文件类型 python 的映射

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多