谁能简单地给我解释一下,根据文件类型改变Vim缩进行为的最简单方法是什么?例如,如果我打开一个Python文件,它应该缩进2个空格,但如果我打开一个Powershell脚本,它应该使用4个空格。
当前回答
我通常使用expandtab set,但这对makefile不好。我最近补充道:
:autocmd FileType make set noexpandtab
到。vimrc文件的末尾,它可以识别Makefile, Makefile和*。Mk作为makefile文件,不展开制表符。可以推测,您可以扩展它。
其他回答
使用ftplugins或autocommands设置选项。
ftplugin
在~ /维姆- ftplugin python。维姆:
setlocal shiftwidth=2 softtabstop=2 expandtab
别忘了打开~/.vimrc:
filetype plugin indent on
(:h ftplugin获取更多信息)
autocommand
在~ / . vimrc:
autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab
我还建议学习tabstop和softtabstop的区别。很多人都不知道softtabstop。
当vim切换到特定文件类型时,可以添加要执行的.vim文件。
例如,我有一个文件~/.vim/after/ftplugin/html。Vim的内容如下:
setlocal shiftwidth=2
setlocal tabstop=2
这导致vim使用宽度为2个字符的制表符进行缩进(在我的配置中,noexpandtab选项是全局设置的)。
这里描述了:http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4,向下滚动到文件类型插件一节。
在Lua(对于Neovim用户)中,您可以使用RUNTIMEPATH/ftplugin/*yourfiletype*。Lua选项如下:
vim.opt_local.shiftwidth = 2
vim.opt_local.tabstop = 2
只是要确保在引号中使用字符串值。例如:
vim.opt_local.foldmethod = 'marker'
我使用了一个用C语言写的工具autotab。它分析加载文件的前几千行,并确定Vim参数shiftwidth, tabstop和expandtab的值。
这是使用gcc -O autotab.c -O autotab进行编译的。与Vim集成的说明在顶部的注释头中。
Autotab相当聪明,但有时会让人困惑,特别是使用不同的缩进样式不一致地维护。
如果一个文件明显使用制表符或制表符和空格的组合来缩进,Autotab将通过考虑诸如跨连续行内部元素的对齐方式(如注释)等因素来确定所使用的制表符大小。
它适用于各种编程语言,并且可以容忍不遵守缩进增量的“带外”元素,例如C预处理指令、C语句标签,更不用说明显的空行了。
这可能是我们大多数人都知道的,但无论如何(我第一次感到困惑): 执行:set et (:set expandtabs)不会更改文件中已经存在的选项卡,必须执行:retab。 例如:
:set et
:retab
文件中的制表符被足够的空格替换。要让标签返回简单地做:
:set noet
:retab