如何让Vim根据文件类型执行命令?
最近我一直在编辑很多Python文件,并且注释自动缩进到了第0列。
一个解决方法是运行命令inoremap # X#<left><backspace><right>
如何让这个命令在每次打开Python (*.py) 文件进行编辑时都自动运行?
如何让Vim根据文件类型执行命令?
最近我一直在编辑很多Python文件,并且注释自动缩进到了第0列。
一个解决方法是运行命令inoremap # X#<left><backspace><right>
如何让这个命令在每次打开Python (*.py) 文件进行编辑时都自动运行?
使用vim的文件类型插件机制。
至少有两种解决方案,其中一种比另一种更可取。
autocmd FileType
这已经作为答案发布过了,但一般形式是:
augroup your_group
autocmd!
autocmd FileType python your good code
augroup END
这个方法可行,有将代码组织在vimrc文件中的优点。
但是还有第二种更强大、可能更高效的替代方案。这就是我偏爱的解决方案。
after/ftplugin
其要点是需要文件类型检测和插件(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>
、-buffer
、setlocal
和<LocalLeader>
,这是针对本地内容的。
一个脚本比单个autocommand行更具灵活性。在autocommand中执行任何复杂操作都需要跳过更多障碍,而在脚本中它们可以直接存在。此外,你感觉更像是在编写程序(事实上确实如此),而不是一次性配置。
模块化对组织来说也是完美的:所有python自定义代码都在同一个地方。
并且打字量也少了 :)
我没有进行任何测量。别打我。
拥有许多autocommand可能会减慢vim的速度,因为它们在事件触发时必须被检查。不要用filetype stuff来阻塞autocommand,而是使用一个已经将被源于你的文件(ftplugin)。
通过依附于现有的自定义机制,你可以获得所有好处,没有任何风险。再次说明,让vim按需为你源码文件几乎肯定比尝试重新实现它的ftplugin轮子更有效率。
autocmd !
是什么意思?我也不熟悉组 - 它们是做什么的/如何工作? - FreelanceConsultant:help augroup
;内部帮助是我在学习Vim概念时的首选。 - D. Ben Knobleau FileType python inoremap # X#<left><backspace><right>