vim 根据文件类型执行命令

use*_*501 4 vim

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

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

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

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

D. *_*ble 5

长话短说

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

文件类型特定代码

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

autocmd FileType

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

augroup your_group
  autocmd!
  autocmd FileType python your good code
augroup END
Run Code Online (Sandbox Code Playgroud)

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

但还有第二种更强大、可能性能更高的替代方案。这是我的首选解决方案

after/ftplugin

写过 很多关于在 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>
Run Code Online (Sandbox Code Playgroud)

一些注意事项

正确设置是一个很好的做法b:undo_ftplugin:它会有所帮助(相信我)。你可以借用我在 Github 上的撤消脚本

尽可能考虑使用<buffer>-buffersetlocal、 和。<LocalLeader>毕竟,这是针对本地事物的。

接通电源

与单行自动命令相比,脚本为您提供了更大的灵活性。您必须跳过更多的环节才能在自动命令中执行任何复杂的操作,而在脚本中它们就可以了。此外,你感觉更像是在编写一个程序(你确实是这样),而不是一次性配置。

模块化也非常适合组织:所有 Python 自定义代码都位于一处。

而且打字也少了很多:)

论性能

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

拥有大量自动命令会减慢 vim 的速度,因为在事件触发时必须检查它们。不要用文件类型的东西阻塞自动命令,而是使用已经为您提供的文件(ftplugin)。

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