根据文件类型在vim中执行命令

4

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

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

一个解决方法是运行命令inoremap # X#<left><backspace><right>

如何让这个命令在每次打开Python (*.py) 文件进行编辑时都自动运行?


你尝试过使用“autocommand”吗? - dlmeetei
@dlmeetei 这是什么/它是如何工作的? - FreelanceConsultant
2个回答

5

TL;DR

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

文件类型特定代码

至少有两种解决方案,其中一种比另一种更可取。

autocmd FileType

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

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

这个方法可行,有将代码组织在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>

一些注意事项

建议正确设置b:undo_ftplugin,这会有所帮助(相信我)。 你可以参考我在Github上的撤销脚本

尽可能使用<buffer>-buffersetlocal<LocalLeader>,这是针对本地内容的。

关于功能强大性

一个脚本比单个autocommand行更具灵活性。在autocommand中执行任何复杂操作都需要跳过更多障碍,而在脚本中它们可以直接存在。此外,你感觉更像是在编写程序(事实上确实如此),而不是一次性配置。

模块化对组织来说也是完美的:所有python自定义代码都在同一个地方。

并且打字量也少了 :)

关于性能

没有进行任何测量。别打我。

拥有许多autocommand可能会减慢vim的速度,因为它们在事件触发时必须被检查。不要用filetype stuff来阻塞autocommand,而是使用一个已经将被源于你的文件(ftplugin)。

通过依附于现有的自定义机制,你可以获得所有好处,没有任何风险。再次说明,让vim按需为你源码文件几乎肯定比尝试重新实现它的ftplugin轮子更有效率。


autocmd ! 是什么意思?我也不熟悉组 - 它们是做什么的/如何工作? - FreelanceConsultant
尝试阅读:help augroup;内部帮助是我在学习Vim概念时的首选。 - D. Ben Knoble

1
这解决了你的问题吗?
au FileType python inoremap # X#<left><backspace><right>

这个自动命令运行你的Python文件类型映射。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接